我是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插件,那就太好了。
答案 0 :(得分: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