2015-07-04 66 views
4

我需要驗證推送到遠程的提交消息,以防止開發人員不能在(字符串長度)中放置足夠的細節或僅放置一個票號。哪個git鉤子用於驗證推送提交消息?

我認爲更新掛鉤可以爲此工作,但它似乎沒有,但它只適用於以前推送的參考。當我試圖推新分支時,它被拒絕了,因爲它找不到參考。我懷疑它也可能只是針對最新推出的系列作品。

鉤子執行此任務的正確選擇是什麼?

段:

#!/usr/bin/env php 
<?php 

define('MINIMUM_MESSAGE_LENGTH', 10); 

$exit = 0; // default exit code -> success 

$ref = $argv[1]; 
$commitMessage = exec('git log -1 ' . $ref . ' --pretty=format:%s'); 
$commitMessage = trim($commitMessage); 

// validations & exit($exit) follow; 

是的,這是PHP,但問題是語言無關

+0

在這裏提到[這個答案](http://stackoverflow.com/a/3512275/149998)爲了將它鏈接到這個問題 - 這是我得到這個工作的下一步,所以我想鏈接它爲未來的搜索者找到這個問題。 – bcmcfc

回答

4

策略執行裝置服務器側鉤。

  • A client-side hookpre-commit可以繞過,並且不容易部署。
  • A server-side部署一次(在Git repo託管服務器上),然後就完成了。

該Git Pro書有一個例子(「Customizing Git - An Example Git-Enforced Policy」),它應該爲新的分支機構以及傳統的分支機構工作。

您可以在「How do we verify commit messages for a push?」找到其他示例。

+0

你知道哪個服務器端鉤子可以用於這個用例嗎?我同意客戶端鉤子 - 很難執行,並且不會爲新手首先/新鮮克隆開箱即用。 – bcmcfc

+0

@bcmcfc更新或預接收鉤子沒問題。 – VonC

0

你是對的,一個更新掛鉤是行不通的。如果您需要強制執行提交消息標準,則應使用預提交掛鉤。它將在提交之前運行,並確保提交是標準的,然後繼續並創建提交。 這裏是一個pre-commit鉤子樣品

https://github.com/git/git/blob/master/templates/hooks--pre-commit.sample

更多關於git的鉤檢查此

http://githooks.com/

+1

預提交鉤子是客戶端鉤子。爲了強制執行帶有這種鉤子的策略,您需要確保所有貢獻者都已經在本地克隆中啓動並運行,這可能會非常棘手。請參閱[VonC的答案](http://stackoverflow.com/a/31218445/2541573)。 – Jubobs