多个开发人员推动相同的变化

时间:2015-11-19 20:11:15

标签: git gerrit

当两个或更多人将补丁集推向Gerrit中的相同更改集时,我很难找到一个好的工作流程。

我正在尝试使用命令行Git命令(没有git-review,IDE等)来完成此任务。

从Gerrit服务器下拉最新的补丁集以进行特定更改很容易,但从那里我不确定。

我认为这个过程将是:

  • 从服务器
  • 获取最新的补丁集
  • 反对最新的补丁集

但是在rebase期间,它将所有传入的变化标记为冲突,即使它们没有在本地更改。

也许这与HEAD本地无法访问的最新补丁集有关。

有人可以建议多个开发人员如何处理相同的更改?

修改 这个问题的答案与以下所述的技术一起展示:How to change a patchset and push it as a new one?

1 个答案:

答案 0 :(得分:2)

您的问题本身就是gerritgerrit中的变更集是单个git提交,只要变更集作为审阅流程的一部分进行更改,就会重写该变更集。因此,您会得到这样的历史记录:

reviewed branch head --- changeset A, first revision
                     \-- changeset A, second revision
                      \- changeset A, third revision

现在,通过您在问题中勾画的工作流程,您将尝试创建此历史记录:

reviewed branch head --- changeset A, first revision --- changeset A, second revision

如果您执行此操作,中的任何更改都将与自身冲突

解决此问题的gerrit方法是获取变更集的最新版本,修改变更集,然后将其作为变更集的新版本推送,替换以前的变更集,希望不行其他开发人员同时也在使用相同的变更集。最后一部分是基于gerrit的工作流无法实现纯git的简单操作:开发人员无法在同一变更集上并行工作。这与纯git形成鲜明对比,纯git所有开发人员都可以随意创建新提交,分支和合并,但git能够将所有部分重新组合在一起。但为了实现这一点,提交必须在gerrit中保持不变,这是gerrit工作流违反的原则。

如果你问我,最好的办法是避免使用git。它的基本工作流程已被破坏,您在使用纯private class DownloadS3ImageTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { TransferUtility transferUtility = AmazonS3ClientHelper.getTransferUtility(imageView.getContext()); TransferObserver observer = transferUtility.download(BUCKET, fileName, file); observer.setTransferListener(new TransferListener() { @Override public void onStateChanged(int id, TransferState state) { if (TransferState.COMPLETED.equals(state)) { imageView.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath())); } Log.d("onStateChanged", state.toString() + " " + file.getAbsolutePath()); } @Override public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { int percentage = (int) (bytesCurrent / bytesTotal * 100); Log.d("percentage", String.valueOf(percentage)); } @Override public void onError(int id, Exception ex) { Log.d("onError", ex.getLocalizedMessage()); } }); return null; } 方面比Linux开发人员更好。