虽然可以使用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>
然后 “汞合并” 每个磁头在一起。
当然,这是完全安全的,因为所有的修改操作都只对新的存储库进行。如果你犯了一个错误,你总是可以重新开始!
这里是一个非常简单的图形可能是什么样子准备三个不同版本库后,使用上述方案进行合并:
@ 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
好吧,'md'是'mkdir'的别名,我想?例如,因为'hg rename * rinjani-b',因为其他回购重复步骤2-4,我会遇到一个问题,例如,将'rinjani-a'移动到'rinjani-b'内。另外,如果我最终每个回购有多个头,我应该合并哪一个?小费? –
@GlennMohammad当您执行每个回购的'hg pull -f'时,它们将显示为不合并的独立历史记录。直到最后才合并头部。所以'hg rename * rinjani-b'不会看到'rinjani-a'文件。一旦所有的历史被重新命名为其最终位置,将每个历史的头部合并在一起,例如,将rinjani-b历史合并到rinjani-a中,然后将rinjani-c合并到该结果中,等等。 –
'md'和'mkdir'是等效的...至少在我使用的Windows上。 –