当两个或更多人将补丁集推向Gerrit中的相同更改集时,我很难找到一个好的工作流程。
我正在尝试使用命令行Git命令(没有git-review,IDE等)来完成此任务。
从Gerrit服务器下拉最新的补丁集以进行特定更改很容易,但从那里我不确定。
我认为这个过程将是:
但是在rebase期间,它将所有传入的变化标记为冲突,即使它们没有在本地更改。
也许这与HEAD本地无法访问的最新补丁集有关。
有人可以建议多个开发人员如何处理相同的更改?
修改 这个问题的答案与以下所述的技术一起展示:How to change a patchset and push it as a new one?
答案 0 :(得分:2)
您的问题本身就是gerrit
。 gerrit
中的变更集是单个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开发人员更好。