从svn迁移时,我应该如何组织mercurial存储库

gru*_*czy 2 svn migration mercurial

我们subversion以下列方式存储我们的项目:

  • 主干(主要发展在这里)
  • 分支机构
    • 稳定(软件的生产版本)
    • 内部(旧的,内部版本的软件保留在这里,很少提交新的代码)

我该如何组织我的mercurial寄存器来托管它?我创建了三个存储库,一个用于主干,一个用于每个分支作为中央服务器,但是因为mercurial有分支,所以我可能做错了.至少它感觉不对,但当我试图将单个变更集从开发本地仓库推送到稳定的本地仓库时,它推动了我所有的新变更集.那不是我想要的.

EDIT1

我在后备箱中修改了623,在稳定中修改了620.我想只将变更集623推送到稳定状态.我试过hg push -r623 ../stable,但hg通知我,推动了4个变更集.

ang*_*son 6

好的,让我们一次解决这个问题.

请注意,对于布局和组织,有很多方法可以做到这一点,唯一真正决定的人就是你.

但是,我对您在评论中概述的工作流程的建议是使用一个存储库作为默认和稳定,使用两个命名分支.

至于旧代码,我会将它保存在一个单独的存储库中,如果你需要这样做,只需从主要代码中合并你需要的东西.

因此,这是我如何组织它:

  • 主存储库
    • 默认分支(你总是在Mercurial中有这个),这就是你之前称为trunk的东西
    • 稳定分支(这与之前的稳定分支类似)
  • 旧代码存储库
    • 默认分支,从主存储库中提取
    • "旧"分支,旧代码,您可以在需要时轻松地从默认合并到旧分区
      • 如果您不需要从默认值合并到old,请将所有旧代码放在默认分支中,不要为旧代码创建命名分支

专注于主存储库,这为您提供以下能力:

  • 您可以在默认和稳定之间的单个工作文件夹中来回更新
  • 您可以轻松地跨越分支
  • 您可以通过两种方式轻松地从一个分支合并到另一个分支
  • 标签是全局的,始终可见

最后一个问题是,如何在合并时挑选变更集.

好吧,你做不到.合并合并您选择的变更集+其所有祖先.这就是Mercurial合并的方式.

有两种方法可以缓解这种情况:

  • 移植延期
  • 将变更集提交到其他地方开始

移植扩展允许您从一个分支中取出一个或多个变更集,并将它们(移植它们)复制到另一个分支上.变更集将被标记为移植,因此未来的合并不会超过此.但问题是,除了您添加到提交消息的任何内容之外,图形日志中没有可见的行来表明这就是您所做的.

在其他地方提交变更集的另一种方法可能最好用一个例子来描述.

我们假设你有以下两个分支:

default:  1--2--3--4--5--6
           \
stable:     x--y--z
Run Code Online (Sandbox Code Playgroud)

现在,您希望在默认情况下在变更集6之上提交变更集7,然后仅将变更集"而不是2-5""合并"到稳定分支上,正如我所说,合并将不会这样做.

您可以做的是找到以前的共同祖先,1在这种情况下,在该变更集之上提交新的变更集,实际上获取此存储库日志:

default:  1--2--3--4--5--6
  |       |\
  +---    | 7
           \
stable:     x--y--z
Run Code Online (Sandbox Code Playgroud)

然后,您可以将第7个变更集合并到stable和default:

default:  1--2--3--4--5--6--7
  |       |\               /
  +---    | 7------+------+
           \        \
stable:     x--y--z--7
Run Code Online (Sandbox Code Playgroud)

以下是TortoiseHg如何显示最后一个存储库,我只是移动了标签:

TortoiseHg显示