3

目前我正计划帮助一个开源项目进行相当大的 git 转换。存储库非常大,因此反复试验很慢(超过 60,000 次提交)。

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

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

所以我的问题是:

  • 应该在新转换的 git 存储库中检查哪些区域以查看转换是否正确并成功?
  • 需要注意哪些问题/陷阱?
  • 任何人都可以建议评估转换后的 svn 项目的策略,以确保转换过程中没有出错吗?

注意:目前我们正在使用 reposurgeon ,但这不应该暴露答案,尽管这确实意味着我们必须进行一次性转换并正确处理

4

2 回答 2

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 props 更改):

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

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

于 2013-11-09T00:04:18.067 回答
0

如果您使用 git-svn 插件,您可以使用本地 git 客户端克隆您的 SVN 存储库,这可以有效地创建一个完整的 Git 存储库,并具有完整的历史记录。这不仅超级简单和超级快速,而且您可以相信您已与现有的 svn 存储库正确同步,甚至可以提取初始克隆后可能发生的更改。

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

于 2013-10-15T19:31:48.340 回答