2

我是 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 插件,那就太好了。

4

1 回答 1

1

拥有更清晰的主线历史记录的一种方法是在单独的功能分支中完成工作,同时维护主线分支的镜像。我假设这里有工作树的分支,但您可以使用无树分支和结帐来节省磁盘空间。

// setup the mirror branch
cd <mirror directory>
bzr pull <mainline>

// setup a feature branch
cd <feature directory>
bzr branch <mirror directory> .

// work on your feature branch
bzr commit -m "Did some work"
...
bzr commit -m "Did some more work"

// ready to commit your feature
cd <mirror directory>
bzr pull
bzr merge <feature directory>

// your integration testing is done
bzr commit -m "My shiny feature"
bzr push
于 2011-12-05T21:24:41.290 回答