Git 将历史记录从重命名的文件和文件夹导入版本控制
我有一个客户雇佣我使用Mercurial为他15年的应用程序实现版本控制。但也希望将整个历史记录加载到Mercurial server,但目前没有版本控制软件,只重命名了带有更改日期的文件,如program1.c到program1_20060917.c和program1 copy(1.c),以及包含所有文件的旧文件夹(另一个版本),如文件夹_20080419 我想一个文件一个文件地导入作为一种改变,但是计数超过了2K次提交,他不希望这样 他同意对更改中的文件进行分组,但我找不到方法 也许,如果我可以加载到SVN、Git或CVS中,那么我可以将其转换为Mercurial 有人知道可以使用或做什么吗?提前谢谢 他同意对更改中的文件进行分组,但我找不到方法 在任何情况下,此任务的初始阶段都是纯手工的:只有(例如)三种状态S1、S2、S3,没有附加信息,无法创建正确的DAG-它是S1->S2->S3或S1->S3->S2或 您必须按时间顺序排列更改列表。每次更改可以是整个文件夹,也可以是仅文件 最旧的变更集将是存储库中的第一个变更集 对于下一个更改集:如果文件或单个文件复制到存储库中,请小心重命名的单独文件(当您将重命名的文件与已存在的原始文件一起添加时,您将无法恢复),在这方面,文件夹切片更易于管理;对于整个文件夹,删除工作目录的所有旧内容(除Git 将历史记录从重命名的文件和文件夹导入版本控制,git,svn,version-control,mercurial,Git,Svn,Version Control,Mercurial,我有一个客户雇佣我使用Mercurial为他15年的应用程序实现版本控制。但也希望将整个历史记录加载到Mercurial server,但目前没有版本控制软件,只重命名了带有更改日期的文件,如program1.c到program1_20060917.c和program1 copy(1.c),以及包含所有文件的旧文件夹(另一个版本),如文件夹_20080419 我想一个文件一个文件地导入作为一种改变,但是计数超过了2K次提交,他不希望这样 他同意对更改中的文件进行分组,但我找不到方法 也许,如果我
.hg
目录外的所有目录),并从变更集文件夹添加新内容
更换后(两种类型)hg状态-A
将向您显示工作目录的状态以及您所做的更改(纯M
不需要额外的技巧,M
+A
也可能-请咨询作者,混合A
+D
可能是重命名的结果,必须准确处理)
hg addremove--dry run
将尝试收集(并显示)与上一个变更集(add new,forget deleted)相比,此变更集的更改。在重命名某些版本化文件的情况下,您必须使用addremove的-s
选项修复此信息,以便同时编辑和重命名:手动拾取相似度百分比(参数-s选项)以获得正确的结果
由于设置了hg addremove
(实际操作,没有——干运行),您将获得工作目录,准备hg commit
,并使用下一个变更集重复该过程,直到完成修复
PS:SVN根本无法帮助您进行重命名(重命名仍然是Subversion的弱点),Git是比Mercurial糟糕得多的选择-在Mercurial中,如果出现
addremove-s
的错误,您可以处理和修复逻辑,Git会在幕后盲目地执行所有操作(在提交时,如果出现错误,您必须修复历史记录)为什么你要先将其转换为SVN、GIT或CVS,然后再转换为hg?第一次转换会是什么样子?如果你可以在一个VCS中进行转换,你可能可以在其中任何一个VCS(包括hg)中进行转换。是的,我的目的是想知道在另一个VCS中是否有我可以使用的工具。它不必是Mercurial。我刚才提到过,但它可以随便。@MarcoA,你没有抓住重点。困难的部分是从program1.c
,program1\u 20060917.c
和program1副本(1).c
到正确的历史记录。这是一项繁重的工作,很可能全是手动的,不管你如何分割。在去Mercurial之前,去其他VCS只是转移工作。除非有某种算法可以用来自动排序这些文件,否则你必须手动操作。是的,你是对的,使用另一个VCS只是为了以防万一有件事我可以利用。