2014-01-07 95 views
3

好吧 - 當我使用Mercurial和版本控制系統時,我越來越多地學習了很多東西,但是我很困惑爲什麼我的一個存儲庫的本地副本(稱之爲項目-alpha)在我使用的三臺機器上(機器1,機器2和機器3)不同。值得注意的是,他們不分享同一個提示。Mercurial日誌圖併發症

我希望有人能夠向我解釋這一點,此外提供一些解釋,我可以避免必須「合併」分支(這是如何複雜化出現在第一位)。如果有人能夠提供一個例子,說明某些情況會迫使我在一臺機器上「合併」,而在另一臺機器上則完全沒有。

爲了澄清,我包括爲三個機器我使用

hg log --graph 

命令(但只能在那裏他們開始不同,因爲它是一個長期項目我工作)。

機1

@ changeset: 88:e8aafce5753a 
| tag:   tip 
| user:  Your Name <> 
| date:  Mon Jan 06 15:30:15 2014 -0500 
| summary:  
| 
o changeset: 87:5d76250aad71 
| user:  Your Name <> 
| date:  Mon Jan 06 11:32:53 2014 -0500 
| summary:  
| 
o changeset: 86:4788926f4dc9 
|\ parent:  84:caf2a2a127e0 
| | parent:  85:682beb5c2a22 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:52:17 2014 -0500 
| | summary:  
| | 
| o changeset: 85:682beb5c2a22 
| | parent:  83:bde4e46678d8 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:38:45 2014 -0500 
| | summary:  
| | 
o | changeset: 84:caf2a2a127e0 
| | parent:  82:729da698a926 
| | user:  Your Name <> 
| | date:  Tue Dec 17 15:44:17 2013 -0500 
| | summary:  
| | 
| o changeset: 83:bde4e46678d8 
|/ user:  Your Name <> 
| date:  Wed Jan 01 22:20:54 2014 -0500 
| summary:  
| 
o changeset: 82:729da698a926 
| user:  Your Name <> 
| date:  Mon Dec 16 12:41:54 2013 -0500 
| summary:  

機2

@ changeset: 88:e8aafce5753a 
| tag:   tip 
| user:  Your Name <> 
| date:  Mon Jan 06 15:30:15 2014 -0500 
| summary:  
| 
o changeset: 87:5d76250aad71 
| user:  Your Name <> 
| date:  Mon Jan 06 11:32:53 2014 -0500 
| summary:  
| 
o changeset: 86:4788926f4dc9 
|\ parent:  83:caf2a2a127e0 
| | parent:  85:682beb5c2a22 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:52:17 2014 -0500 
| | summary:  
| | 
| o changeset: 85:682beb5c2a22 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:38:45 2014 -0500 
| | summary:  
| | 
| o changeset: 84:bde4e46678d8 
| | parent:  82:729da698a926 
| | user:  Your Name <> 
| | date:  Wed Jan 01 22:20:54 2014 -0500 
| | summary:  
| | 
o | changeset: 83:caf2a2a127e0 
|/ user:  Your Name <> 
| date:  Tue Dec 17 15:44:17 2013 -0500 
| summary:  
| 
o changeset: 82:729da698a926 
| user:  Your Name <> 
| date:  Mon Dec 16 12:41:54 2013 -0500 
| summary:  

機3

o changeset: 89:e8aafce5753a 
| tag:   tip 
| user:  Your Name <> 
| date:  Mon Jan 06 15:30:15 2014 -0500 
| summary:  
| 
o changeset: 88:5d76250aad71 
| user:  Your Name <> 
| date:  Mon Jan 06 11:32:53 2014 -0500 
| summary:  
| 
o changeset: 87:4788926f4dc9 
|\ parent:  83:caf2a2a127e0 
| | parent:  85:682beb5c2a22 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:52:17 2014 -0500 
| | summary:  
| | 
[email protected] changeset: 86:eab05f7f7ab6 
| |/ parent:  83:caf2a2a127e0 
| | parent:  85:682beb5c2a22 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:52:31 2014 -0500 
| | summary:  
| | 
| o changeset: 85:682beb5c2a22 
| | user:  Your Name <> 
| | date:  Thu Jan 02 12:38:45 2014 -0500 
| | summary:  
| | 
| o changeset: 84:bde4e46678d8 
| | parent:  82:729da698a926 
| | user:  Your Name <> 
| | date:  Wed Jan 01 22:20:54 2014 -0500 
| | summary:  
| | 
o | changeset: 83:caf2a2a127e0 
|/ user:  Your Name <> 
| date:  Tue Dec 17 15:44:17 2013 -0500 
| summary:  
| 
o changeset: 82:729da698a926 
| user:  Your Name <> 
| date:  Mon Dec 16 12:41:54 2013 -0500 
| summary:  

讓我首先開始說我知道有一些差異,僅僅是因爲某些機器上的某些變化被推到了某些機器上,並拉扯了其他機器。機器1和2是我使用的主要機器,顯然沒有太大的差別。我關心的是Machine 3,它目前有3個頭,還有一個額外的變更集(89而不是88)。我對發生了什麼事情感到有點困惑,我該如何解決這個問題,我希望知道我做了什麼,以便我下次可以避免這種行爲。提前致謝!

回答

3

請勿將hg數字與更改的實際版本號相混淆。 (即一個回購變更88與另一個回購變更88不同,除非他們的 具有相同的簽名代碼。日誌編號是在單個回購中引用變更集的簡便捷徑,但不能在整個回購中轉換)。

如果您有3個不同的存儲庫,那麼要避免合併將是不可能的。一般來說,hg在自動合併方面做得很合理。如果你設置一個體面的hgmerge來使用你最喜歡的3路diff設置,即使偶爾的手動合併也不是那麼痛苦。

但是,如果您想避免儘可能多的合併,您需要選擇一個存儲庫作爲「主要」存儲庫,並讓其他存儲庫從主要存儲庫推入和拉出。

任何二次回購工作的第一步是同步到主回購。

hg pull -u 

您提交的任何變動,必須在主回購相對於尖端或您將創建一個需要合併已更改到主回購做出一個分支。

hg incoming 

對於監控遠程回購的狀態非常有用。

使用分佈式版本控制系統的一個主要原因是它使合併更不痛苦。合併只是「標準」工作流程的一部分,如果您提交和同步,經常合併應該不是什麼大問題。

+0

大 - 這是所有有用的信息。所以基本上,你的建議是隻使用輔助回購的命令「hg pull -u」?我很難選擇哪一個是主要的,因爲機器1就像我的工作臺式機,機器2是我的家用臺式機,而機器3是我的筆記本電腦(我只在旅途中使用)。 – astromax

+1

我有幾乎完全相同的設置,並將我的工作桌面視爲「主」回購。只要您在提交任何更改之前保持同步,您就可以在所有3個回購站之間進行推送和創建分支。即使你不合並真的不是問題。 –

3

我只在機器3上看到一個額外的頭,即變更集86:eab05f7f7ab6

這是多餘的變更集,您可以注意到它具有與普通變更集4788926f4dc9完全相同的父項。 所以我想它來自合併在機器3上顯式合併,然後拉動已經包含合併的回購(在幾秒前在另一臺機器上請求!)。

這就回答了你的一個問題:一旦你合併了一個回購,你就不需要(也不應該)在其他回購上重新做。任何重複的任務都是可疑的,並且破壞了VCS的目的。

您可以減少分支,因而需要合併之後,通過:

  • 獲取習慣更新到最新修訂(hg pull -u)開始工作之前。
  • 使用mq,我勸阻,直到你mercurial的標準使用confortable。

最後建議,您必須提供提交信息,並讀兩遍半this smooth tutotial

+0

感謝您的教程鏈接。 – astromax

+0

我應該在所有機器上使用'hg pull -u'命令嗎? – astromax

+1

@astromax:正如fred所說,一個方便的解決方案是專門用一臺機器來維持主回購(這只是一個組織選擇)。在這一個,不需要同步。在其他人身上,總是'hg pull -u'。它不會傷害:如果沒有新的東西,什麼都不會發生。在離開一臺機器之前,'hg push'。 – YvesgereY