【发布时间】:2011-12-05 19:55:19
【问题描述】:
我是 Bazaar 的新手,来自 Subversion 和 git 的背景。我以为我已经掌握了一些基本概念,但在我的第一次重大提交中已经遇到了绊脚石。
该项目托管在 Launchpad 上。我用bzr branch 创建了一个本地分支(“工作”)。我进行了更改,添加了新文件,重命名了其他文件。在此期间,团队中的另一个人提交并推动了他们的更改。此时提交历史看起来像这样:
3. Team Member A
2. Me (trivial commit of .bzrignore)
1. Original commit
今天早上我bzr commit我在本地更改。提交号报告为 3,我假设(错误地)在我与服务器同步时会进行协调。当我执行bzr pull 时,我收到了这条消息:
Using saved parent location: bzr+ssh://bazaar.launchpad.net/... bzr: ERROR: These branches have diverged. Use the missing command to see how. Use the merge command to reconcile them.
我做了bzr merge。没有发现冲突,但在我的本地分支中留下了三个文件作为修改。我检查并提交了带有评论的那些,报告给我作为提交 4。然后我做了一个bzr push,它没有报告任何错误。
现在提交历史记录 (bzr log --include-merges) 如下所示:
4. My merge commit
2.1.1 Team Member A
3. My commit this morning
2. My .bzrignore commit
1. Original commit
这里非常希望保持主干线序列化并避免这些合并气泡。 (令人讨厌的是,Launchpad 没有显示 2.1.1 提交,看起来像是我重写了它。)在这种情况下,避免这些气泡的最佳工作流程是什么?我应该先拉吗?我担心必须将其他人的代码合并到我本地未提交的更改中。
此外,虽然 rebase 在 git 中很常用,但它似乎在 Bazaar 世界中并未得到普遍认可。如果我们可以避免使用 bzr-rebase 插件,那就太好了。
【问题讨论】:
-
除了下面的答案之外,您还可以通过在您的分支的配置中设置 append_revisions_only 选项来防止将来出现此问题。使用该设置,当它像您的示例一样重新安排修订顺序时,它将不允许提交继续进行。
-
是的,我在发布我的帖子后看到了一个建议这个答案:stackoverflow.com/questions/5413602/… 但是,我们对 Bazaar 最佳实践更感兴趣,而不是调整以适应我们自己对“正确”的想法。
-
对于是否应该默认打开 append_revisions_only 实际上存在一些争论,因为关闭行为几乎总是让用户感到惊讶。因此,不要将其视为黑客或非标准行为。这更像是一种安全性,您以后不会再对此感到惊讶。