2010-09-13 164 views
58

使用一個官方存儲庫作爲遠程存儲庫,並從中克隆多個本地存儲庫,可以在該主存儲庫上編寫預提交鉤子並在其所有克隆上執行該預鉤子?Git遠程/共享預提交鉤子

+4

如果您想*執行*,請在中央倉庫中使用更新鉤子。如果掛鉤正在執行每次提交驗證,則仍然可以提供預提交掛鉤;開發人員可能會自願採用這種方法,以便在他們做錯事情時能夠立即找到答案,而不是等到他們試圖推動。 – Cascabel 2010-09-13 18:34:17

+1

可能的重複: (http://stackoverflow.com/questions/3462955/)和 (http://stackoverflow.com/questions/427207/) – blong 2012-12-10 04:18:10

回答

46

我不這麼認爲,因爲鉤子沒有被克隆。
可能是鉤子腳本本身是版本控制的,然後鏈接到克隆服務器(符號鏈接)(提供他們的操作系統支持鏈接功能)。

或者,如果掛鉤是用於創建克隆的git template directory的一部分(這隻會確保它們存在於克隆repo中,但不能保證它們實際被使用和執行)。

但我不認爲有任何「中心」的方式來執行提交。


由於Jefromi在評論(重點煤礦)解釋得更加清楚:

我認爲這真的違背了git倉庫的想法已經與回購分佈式執行掛鉤。
我的克隆是我的存儲庫。我應該可以使用git,不過我喜歡,包括選擇是否運行鉤子。
(而從安全角度來看,這會是真的有種可怕的 - 沒有人應該有逼我,每當我運行某些Git命令來執行某些腳本的能力)

我與評論表示贊同,並且只能在特定的專門回購協議中看到實施適用於當地規則的方法。
例如,您不會直接推送到中央倉庫,而是首先推送到QA倉庫,只有遵循特定規則才能接受您的提交。如果確實如此,那麼質量保證回購會將您的承諾推向中央回購。

另一個例證來自我剛纔提到的將是直接導出「Serverless Continuous Integration with Git」的方式來執行任意位置推動他們之前的作品本地私有構建。

+6

我認爲它真的違背了git倉庫的想法強制掛鉤與回購分銷。我的克隆是*我的*庫。我應該可以使用git,不過我喜歡,包括選擇是否運行鉤子。 (從安全角度來看,這真的有點嚇人 - 當我運行某些git命令時,沒有人能夠強制我執行某些腳本。) – Cascabel 2010-09-13 18:36:05

+1

@Jefromi:你知道什麼是scarry?當我輸入評論時,在提交我編輯的答案之前,我開始輸入'add ...',並且我的電腦上的FireFox確實提出了我:「添加Jefromi的評論」。這不是我第一次去那裏,顯然;) – VonC 2010-09-13 19:20:59

+0

注意自我:另見http://stackoverflow.com/questions/3209208/what-is-the-cleverest-use-of-source-repository-that-you -have-ever-seen/3209767#3209767 – VonC 2010-09-13 19:25:42

5

是否可以在該主存儲庫上編寫預提交鉤子並在其所有的克隆上執行?

githooks(5)

 
    pre-commit 
     This hook is invoked by git commit, and can be bypassed with 
     --no-verify option. 

由於鉤可以很容易地繞過,似乎回答你的問題是「不」。

此外,由於.git/hooks目錄未被克隆,因此似乎沒有將其推送到客戶端的機制。

8

你不能在人的本地倉庫上預先提交鉤子,但在你的中央倉庫中,你仍然可以運行預接收鉤子。

F. ex我需要確保提交消息遵守某些規則(對於trac集成等) 所以我使用了以下預接收鉤子,它檢查每個提交消息被推送到中央存儲庫,並將拒絕如果沒有受到歡迎,則推送。

 
#!/bin/sh 
while read rev_old rev_new ref 
do 
    MALFORMED="$(git rev-list --oneline $rev_old..$rev_new | egrep -v '#[0-9]+' | awk '{print $1}')" 
    if [ x"$MALFORMED" != x ] 
    then 
     echo Invallid commit message on $MALFORMED 
     exit 1 
    fi 
done 

更多信息請參見f.ex https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

2

假設你有源代碼中有一個與之相關的構建系統的混帳回購協議,則可以配置構建系統建立前提交掛鉤,即通過移動或鏈接〜版本化的預提交鉤子。

我還沒有嘗試過。當我用Google搜索一個更好的解決方案時,我來到了這裏。