3

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

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

    #version Change-Id: Ie1411d50f6beb885bc3d3b7d8c587635e1446c18

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

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

    #version Change-Id: I1c25f7b967084008b69a6a8aefa6e3bb32967b82

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

我觉得这可以使用更改合并的钩子来实现。我对吗?

提前致谢。

4

2 回答 2

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 文件)。但是这样的事情应该会让你朝着正确的方向前进。这是未经测试的,但它应该工作。

于 2012-03-16T21:37:28.643 回答
0

最好反过来做——

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

有关更多详细信息,请参阅Git - 标记

于 2017-06-15T06:48:05.247 回答