在我正在进行的项目中(比如名字是“rinjani”),我们有多个mercurial回购(几乎10个单独的回购!),最近我们想将它转换为单个回购。
实际值:
- rinjani-a
- rinjani-b
- ...
- rinjani-g
预期:
rinjani
├── rinjani-a
├── rinjani-b
├── ...
└── rinjani-g
最好(最安全)的方法是什么?我已经在blogpost之后阅读了这个内容,但仍然不确定这是否可行,因为这个例子仅展示了两个单独的回购。当然,我们希望保持每个回购的历史/变更集完整无缺。
答案 0 :(得分:2)
博客文章是执行此操作的基本方法,尽管可以使用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>
然后&#34; hg merge&#34;每个人都在一起。
当然这是完全安全的,因为所有修改操作都只对新存储库进行。如果你犯了错误,你可以随时重新开始!
在使用上述方案准备合并三个存储库之后,这是一个非常简单的图形:
@ 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
然后合并头部(在这种情况下为rev 1,3和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