2010-12-12 30 views
1

在使用此回购(最初是SVN)的过程中,我一直没有把文件链接放在一起。我已经改变了IDE两次,将项目分解成Netbeans模块,并在其时间内使项目变得复杂化。大部分文件历史丢失,主要是因为在mavenizing期间,我删除了整个主干,提交,复制到maven项目中,并提交。不完全是最好的想法,因为我后来发现所有的历史都重置到了这一点。它变得非常糟糕,以至于一个版本库统计程序是无用的,因为它说我有50,000行代码投入而不是~8,000。在Mercurial中修复移动文件之间的链接

有什么方法可以修复所有破损的文件历史吗?我有权访问SVN和Git,如果Mercurial无法做到这一点

回答

3

Hrm,你做了你删除和复制的时间你没事的罚款了你刚做完hg addremove --similarity 90,它说:“删除所有消失的东西,添加一切都是新的,如果它们彼此相似90%,则重新命名为“。

现在那个机会已经过去了,没有办法移动一个没有重写你的仓库的仓库,因为所有的节点ID(哈希)都改变了,所有的克隆都会无效化。

hg export --output "../patch-%n.patch" 0:tip # exports every changeset to a patch file 
cd .. 
hg init newrepo 
cd newrepo 
hg import --similarity 90 ../patch* 

这需要一个线性的历史从你第一次提交给你的最后一个(不包括分支机构和其他负责人等)出口:如果可以的话,你有一个基本上线性的历史,你也许可以像这样的东西度日他们补丁,创建一个新的空回购,并使用重命名检测功能导入变更集。

这是一个非常激烈的行为,所以确保它真的值得你,并保持你的旧回购周围的好措施。

+0

由于我是本回购库中唯一的人,并且没有人克隆它,所以我应该很好地处理它。但是,有没有办法在SVN中合并我做的删除和复制提交?因为在实施之前你仍然有破碎历史的问题。我能想到的唯一方法是回滚到特定修订版,完成工作,然后将所有更改应用于顶部。但是我不太了解如何在Mercurial中做的事情,我认为它会释放所有时间戳,这是我想要保存的东西。 – TheLQ 2010-12-12 07:05:39

+0

如果你要export-everything import-everything路由,你可以使用'hg import --no-commit'合并两个变更集,然后在执行'hg commit'之前进行两次导入。时间戳可以设置为您想要在变更集上进行的任何操作(请参阅'commit --date'),并且文件时间戳完全不会被追踪。 – 2010-12-13 03:59:16

+0

回到这个问题,我试图做到这一点,但遇到了重建回购问题。我用'hg export --git -a -o“../patch-%r.patch”-vv 0:tip'输出,并用(大大简化) grep补丁\'; do hg import --similarity 90 --user“...”--force --date“...”../$i;完成;'。但是,我收到很多导入错误:文件不存在,它们已经存在,或者被拒绝。有什么建议么? – TheLQ 2011-01-16 22:54:17

相关问题