Git 格瑞特换钩

Git 格瑞特换钩,git,githooks,gerrit,Git,Githooks,Gerrit,我使用git作为我的版本控制系统,并建立了Gerrit站点来进行代码审查。我想创建一个钩子来执行以下操作: 当管理员单击提交按钮时,会显示一个文件(名为version.txt) 应该修改 脚本应该打开该文件 查找以下文本(ID可能更改的位置) #版本更改Id:Ie1411d50f6beb885bc3d3b7d8c587635e1446c18 将更改Id替换为新修补程序的更改Id 因此,如果正在合并的修补程序具有更改Id:I1c25f7b967084008b69a6a8aefa6e3bb3296

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

  • 当管理员单击提交按钮时,会显示一个文件(名为version.txt) 应该修改
  • 脚本应该打开该文件
  • 查找以下文本(ID可能更改的位置)

    #版本更改Id:Ie1411d50f6beb885bc3d3b7d8c587635e1446c18

  • 将更改Id替换为新修补程序的更改Id

  • 因此,如果正在合并的修补程序具有
    更改Id:I1c25f7b967084008b69a6a8aefa6e3bb32967b82
    ,则版本.txt文件 脚本运行后应包含以下字符串:

    #版本更改Id:I1c25f7b967084008b69a6a8aefa6e3bb32967b82

  • 然后钩子应该创建一个新的提交(因为现在其中一个文件发生了更改),并将最后一次提交推送到master
我觉得这将是可能的使用改变合并钩。我说得对吗

提前谢谢。

类似这样的内容:

#!/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}/


原则上,我不喜欢这种方法,我认为最好在退出时完成(例如,“install.sh”脚本,它可以使用git命令提取修订哈希,并从中生成version.txt文件)。但是像这样的事情应该会让你走上正确的方向。这是未经测试的,但应该有效。

最好用另一种方法-

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


有关更多详细信息,请参见

谢谢您的回复。我试试看,然后再报告。您能详细介绍一下“install.sh”脚本吗?现在我看到了问题:ChangeMerged钩子没有将提交消息作为参数。因此,当补丁最终推送到分支时,不可能保留提交消息。嗯…哦,你想修改原始提交吗?如果您只想修改提交,那么可以使用(
git commit--amend-C HEAD
)来代替上面的
git commit-m..
行。
-C HEAD
表示“使用HEAD修订版中的提交消息和作者,不要打开编辑器提示输入消息。”更新链接: