2014-01-07 63 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