Gerrit-防止补丁集覆盖

时间:2018-10-22 11:56:41

标签: git gerrit

在我所在的公司中,一些用户通过Web UI功能(例如,编辑文件内容)更新了Gerrit更改,从而产生了新的补丁集。很简单,您无需进行编辑,git add,git commit和git push ...

但是,Git本地副本没有这些新的补丁集,并且从此处再次推送时,已经完成的编辑可能会丢失或覆盖。

默认情况下,Gerrit不会阻止此操作,这是正常现象,因为在同一Gerrit更改中补丁集之间没有依赖性(也可见here)。

有没有办法实现这样的目标,例如始终确保用户提交最新的补丁集? Gerrit自定义钩子,项目访问...

即具有以下行为:

  • 存在更改:最新补丁集为1/1
  • 从网络用户界面编辑文件:最新补丁集为2/2(Git本地副本未更新)
  • 从最新的Git本地副本中编辑文件,然后推送:已拒绝
  • 获取补丁集2/2,应用修改并再次推送:最新补丁集为3/3。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作来实现git钩子:

  1. 使用Gerrit命令工具查找最新的补丁集修订版。
    示例:ssh gerrit-server -p端口gerrit查询--format JSON --current-patch-set更改:Change-Id
    响应中包含最新的补丁集修订。
    可以从用户的补丁提交消息中提取Change-Id。
  2. 检查用户的提交是否是最新补丁集提交的后代。
  3. 如果步骤2中的条件不满足,则打印错误消息并从挂钩中返回非零状态。

适合任务的挂钩:

  • 客户端:预推
  • 服务器端:预先接收或更新

对于服务器端挂钩,也许有一种更好的方法来实现步骤1(因为它是在它所连接的服务器上执行的)