我想更改默认的Gerrit commit-msg挂钩以自动添加Signed-off-by . 但是,我在Gerrit服务器中找不到文件commit-msg,似乎在gerrit.war文件中包含了commit-msg .
有什么办法可以更改默认的Gerrit commit-msg钩子吗?
你可以在这个位置找到 commit-msg :
commit-msg
gerrit.war WEB-INF/lib/gerrit-server-server.jar com/google/gerrit/server/tools/root/hooks/commit-msg
gerrit.war 和 WEB-INF/lib/gerrit-server-server.jar 是存档的,因此您必须解压缩它并在更改后重新打包
gerrit.war
WEB-INF/lib/gerrit-server-server.jar
不,没有 . 您需要开发自己的补丁集创建和草稿发布的挂钩,以便在$ GERRIT_SITE / hooks中使用 . 重要的是要记住,这些钩子需要创建一个新的补丁集(提交)来添加签名关闭信息 .
还有另一种方法可以帮助获取自己的commit-msg钩子而不是Gerrit的默认钩子 . 这个想法是提供另一个版本的钩子,然后让Gerrit提示Shel命令为你获取该版本 .
以下是如何制作它 .
使用Nginx或Apache设置文件服务器,并将自己的 commit-msg 挂钩放入该服务器 . 执行此操作后,您将获得该 commit-msg 挂钩的URL
使用shell命令在Gerrit的配置文件 gerrit.config 中配置名为 gerrit.installCommitMsgHookCommand 的项目,该命令可以下载 commit-msg 钩子
gerrit.config
gerrit.installCommitMsgHookCommand
重启Gerrit服务器
例如,我的Gerrit服务器中 gerrit.installCommitMsgHookCommand 的值为:gitdir=$(git rev-parse --git-dir); wget -qO ${gitdir}/hooks/commit-msg http://myservername/hooks/commit-msg; chmod a+x ${gitdir}/hooks/commit-msg
gitdir=$(git rev-parse --git-dir); wget -qO ${gitdir}/hooks/commit-msg http://myservername/hooks/commit-msg; chmod a+x ${gitdir}/hooks/commit-msg
当我在提交消息中将提交提交到我的Gerrit服务器而没有Change-Id行时,我将得到以下提示:
remote:处理更改:refs:1,doneremote:错误:提交消息页脚中缺少Change-Id远程:remote:提示:要自动插入Change-Id,请安装钩子:remote:gitdir = $(git rev-parse --git-dir); wget -qO $ / hooks / commit-msg http://myservername/hooks/commit-msg; chmod a x $ / hooks / commit-msg远程:然后修改提交:remote:git commit --amend
通过阅读Gerrit文档中的项目gerrit.installCommitMsgHookCommand的描述,您可以清楚地看到它的工作原理 .
在服务器端立即更改提交消息,这是一个非常糟糕的主意 . 考虑到SHA-1也来自提交消息,因此,假设您只想在将更改提交给树时添加Signed-off-by . 你将得到一个不同的SHA-1,用户在提交中仍然会有之前的SHA-1 ...你知道我要去哪里吗?
4 回答
你可以在这个位置找到
commit-msg
:gerrit.war
和WEB-INF/lib/gerrit-server-server.jar
是存档的,因此您必须解压缩它并在更改后重新打包不,没有 . 您需要开发自己的补丁集创建和草稿发布的挂钩,以便在$ GERRIT_SITE / hooks中使用 . 重要的是要记住,这些钩子需要创建一个新的补丁集(提交)来添加签名关闭信息 .
还有另一种方法可以帮助获取自己的commit-msg钩子而不是Gerrit的默认钩子 . 这个想法是提供另一个版本的钩子,然后让Gerrit提示Shel命令为你获取该版本 .
以下是如何制作它 .
使用Nginx或Apache设置文件服务器,并将自己的
commit-msg
挂钩放入该服务器 . 执行此操作后,您将获得该commit-msg
挂钩的URL使用shell命令在Gerrit的配置文件
gerrit.config
中配置名为gerrit.installCommitMsgHookCommand
的项目,该命令可以下载commit-msg
钩子重启Gerrit服务器
例如,我的Gerrit服务器中
gerrit.installCommitMsgHookCommand
的值为:gitdir=$(git rev-parse --git-dir); wget -qO ${gitdir}/hooks/commit-msg http://myservername/hooks/commit-msg; chmod a+x ${gitdir}/hooks/commit-msg
当我在提交消息中将提交提交到我的Gerrit服务器而没有Change-Id行时,我将得到以下提示:
remote:处理更改:refs:1,done
remote:错误:提交消息页脚中缺少Change-Id
远程:
remote:提示:要自动插入Change-Id,请安装钩子:
remote:gitdir = $(git rev-parse --git-dir); wget -qO $ / hooks / commit-msg http://myservername/hooks/commit-msg; chmod a x $ / hooks / commit-msg
远程:然后修改提交:
remote:git commit --amend
通过阅读Gerrit文档中的项目gerrit.installCommitMsgHookCommand的描述,您可以清楚地看到它的工作原理 .
在服务器端立即更改提交消息,这是一个非常糟糕的主意 . 考虑到SHA-1也来自提交消息,因此,假设您只想在将更改提交给树时添加Signed-off-by . 你将得到一个不同的SHA-1,用户在提交中仍然会有之前的SHA-1 ...你知道我要去哪里吗?