2012-07-19 60 views
3

我想警告用戶,如果他們的代碼包含特定的字符串並通過電子郵件提醒人們。Git掛鉤來檢測包含特定字符串的文件更改

現在我正在使用post-receive hook,因爲檢測需要在服務器端完成。

我正在更新服務器端存儲庫,並運行諸如git diff-tree -r --name-only --no-commit-id $2 | xargs grep foo來檢測壞字符串「foo」。

問題這種方法:

  • 我不喜歡保持和存儲庫服務器端
  • 它會掃描整個文件的整個工作版本,而不僅僅是改變。 編輯我解決了這個問題,來替換上面:git show $2 | grep ^+ ...

有沒有更好的方式來做到這一點?

+0

的Git存儲文件,而不是差異。所以不可能只掃描更改。 – 2012-07-20 00:06:50

+0

當然,你可以得到一個差異。我簡單地通過使用git diff/git show來解決我的問題的這一部分。 – 2012-07-20 00:56:34

回答

1

如果您使用gitolite V3(或'g3'),請嘗試改爲將您的支票放入VREF

每refex開始VREF/FOO /在適用於該用戶的規則,一個叫FOO程序的調用被觸發(stored in $LOCAL_CODE/VREF)。
請注意,如果VREF規則不適用於該用戶,則甚至不會調用該程序。

您可以精確控制要應用此警告的哪個(一組)用戶。
如果您的條件(無錯誤字符串)不符合,您可以拒絕推送。

但是,仍然需要先更新工作目錄(因爲Gitolite只管理默認裸回購)