2012-01-17 105 views
2

我们正在实施,其中每个新功能都有自己的分公司,完成时,它被合并到默认的分支中的开发流程。问题是在第一个特性分支中发生了新回购的第一次提交。按下后,功能分支将成为默认值。没有分支称为“默认”,因为没有与该分支相关联的变更集。很显然,当需要将特征分支合并到(不存在的)默认分支时,这是一个问题。保持默认分支时,第一次提交是另一个分支

出现我唯一的解决办法是有一个第一承诺默认为每当一个新项目启动,使我们有一个名为“默认”的分支,是所有其他分支的父的约定。有没有一种更简洁的方式来做到这一点,不需要虚拟提交(例如说“在默认情况下提交一个空变更集”)?

回答

2

我可以看到两种可能性(考虑到马丁的回答,你建议保留default作为主要的开发分支)。

一个马丁已经覆盖,因此你在新的资料库做的第一件事就是“初始设置”。通常这可能包括您的标准模板.hgignore文件。顺便说一句,我觉得这是不是一个更好的选择......

另一种选择,如果你已经承诺另一个名为分支更新到null变更(清空你的工作目录),然后merge进去。这会创建一个名为“default”的分支。

首先,我们将做一个开发分支的一些工作:

C:\tmp\test>hg init . 
C:\tmp\test>hg branch devbranch 
marked working directory as branch devbranch 

C:\tmp\test>echo something > out.txt 
C:\tmp\test>hg add . 
adding out.txt 

C:\tmp\test>hg commit -m "some work" 
C:\tmp\test>hg log 
changeset: 0:4631a4a10552 
branch:  devbranch 
tag:   tip 
summary:  some work 

在这里,我们对我们的devbranch分支合并为单一提交。当工作完成(这偶然在这种情况下,它是),我们要工作合并到我们的(不存在)default分支。因此,我们要null执行合并之前更新:

C:\tmp\test>hg update null 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 

C:\tmp\test>hg merge devbranch 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 

C:\tmp\test>hg commit -m "merged" 
C:\tmp\test>hg log 
changeset: 1:55e879b67c69 
tag:   tip 
parent:  -1:000000000000 
parent:  0:4631a4a10552 
summary:  merged 

changeset: 0:4631a4a10552 
branch:  devbranch 
summary:  some work 

C:\tmp\test>hg branches 
default      1:55e879b67c69 
devbranch      0:4631a4a10552 (inactive) 

正如你所看到的,在分行default与该分支上有两个父母,-10第一变更创建。在此之后,当您想合并时,您只需更新到default分支的提示 - hg update null只能在第一次完成。

+0

我接受这个,因为它是对我的问题更实际的答案。我同意Martin的看法,实际上我们可能会在处理特性之前将一些样板文件,配置文件,README等提交到默认分支。但很高兴知道我们不必为了能够在稍后将其合并为默认值而执行操作。 – 2012-01-17 18:18:46

+0

我很高兴你能使用这个答案!当我写我的时候,我有点怀疑你真正想要什么。你也可以用'hg branch default'创建默认分支......就我所见,没有必要更新到'null'并做一个时髦的合并:-)正常的变更集有'null'作为他们的第二个家长。合并变更集有两个非'null'变更集作为父母。您已使用'null'作为第一个父级创建了一个正常的变更集。结果与'hg branch default'和'hg commit'并没有什么不同。 – 2012-01-17 22:05:35

+0

好的。我不喜欢在'hg branch default'之后默认分支以非空父结束的事实。但是,当然也是在与null合并后的情况。无论如何,我从这次讨论中了解了更多有关hg的信息,这非常棒。在实践中,我确信我们只会确保在分支之前将某些东西置于默认状态。 – 2012-01-18 08:55:38

3

虽然水银会让你没有default分公司工作,但不推荐。我们wiki page说:

不要为主要的开发分支

水银的主要分支称为“默认”,是类似于SVN“主干”,“HEAD使用非默认的其他名称“在CVS中,在Git中是”主人“。它是由新克隆检出的分支。如果您尝试为“主”分支使用其他名称,那么当用户克隆并在错误位置提交内容时,用户会得到或多或少的随机分支,这通常是不合需要的。

因此,您应该尝试使default分支成为您的主要开发分支。

如果您希望一直在功能分支中工作,那么我建议您在启动项目时仍在default分支上进行几次提交。大多数项目需要一些常见的设置,所以我不认为这会奇怪或怪异。

相关问题