Version control Mercurial(hg):将多个回购转换为单个回购

Version control Mercurial(hg):将多个回购转换为单个回购,version-control,mercurial,Version Control,Mercurial,在我目前正在进行的项目中(比如,名字叫“rinjani”),我们有多个mercurial回购协议(几乎10个独立的回购协议!),最近我们想将其转换为一个单一的回购协议 实际: - rinjani-a - rinjani-b - ... - rinjani-g 预期: rinjani ├── rinjani-a ├── rinjani-b ├── ... └── rinjani-g 最好(最安全)的方法是什么?我已经阅读了以下内容,但仍然不确定这是否是一条可行之路,因为这里展示的示例仅针对两个

在我目前正在进行的项目中(比如,名字叫“rinjani”),我们有多个mercurial回购协议(几乎10个独立的回购协议!),最近我们想将其转换为一个单一的回购协议

实际:

- rinjani-a
- rinjani-b
- ...
- rinjani-g
预期:

rinjani
├── rinjani-a
├── rinjani-b
├── ...
└── rinjani-g

最好(最安全)的方法是什么?我已经阅读了以下内容,但仍然不确定这是否是一条可行之路,因为这里展示的示例仅针对两个单独的回购。当然,我们希望保持每次回购的历史记录/变更集完好无损。

博客帖子是实现这一点的基本方法,尽管
mv
hg addremove--similarity 100
步骤可以使用
hg rename
简化

基本步骤:

  • 创建新的存储库
  • 强制拖动其中一个旧存储库
  • 更新到提示并将旧存储库文件重命名为新位置
  • 承诺
  • 对其他存储库重复2-4
  • 将所有内容合并在一起
  • 例如:

    hg init rinjani
    cd rinjani
    hg pull -f <path_to>\rinjani-a
    hg update tip
    md rinjani-a
    hg rename * rinjani-a
    hg ci -m "renamed rinjani-a"
    <repeat for other projects>
    
    然后合并头部(本例中为rev 1、rev 3和rev 5)。关键点是在合并独立历史记录之前修改其头部:

    @    7:Merge
    |\
    | o    6:Merge
    | |\
    | | o  5:renamed rinjani-c files
    | | |
    | | o  4:rinjani-c file
    | |
    | o  3:renamed rinjani-b files
    | |
    | o  2:rinjani-b file
    |
    o  1:renamed rinjani-a files
    |
    o  0:rinjani-a file
    

    blogpost是实现这一点的基本方法,尽管使用
    hg rename
    可以简化
    mv
    hg addremove--similarity 100
    步骤

    基本步骤:

  • 创建新的存储库
  • 强制拖动其中一个旧存储库
  • 更新到提示并将旧存储库文件重命名为新位置
  • 承诺
  • 对其他存储库重复2-4
  • 将所有内容合并在一起
  • 例如:

    hg init rinjani
    cd rinjani
    hg pull -f <path_to>\rinjani-a
    hg update tip
    md rinjani-a
    hg rename * rinjani-a
    hg ci -m "renamed rinjani-a"
    <repeat for other projects>
    
    然后合并头部(本例中为rev 1、rev 3和rev 5)。关键点是在合并独立历史记录之前修改其头部:

    @    7:Merge
    |\
    | o    6:Merge
    | |\
    | | o  5:renamed rinjani-c files
    | | |
    | | o  4:rinjani-c file
    | |
    | o  3:renamed rinjani-b files
    | |
    | o  2:rinjani-b file
    |
    o  1:renamed rinjani-a files
    |
    o  0:rinjani-a file
    

    好的,
    md
    mkdir
    的别名,我想是吧?我在为其他回购重复步骤2-4时遇到了一个问题,例如,
    hg rename*rinjani-b
    ,将
    rinjani-a
    移动到
    rinjani-b
    内部。此外,如果我最终有多个回购头,我应该合并哪一个?提示?@GlennMohammad当你对每次回购进行
    hg pull-f
    时,它们将显示为独立的历史记录,没有合并。直到最后才合并头部。因此,
    hg rename*rinjani-b
    不会看到
    rinjani-a
    文件。一旦所有历史被重命名为其最终位置,将每个历史的头部合并在一起,例如,将rinjani-b历史合并到rinjani-a,然后将rinjani-c合并到该结果中,等等。
    md
    mkdir
    是等效的……至少在我使用的Windows上是这样。我现在知道了。我的错误是为
    rinjani-b
    repo:D做这件事时忘了做
    hg-up-tip
    。谢谢你简单而广泛的回答!我会给它一个绿色的印章。好吧,
    md
    mkdir
    的别名,我想是吧?我在为其他回购重复步骤2-4时遇到了一个问题,例如,
    hg rename*rinjani-b
    ,将
    rinjani-a
    移动到
    rinjani-b
    内部。此外,如果我最终有多个回购头,我应该合并哪一个?提示?@GlennMohammad当你对每次回购进行
    hg pull-f
    时,它们将显示为独立的历史记录,没有合并。直到最后才合并头部。因此,
    hg rename*rinjani-b
    不会看到
    rinjani-a
    文件。一旦所有历史被重命名为其最终位置,将每个历史的头部合并在一起,例如,将rinjani-b历史合并到rinjani-a,然后将rinjani-c合并到该结果中,等等。
    md
    mkdir
    是等效的……至少在我使用的Windows上是这样。我现在知道了。我的错误是为
    rinjani-b
    repo:D做这件事时忘了做
    hg-up-tip
    。谢谢你简单而广泛的回答!我会给它一张绿色的邮票。