颠覆Git:克隆创建分支?

时间:2012-05-18 23:02:16

标签: git svn clone git-svn

我正在将一个大型(> 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 repo推送到GitHub之前,我应该同时拥有主分支和主干分支吗?我不确定Git / GitHub究竟要查找什么。谢谢!

1 个答案:

答案 0 :(得分:2)

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

相反,对于SVN-> Git迁移,请查看另外两个项目。如果您有权访问SVN服务器,则建议使用SubGit。它将替换作为替换处理,合并为合并;还可以翻译ignores,svn:eol-style属性(对应的.gitattributes值),标签等。

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