2011-12-05 81 views
2

我是Bazaar的新手,從Subversion和git的背景來看它。我認爲我已經掌握了一些基本概念,但在我的第一個重大承諾中已經成爲絆腳石。Bazaar:合併之後在主線合併泡沫 - 提交

該項目託管在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

除了下面的答案,您還可以通過在您的分支的config中設置append_revisions_only選項來避免此問題。使用該集合時,它將不允許提交在重新排列修訂順序時繼續進行,例如您的示例。 – dOxxx

+0

是的,我看到一個答案後,張貼我的建議:http://stackoverflow.com/questions/5413602/monotonically-increasing-bazaar-trunk-revision-numbers但是,我們更感興趣的巴扎最佳實踐比調整符合我們自己對「正確」的看法。 –

+0

關於append_revisions_only是否應該默認打開,實際上存在一些爭議,因爲關閉行爲幾乎總是讓用戶感到驚訝。所以不要把它看作是黑客或非標準的行爲。更安全的是,您未來不會再爲此感到驚訝。 – dOxxx

回答

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 
+0

一個簡單的方法是使用bzr-colo插件,它可以在同一個工作樹中爲您提供「同位」分支。 – dOxxx

+0

感謝您的簡潔回答。你已經證實了我的懷疑,我們只需要接受Bazaar做事的方式。另外,我被指向這個網頁,其中提出了類似於你的答案的東西,並提供了一些這樣做的理由:http://doc.bazaar.canonical.com/bzr.2.4/en/user-guide/zen。 HTML#分層歷史是好的 –