如何将未更改的补丁集推送到gerrit并避免创建新版本?

时间:2012-10-22 16:49:48

标签: git push gerrit

我在一个小团队中工作,使用Git / Gerrit作为源代码控制/代码审查 当团队中的开发人员想要提交他们的工作时,他们会提交/推动gerrit并开始研究新功能 此外,鼓励开发人员尽可能地推动他们的工作,他们通常在已提交的更改(通过挑选相关更改)之上工作,这些更改目前正在审核中。

问题是,当开发人员试图推动变革时,他们也会推动变革的历史。作为副作用,这些更改获得的新版本与同一更改的先前版本没有区别。此外,开发人员现在必须获得'伪造'许可(假设一些樱桃选择的变化不是他的)

实施例: 假设Adam的一个分支的历史看起来像这样(更高的变化是最新的):

改变3(作者:亚当,目前正在工作)
改变2(Ahthor:Charlie)
改变1(作者:巴斯)

现在,改变1,2是从gerrit挑选出来的,并没有改变 当Adam推送他的补丁时,他必须能够在更改1,2上伪造提交者并且他们获得更新的版本(与之前的推送没有任何区别)

有人可以建议如何避免这种行为吗?我们做错了吗?

2 个答案:

答案 0 :(得分:1)

我们公司遇到了类似的问题。 Gerrit带有一个脚本,您应该将其添加到本地存储库(它可以在windows,mac和linux下运行)。它在向本地存储库提交时自动运行并生成提交ID(在提交消息的末尾添加它)。

如果稍后提交的SHA1发生更改(例如由于修改),Gerrit将看到它是相同的提交并且不会创建新的入口点,如果提交仍然存在,它将只更新文件正在审查中。

要复制脚本,请转到存储库并执行以下操作:

scp -p -P 29418 username@path.gerrit.server.com:hooks/commit-msg .git/hooks/

答案 1 :(得分:1)

Gerrit正在创建这些补丁集的新版本,因为更改 - 当开发人员挑选出需要审核的更改时,会修改git提交。提交现在具有不同的父级和不同的SHA1。

有两种方法可以避免这种情况:

  1. 在进行更多工作之前,花时间正确审核/验证/合并仍在审核中的更改
  2. 不要在本地挑选更改,而是使用结帐。这将使现有的补丁集保持原样,因此顶部的任何提交都可以正常上传,而无需修改现有的补丁集。但是,这会将您在存储库中的位置移动到创建补丁集的位置 - 自上载补丁集以来,您将不会有任何已合并的提交。
  3. 在dayjob,我们根据情况使用这两种方法的组合。祝你好运!