2013-02-13 86 views
3

有沒有什麼爲什麼強制用戶不要更改.gitignore文件。我的意思是讓我們說有人會改變或刪除這個文件並推送這個改變。防止用戶更改.gitignore文件?

+0

如果你在本地文件系統層面講,有可能是設置'chmod'到Git的工作目錄中的文件的方式,但在git倉庫的水平,可能沒有任何辦法做到那。 – ConcurrentHashMap 2013-02-13 14:11:32

+0

那麼我使用gitolite來管理對回購的訪問。 – 2013-02-13 14:16:40

+0

當您使用Gitolite管理回購站時,我不會推薦掛鉤。看到我的答案。 – VonC 2013-02-13 14:28:45

回答

2

您可以在服務器端設置預接收掛鉤,如果修改了.gitignore,則拒絕推送。

3

Git是分散的。一旦有人克隆了回購,它完全在他們的控制之下,包括.gitignore文件。

什麼你可以要做的就是防止用戶通過使用Git hook用於檢查指定的文件類型,並拒絕用戶推到某些文件推送到服務器。

請閱讀pre-receive hooks。並編寫一個腳本來搜索給定的文件類型。

檢查您的回購.git/hooks會有一個示例文件列表,告訴您如何處理它。還請閱讀this article以避免容易犯的錯誤。

編輯

我沒有任何好處的shell腳本,但這裏是不允許.php然後.css文件並告訴用戶中止前一個小腳本。它位於.git/hooks/pre-receive。請記住使其可執行(chmod +x),否則它將無法工作。

#!/bin/sh 
while read oldrev newrev refname 
do 
    if [[ `git diff-tree --no-commit-id --name-only -r $newrev | grep -e 'css\|php'` != "" ]] 
    do 
    echo "Cannot push this" 
    exit 1; 
    fi 
end 
4

隨着,預接收鉤被稱爲VREFSVirtual Refs,也listed here):不設置一個直接在由gitolite管理回購通過在VREF目錄添加VREF預接收鉤,做到這一點gitolite-admin回購,而Gitolite會將其推廣到回購。

restricting pushes by dir/file name」部分說明如何通過更改的目錄和文件的名稱限制推送。
這是你不需要添加到VREF目錄的一個VREF,實際上(它是由Gitolite管理的更新掛鉤的一部分,對於二級更新掛鉤,see here)。

因此,修改gitolite-admin回購中的gitolite.conf,並將該管理回購推回到gitolite服務器就足夠了。

repo foo 
     RW+        = @senior_devs 
     RW        = @junior_devs 

     - VREF/NAME/Makefile   = @junior_devs 
+0

這很酷,它的作用就像一個魅力:P Thx非常。我還有一個問題有點偏離主題,您能否建議我使用GIT與QA團隊和代碼審查人員在開發,測試,分期和生產服務器環境中進行良好的工作流程? – 2013-02-15 10:55:50

+0

@MarceliPo git-flow是當前的標準,並且是一個很好的起點(http://stackoverflow.com/a/12927985/6309) – VonC 2013-02-15 14:20:13

+0

@MarceliPo,如果這回答了你的問題,你可以把它標記爲正確的回答,以便其他訪問者知道,並且VonC會得到適當的歸屬? :) – Swivel 2013-10-10 16:34:22