2012-02-17 50 views
3

我使用git作爲我的版本控制系統,並設置了一個Gerrit網站來執行代碼審查。我想創建一個鉤做到以下幾點:Gerrit變更合併Hook

  • 當管理員點擊提交按鈕,文件(稱爲version.txt) 應該被修改。
  • 腳本應該打開文件。
  • 找到以下文本(其中ID可能會改變)

    #version Change-Id: Ie1411d50f6beb885bc3d3b7d8c587635e1446c18

  • 更換變化-ID與新補丁的變化-ID。

  • 所以,如果要合併的補丁有Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82那麼version.txt文件 應該包含以下字符串腳本運行後:

    #version Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82

  • 然後勾應創建一個新的提交(因爲現在已經有一個文件發生了變化)並且推動最後一次提交來掌握。

我覺得這將有可能使用更改合併掛鉤。我對嗎?

在此先感謝。

回答

1

事情是這樣的:

#!/bin/sh 

# See link below for actual command line format 
# you may need to make the argument parsing more robust 
CHANGE_ID=$2 

git clone ${GIT_DIR} /tmp/repo-${CHANGE_ID} 
echo "#version Change-Id: ${CHANGE_ID}" > /tmp/repo-${CHANGE_ID}/version.txt 
GIT_DIR=/tmp/repo-${CHANGE_ID}/ 
cd /tmp/repo-${CHANGE_ID}/ 
git add /tmp/repo-${CHANGE_ID}/version.txt 
git commit -m'Auto-updated version' 
git push origin master 
rm -rf /tmp/repo-${CHANGE_ID}/ 

http://gerrit-documentation.googlecode.com/svn/Documentation/2.2.2/config-hooks.html#_change_merged

原則上,我不是這種方法的粉絲,我認爲它應該的方式可以更好地做出來的(例如「 install.sh「腳本,它可以使用git命令來提取修訂散列,並從那裏生成一個version.txt文件)。但像這樣的東西應該把你放在正確的方向。這是未經測試的,但它應該工作。

+0

感謝您的答覆。我會試一試並回報。你能詳細說一下'install.sh'腳本嗎? – 2012-03-17 23:12:24

+0

現在我看到了問題:change-merged鉤子不會將提交消息作爲參數。因此,當補丁最終被推送到分支時,不可能保留提交消息。嗯... – 2012-03-17 23:35:57

+0

哦,你想*修改*原始提交?如果你想要做的只是修改提交,你可以這樣做('git commit --amend -C HEAD')來代替上面的'git commit -m..'行。 '-C HEAD'表示「使用HEAD修訂版中的提交消息和作者,並且不要打開編輯器來提示輸入消息。」 – Joe 2012-04-10 18:47:41

0

更好地做到它周圍的其他方法 -

而不是做一個承諾,格里特背後的背上,
git的標籤上提交的「未驗證」的變化。

有關詳細信息,請參閱Git - Tagging