Version control Mercurial(hg):将多个回购转换为单个回购
在我目前正在进行的项目中(比如,名字叫“rinjani”),我们有多个mercurial回购协议(几乎10个独立的回购协议!),最近我们想将其转换为一个单一的回购协议 实际: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-a
- rinjani-b
- ...
- rinjani-g
预期:
rinjani
├── rinjani-a
├── rinjani-b
├── ...
└── rinjani-g
最好(最安全)的方法是什么?我已经阅读了以下内容,但仍然不确定这是否是一条可行之路,因为这里展示的示例仅针对两个单独的回购。当然,我们希望保持每次回购的历史记录/变更集完好无损。博客帖子是实现这一点的基本方法,尽管
mv
和hg addremove--similarity 100
步骤可以使用hg rename
简化
基本步骤:
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
步骤
基本步骤:
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
。谢谢你简单而广泛的回答!我会给它一张绿色的邮票。