2

我正在将一个大型(> 6500 次提交)Subversion 存储库转换为 Git 存储库,并且遇到了一些问题,希望有人能提供帮助。这是我所在的位置:

我创建了远程存储库的本地 Subversion 存储库备份。我正在使用以下方法将该存储库转换为 Git:

git svn clone svn://localhost/svn gitrepo –no-metadata -A authors-transform.txt -t tags -b branches -T trunk

这确实创建了一个 Git 存储库,但是当它这样做时,它会创建一些看起来像提交编号的附加分支。我绝对不打算让那些人在那里。从克隆中清理一点后,我的“.git/refs/heads/”文件夹如下所示:

branch1
branch1@6701
branch1@6736
branch2
branch3
branch4
master
trunk

git svn clone 有什么理由这样做吗?这些提交中是否有一些东西可能会创建一个全新的分支?

另外,在我将这个新创建的 Git 存储库推送到 GitHub 之前,我是否应该同时拥有一个 master 和一个 trunk 分支?我不确定 Git / GitHub 到底要寻找什么。谢谢!

4

1 回答 1

2

如果我没记错的话, refs/remotes/XXX@rev 分支是为删除的分支创建的。假设它们没有被创建。然后 refs/remotes/XXX 分支不存在到(因为它在 SVN 中被删除了)。然后 Git 提交对应的已删除 SVN 分支无法从任何 Git 分支访问,因此可以作为垃圾收集。如果您看到 refs/remotes/XXX 和 refs/remotes/XXX@rev 都存在,这可能意味着分支已被替换。但不幸的是,据我所知,git-svn 会为分支替换创建合并提交,从历史翻译的角度来看,这是绝对错误的。

相反,对于 SVN->Git 迁移,请查看另外两个项目。第一个是SubGit,如果您可以访问您的 SVN 服务器,则推荐使用它。它将替换作为替换处理,合并作为合并;但也会翻译忽略、svn:eol 风格的属性(对应的 .gitattributes 值)、标签等。

如果您无权访问 SVN 服务器,另一种选择是SmartGit 。它还提供了合理的翻译(合并到合并,忽略到忽略),还可以将 svn:externals 转换为显示为模块的 .gitsvnextmodules 文件。

于 2012-05-19T01:03:36.307 回答