2011-11-20 83 views
3

我有這樣的場景,其中GIT:如何訪問到存儲庫文件與GIT後收到鉤

我想,當它在推動更改爲「做什麼」與特定文件。 例如,一個.sql文件必須在數據庫中轉儲。

我使用GIT「後接受」鉤與這樣的語句:

DUMP=$(git diff-tree --name-only -r -z master dump.sql); 

if [ -n "$DUMP" ]; then 
    // using the new dump.sql 
fi 

如何訪問從鉤剛剛推新dump.sql?

回答

7

您可以從版本$轉用檢索文件dump.sql:

git cat-file blob $rev:dump.sql 

的,收到後鉤也被稱爲比主推其他的事情......希望你有一個檢查的地方,你」重新處理更新後的主參考。就風格而言,我會使用傳遞給鉤子的新版本值,而不是直接從鉤子中引用主數據。

通常我寫了後收到鉤是這樣的:

while read oldrev newrev refname; do 
    if [ "$refname" = "refs/heads/master" ]; then 
     # definitely updating master; $oldrev and $newrev encompass the changes 
     if git diff-tree --name-only -r -z $oldrev $newrev dump.sql; then 
      # dump.sql changed... 
     fi 
    fi 
done 

重要的是,這也與單推科佩斯發送過多次提交一氣呵成掌握---命令你在問題中表現出只看着主人的最後一次提交。

+0

非常感謝!有沒有辦法確定引用的「分支」更新是主而不是其他分支? – Randomize

+1

@Randomize post-receive鉤子在stdin上傳遞了一些信息......我將通過編輯答案來說明它的可讀性更強 – araqnid

+0

WOW!再次感謝!最後一個問題:谷歌搜索我找到關於編寫鉤子太通用的文檔。你知道有什麼好的網站或書能夠正確解釋如何編寫鉤子,定義環境變量等嗎? – Randomize

相關問題