2017-09-13 66 views
0

我得到了兩個命令(與git無關),我希望在提交時執行這兩個命令(無論是之前還是之後)以及執行pull之後。只有在特定文件夾中的文件發生變化時才執行git鉤子操作

但是,這些命令需要一段時間才能運行,所以我不希望它們在每次提交或提交時都執行。如果特定文件夾中的文件自上次運行後發生更改,它們只會執行有用的工作。

他們創建或更新git在同一文件夾中忽略的文件。當然,這個被改變的文件不應該在下一次執行提交或拉取時觸發命令的執行。該文件夾中的所有文件都位於其頂層(沒有子目錄)。所有更改與是否應執行命令相關的文件都由git進行跟蹤。當新文件出現在文件夾中並且沒有被git跟蹤時,我不在乎這些命令是否已經被執行。但是當它們添加到repo的提交被創建時,它們必須被執行。

這怎麼解決?

+1

我懷疑[這個答案](https://stackoverflow.com/a/3068990/147356)是你需要的。 – larsks

+0

@larsks謝謝!隨着你的提示,我可以自己完成剩下的工作。 –

回答

0

我認爲這是做我想做的。在我的暗示給了我一個提示後,我想出了它。沒有任何鉤子只能在拉出後執行,但在任何合併之後進行也不會有問題。

掛鉤post-commitpost-merge現在有這樣的內容:

#!/bin/sh 
./.hooks/conditionallyMergeChangedPdfs 
exit 0 

.hooks/conditionallyMergeChangedPdfs包含此:

#!/bin/bash 
for folder in "Vorlesungsfolien" "Übungsfolien" 
do 
    diff="$(git diff HEAD^ --name-only --diff-filter=ACMR "$folder")" 
    if [ ! -z "$diff" ] 
    then 
    rm -f "$folder/All.pdf" 
    pdftk "$folder/"* cat output "$folder/All.pdf" 
    fi 
done 

不幸的是,這不是線程安全的,因爲顯然是一個不能獲得新的散列但是必須依賴腳本執行時的回購信息。

相關問題