git svn - 所有外部的克隆回购

时间:2012-07-17 10:28:38

标签: git svn git-svn svn-externals

我想使用git来克隆svn存储库,但不幸的是,svn checkout获取所有外部的repo,git svn clone只获取没有外部的存储库。如何通过git svn从svn存储库中获取外部信息?我不想做任何花哨的东西,只需要用externals获得complet repo。

3 个答案:

答案 0 :(得分:9)

git-svn不支持外部,但您可以尝试SmartGit而不是git-svn。它支持svn:externals,将它们转换为.gitsvnextmodules文件并显示为模块。唯一的限制:您应该使用SmartGit克隆存储库,而不是打开现有的git-svn存储库。

答案 1 :(得分:2)

我一直使用git作为访问SVN存储库的前端。 SVN中的结构通常非常简单,因此存在顶级目录,其中包含外部,而子目录中没有外部。一旦添加它们,外部的变化也不会太大。所以假设像:

git svn clone X
cd X

我使用以下命令成功获得了所有外部效果:

git svn show-externals | \
 perl -ne 'if (/^\/(.*) (.*)/) { print "git svn clone $1 $2\n"; }' | \
 bash

我猜一个更复杂的外部结构需要更复杂的perl脚本。此外,如果您的外部变化,您将需要再次做类似的事情。

答案 2 :(得分:1)

我在这里发布的解决方案适合我的情况

git svn show-externals | \
  awk '/^\// { print "git svn clone "$3" ."$1" "$2":HEAD"  }' | \
  bash