2014-01-24 67 views
8

我已經添加了這樣的事情:git的預推犯<code>pre-push</code>鉤子鉤

gs0=$(git status) 
pip-dump 
gs1=$(git status) 
if [ "gs0" != "gs1" ] 
then 
    git commit -m "pip-dump" 
fi 

(這是更新我的點子需求文件)

看來,推不推新承諾,但是HEAD在劇本開頭的那個。

如何解決這個問題?

+0

爲了完成這兩個步驟,您可能會更好地封裝或別名'git-push'。 – AD7six

回答

12

您不能:在push命令指出哪個提交調用前的勾,推動和推動,如果掛鉤退出0

我看到三個選項:

  1. 退出非零,告訴用戶「推送被拒絕,因爲我添加了提交」
  2. 退出零,告訴用戶「推送已經通過,但您需要再次推送,因爲我添加了提交」
  3. 另一個(不同的)掛鉤後,添加新公司mmit,注意你的鉤子不會無休止地遞歸,因爲「內部」push會運行鉤子,它會決定做另一次「再次內部」推動等等。然後,在宣佈你之後退出非零,中止「outer」push必須做一個「內部」推動才能獲得額外的提交。

我個人的偏好是第一個。預推鉤是,意思是作爲「驗證這個推動是好的」操作,而不是「改變這個推動意味着一些其他不同的推動」操作。這意味着你不會違背軟件的「意圖」。使用預推鉤作爲驗證者;如果需要在自動添加pip-dump提交(如果需要)後調用git push的腳本,請使用不同的名稱(如dump-and-push)將其作爲腳本編寫。

+0

我確定選項1是最好的。但是'dump-and-push'解決方案對我來說並不好,因爲我對自己或者團隊沒有信心,不要忘記'git push'不會被使用。 – lajarre

+1

那麼,因爲需要轉儲而拒絕推送,你可以發出一句「順便說一句,如果你使用這個其他腳本,它會正常工作,這不會更容易嗎?提示提示!:-)」 – torek

+0

@lajarre你如何確信你的團隊已經安裝了鉤子?長期隱藏在git push中可能會成爲某種問題。 – AD7six