2013-10-15 61 views
3

目前我打算帮助一个开源项目的相当大的git转换。 存储库相当大,所以试用&错误很慢(超过60,000次提交)。svn to git转换(如何检查存储库质量)

有很多与有关的问题如何完成git转换,但几乎没有关于如何检查转换是否有效的详细信息。

当然也有像两个回购设定的修订和比较库的内容,但历史,在提交信息...移动文件,跟踪分支机构等之间变化的基础 - 变得更加复杂。

所以我的问题是:

  • 哪些领域应该在新转换的git仓库进行检查,发现转换是正确的,成功了吗?
  • 有什么需要注意的问题?
  • 任何人都可以提出评估转换svn项目的策略,以确保在转换过程中没有出错吗?

:目前我们使用reposurgeon但是应该对答案没有霸菱,但它确实意味着我们要做一个一次性的转换和得到,它右

+0

也许更好地让过渡更平缓,即保持Subvresion资料库在线(至少只读)一段时间?如果在转换过程中没有错误消息+一年后没有人会抱怨任何缺失的信息,那么考虑稳定的git存储库;并在失踪的情况下从SVN获取它。 –

+0

@Vi,是的,我们会扔掉svn回购,我有一个本地副本(用于测试),我们保留备份。即使我们有SVN可用,并且它可能(原则上)可以返回并使用它。 - 一旦我们有了几个月的发展 - 发现一些错误将会非常棘手,要回头去纠正(我猜可能无论如何,重写历史的工具存在但不是微不足道的) - 很可能我们只是与我一起生活,我想避免。 – ideasman42

+1

在Git中,如果有人重写了历史记录并发布了它(使用'push --force'),如果您记住原始历史记录的上次提交SHA-1值(并且尚未进行垃圾回收),则仍然可以访问原始历史记录。您还可以设置规则以防止在使用denyDelete和denyNonFastForward进行推送时覆盖历史记录。 –

回答

0

如果您使用的git - svn的插件,你可以只克隆你的SVN仓库与有效地创建一个Git回购完成完整的历史当地git的客户端。这不仅超级简单且超级快捷,而且您可以相信您已与现有的svn repo正确同步,甚至可以在初始克隆后发生可能发生的更改。

至于要注意的事情,git不跟踪空文件夹。另一个问题是处理二进制文件,你希望不存储在你现有的回购中。您不想通常在git仓库中存储大型二进制文件。有几个git特定的解决方案,你可以谷歌,但它可能会棘手,如果你通过克隆svn回购拉动他们。

+0

我们尝试了https://github.com/nirvdrum/svn2git(它使用git-svn IIRC),它花了一个多星期的时间进行转换,多个人在不同的系统上尝试过(快速xeon服务器,内存中RAM转换,快速SSD的 - 仍然很慢)。我不想进入转换主题,但这就是为什么我们需要花费25分钟的时间。 – ideasman42

+0

是的,我们在回购中也有二进制文件,实际上有很多GB,但是我们不打算在git中跟踪它们,回复可以忽略它们,我们可以在外部管理它们。 – ideasman42

+0

git中的多个二进制blob会让你的日常生活变得悲惨。如果可能的话,你肯定会想把它从git中排除。 – mnagel

0

这不是一个明确的答案,只是有些事情我们一直在做检查git的转换就可以了。

找到所有提交与父母3+,其不太可能这些都是有效的,但也有例外它在哪里。

git log --all --min-parents=3 

查找所有提交重复的父母。请注意,运行git filter-branch可以在之后清理它们,但这有时可能是一个非常缓慢的过程。

git log --all --min-parents=2 --format="format:%H: %P" | egrep ':[^:]* ([0-9a-f]+) [^:]*\1' 

查找不合并,不改变任何文件(可能SVN道具变化)所有提交:

git log --all --max-parents=1 --format="format:%H" --shortstat | pcregrep -v -M "^[a-z0-9]+\n " 

感谢朱利安Rivaud为正则表达式的命令!