Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 将历史记录从重命名的文件和文件夹导入版本控制_Git_Svn_Version Control_Mercurial - Fatal编程技术网

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

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次提交,他不希望这样 他同意对更改中的文件进行分组,但我找不到方法 也许,如果我

我有一个客户雇佣我使用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或

您必须按时间顺序排列更改列表。每次更改可以是整个文件夹,也可以是仅文件

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

对于下一个更改集:如果文件或单个文件复制到存储库中,请小心重命名的单独文件(当您将重命名的文件与已存在的原始文件一起添加时,您将无法恢复),在这方面,文件夹切片更易于管理;对于整个文件夹,删除工作目录的所有旧内容(除
.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只是为了以防万一有件事我可以利用。