svn到git转换(如何检查存储库质量)

时间:2013-10-15 09:53:04

标签: git

目前,我计划为开源项目提供相当大的git转换帮助。 存储库非常大,所以试用和错误很慢(超过60,000次提交)。

有很多与如何应该进行git转换有关的问题,但几乎没有关于如何检查转换是否有效的细节。

当然有一些基础知识,比如在repos中设置修订版并比较存储库的内容,但是历史记录,提交消息......移动文件,跟踪分支之间的变化等 - 变得更加复杂。

所以我的问题是:

  • 应该在新转换的git存储库中检查哪些区域,以确定转换是否正确并成功?
  • 需要注意的问题是什么?
  • 有人可以建议用于评估已转换的svn项目的策略,以确保在转换过程中没有出错吗?

注意:目前我们正在使用reposurgeon,但应该没有答案,但这确实意味着我们必须进行一次性转换并 get-it-right

2 个答案:

答案 0 :(得分:0)

如果您使用git-svn插件,您可以使用本地git客户端克隆您的SVN存储库,该客户端可以有效地创建完整历史记录的Git存储库。这不仅非常容易且超级快,而且您可以相信您与现有的svn repo正确同步,甚至可以拉出初始克隆后可能发生的更改。

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

答案 1 :(得分: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 "

感谢Julien Rivaud的正则表达式命令!