格里特改变合并的胡克

时间:2012-02-17 23:17:45

标签: git githooks gerrit

我使用git作为我的版本控制系统,并设置了一个Gerrit站点来进行代码审查。我想创建一个钩子来执行以下操作:

  • 当管理员点击提交按钮时,文件(称为 version.txt ) 应该修改。
  • 脚本应该打开文件。
  • 找到以下文本(ID可能会更改的位置)

    #version Change-Id: Ie1411d50f6beb885bc3d3b7d8c587635e1446c18

  • 将Change-Id替换为新补丁的Change-Id。

  • 因此,如果要合并的补丁包含Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82,那么 version.txt 文件 运行脚本后应包含以下字符串:

    #version Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82

  • 然后钩子应该创建一个新的提交(因为现在其中一个文件发生了变化)并将最后一次提交推送到master。

我觉得使用更改合并挂钩可以实现这一点。我是对的吗?

提前致谢。

2 个答案:

答案 0 :(得分: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文件。但是这样的事情会让你朝着正确的方向前进。这是未经测试的,但它应该有效。

答案 1 :(得分:0)

最好以相反的方式做到 -

而不是对提交进行“未经验证”的更改,而不是Gerrit的背后, 在该提交上加上 git-tag

有关详细信息,请参阅 Git - Tagging