将历史记录从重命名的文件和文件夹导入到版本控制

时间:2014-08-04 22:09:33

标签: git svn version-control mercurial

我有一个客户雇用我来使用Mercurial实现版本控制,这是他十五年前的应用程序。但是也希望将整个历史记录加载到Mercurial服务器,但目前没有版本控制软件,只重命名文件及其更改日期,如program1.c到program1_20060917.c和program1 copy(1).c,以及所有文件(另一个版本)的旧文件夹,如folder_20080419。

我想把文件导入为一个更改,但计数超过2K提交,他不希望这样。

他同意协调对变更中的文件进行分组,但我找不到要做的事情。

也许如果我可以加载到SVN,Git或CVS,那么我可以将其转换为Mercurial。

有谁知道可以使用或完成的内容?提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

他同意协调对变更中的文件进行分组,但我找不到要做的事情

在任何情况下,此任务的初步阶段都是仅纯粹的手工:只有(例如)三个状态S1,S2,S3没有附加信息,因此无法创建正确的DAG - 它是S1-> S2-> S3或S1 - > S3 - > S2或......

您必须订购(按时间顺序)更改列表。每个更改可以是整个文件夹,也可以只是文件。

最旧的设置将是存储库中的第一个变更集。

对于您拥有的每个下一个变更集:如果将单个文件或单个文件复制到存储库中,请注意重命名的单独文件(当您将已重命名的文件与已存在的原始文件一起添加时,您将会有很长的恢复时间),切片文件夹在这方面更易于管理;如果整个文件夹删除了工作目录的所有旧内容(所有除.hg目录之外的所有内容)并从changeset-folder添加新内容

替换后(两种类型)hg status -A将显示工作目录的状态及更改(纯M不需要额外的技巧,M + A可能另外 - 咨询作者,A + D 的混合可能是重命名的结果,必须准确处理)

hg addremove --dry-run将尝试收集(并显示)此变更集的更改,与之前相比(添加新的,忘记删除)。如果要重命名某些版本化文件,则必须使用addremove的-s选项修复此信息,以便同时进行编辑和重命名:手动选择相似性百分比(-s选项的参数)以获得正确的结果

hg addremove设置的结果(实际操作,没有--dry-run)你将得到工作目录,准备好hg commit并重复下一个变更集的流程,直到他们完全固定

PS SVN根本无法帮助你重命名(重命名仍然是Subversion的弱点),Git是一个比Mercurial更糟糕的选择 - 在你可以处理的Mercurial中在addremove -s出现错误的情况下修复逻辑,Git在场景后面盲目执行(并且在提交时,如果出现错误,则必须修复历史记录)