我克隆了GHC(格拉斯哥Haskell編譯器)存儲庫。爲了構建編譯器,你需要幾個庫,它們也都可以用作git庫。爲了緩解這些情況,GHC黑客們包括一個腳本sync-all
,該腳本在執行時會更新所有相關的存儲庫。如何在git中獲取或拉取命令後立即執行命令?
現在我的問題:我怎麼能讓git自動執行之後我自動執行了git pull
?我聽到有關使用鉤子的一些信息,但我不知道,我必須做什麼。
我克隆了GHC(格拉斯哥Haskell編譯器)存儲庫。爲了構建編譯器,你需要幾個庫,它們也都可以用作git庫。爲了緩解這些情況,GHC黑客們包括一個腳本sync-all
,該腳本在執行時會更新所有相關的存儲庫。如何在git中獲取或拉取命令後立即執行命令?
現在我的問題:我怎麼能讓git自動執行之後我自動執行了git pull
?我聽到有關使用鉤子的一些信息,但我不知道,我必須做什麼。
甲post-receive
或post-update
鉤通常被用於這種任務,每個推後執行。
收到後和10後更新鉤之間的區別是在參數:一個post-receive
將除了他們的名字之外,還會得到所有裁判的舊值和新值。
缺失的部分是:鉤在哪裏執行?
的博客文章「Missing git hooks documentation」從(大),所以貢獻者Mark Longair揭示了一些這方面的光:
當前工作目錄將是git的目錄。
- 因此,如果這是一個純倉庫稱爲「
/src/git/test.git/
」,這將是當前工作目錄 - 如果這是一個非純倉庫和工作樹的頂層是「/home/mark/test/
」,那麼當前工作目錄將是「/home/mark/test/.git/
」Chris Johnsen細節在他SO answer:「如果
–-git-dir
或GIT_DIR
指定,但沒有指定的-–work-tree
,GIT_WORK_TREE
和core.worktree
,目前WOR king目錄被認爲是你工作樹的頂層目錄。「換句話說,你的工作樹也將是當前目錄(「
.git
」目錄),這幾乎可以肯定是不是你想要什麼。
確保您hook/post-receive
腳本,一旦創建和爲可執行,設置GIT_WORK_TREE
在正確的道路,爲了讓您的到合適的目錄執行(即不「xxx.git
」一節)。
當您運行git pull
時,git實際上會執行一次提取操作,然後進行合併。這意味着您可以使用post-merge
鉤子在拉取完成時執行腳本。
要設置此項,只需在存儲庫的.git/hooks/
目錄中創建一個可執行腳本,該目錄名爲post-merge
。
請注意,如果合併由於衝突而失敗,則不會運行此腳本。
然而,這對'git fetch'不起作用。此外,你可以做'git pull --rebase',所以你必須爲'post-rewrite'添加一個鉤子。但即使如此,你將無法區分獨立的合併/重新綁定和後來的一個... – 2016-02-14 15:42:42
根據分支配置,即如果它被配置爲重新綁定或合併,分別進行重新綁定或合併後。 – solstice333 2016-03-14 11:42:58
檢查文檔的Git鉤子:http://www.kernel.org/pub/software/scm/git/docs/githooks.html – 2011-04-11 15:00:43
http://stackoverflow.com/questions/4185400/is-there- any-git-hook-for-pull – 2016-02-14 15:43:58