我有一个客户雇用我来使用Mercurial实现版本控制,这是他十五年前的应用程序。但是也希望将整个历史记录加载到Mercurial服务器,但目前没有版本控制软件,只重命名文件及其更改日期,如program1.c到program1_20060917.c和program1 copy(1).c,以及所有文件(另一个版本)的旧文件夹,如folder_20080419。
我想把文件导入为一个更改,但计数超过2K提交,他不希望这样。
他同意协调对变更中的文件进行分组,但我找不到要做的事情。
也许如果我可以加载到SVN,Git或CVS,那么我可以将其转换为Mercurial。
有谁知道可以使用或完成的内容?提前谢谢。
答案 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在场景后面盲目执行(并且在提交时,如果出现错误,则必须修复历史记录)