克隆分支 - 我必须在默认情况下进行修改才能看到分支吗?

时间:2010-12-13 17:29:34

标签: mercurial

我来自CVS背景。

我尝试通过克隆来执行分支。

当前默认树在hello项目中看起来像这样。 alt text


  1. 我尝试将项目从'hello'克隆到'hello-branch-by-clone'。
  2. 我对'hello-branch-by-clone'进行了修改并提交。
  3. 我没有对'你好'进行任何修改。
  4. 我从'hello-branch-by-clone'执行推送到'hello'。
  5. alt text

    我希望看到分支,但我没有。


    这一次,我尝试了另一种方式。

    1. 我对'hello-branch-by-clone'进行了修改并提交。
    2. 我对'hello'进行了修改并提交。
    3. 我需要从'hello'拉到'hello-branch-by-clone',然后合并。
    4. 我从'hello-branch-by-clone'执行推送到'hello'。
    5. 这一次,只有我能看到分支 alt text


      通过应用克隆技术,我是否可以拥有分支视图,而无需显式修改默认存储库(hello

1 个答案:

答案 0 :(得分:1)

没有分叉,因为没有两个变更集共享父级。

克隆的存储库在任何方面都不是特殊的。它与原版相同。提交它与原始回购中的提交相同。它们在概念上没有被标记为在分支上。克隆只是一个很好的方式,有另一个工作区,你可以做一些工作(包括提交),而不会影响原始。

当两个或多个提交具有相同的父级时,会发生分叉。通常在使用克隆时会发生这种情况,但事实并非如此。如果同一个父级只有一个变更集,则没有分叉。

在你的第一个序列之后,你只引入了一个变换集(4),它有旧的尖端(3)作为它的父级,所以它仍然是一条直线。只有当您引入第(3)个父级的第二个变更集时,才会看到一个分叉。

现在请记住,即使您'推送变更集,并且原始的“Hello”仓库包含所有4个变更集,它的工作目录仍然指向变更集(3)。它将保持这种状态,直到你在其中运行'hg update'。这意味着如果你要在“Hello”中进行提交,它将基于(3),然后会出现一个fork。提交此提交无关紧要。

这就是你在第二个序列中所做的。

希望有所帮助。


我试图在这里使用术语'fork',因为'branch'有很多含义,包括'hg branch'命令,它会做一些稍微不同的事情。