2012-07-17 70 views
9

我想使用git克隆一个svn存储库,但不幸的是,其中svn checkout得到回购与所有外部组件,git svn clone只得到了仓库,但不会的外部。我如何通过git svn从svn仓库获取外部?我不想做任何花哨的东西,只需与外部的完成回购。混帐SVN - 克隆回购了所有的外部

+0

有https://github.com/andrep/git-svn-clone-externals – unhammer 2017-01-31 09:17:31

回答

8

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

+1

是否有任何命令行工具我可以使用? – wowpatrick 2012-07-17 13:47:12

+0

不幸的是没有命令行,只有UI – 2012-07-17 13:55:45

+0

后续问题:[SmartGit是否支持git-svn?](http://stackoverflow.com/q/16128118/86967) – nobar 2015-07-29 22:01:10

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脚本。另外,如果您的外部变更,您需要再次做类似的事情。

+0

我发现上述技术非常有用 - 除了我必须扭转$ 2和$ 1(本地目录和远程) – tutuDajuju 2013-11-13 07:01:41

+0

@tutuDajuju很高兴听到它的帮助。感谢您的评论。我也注意到了这一点,但我没有花时间去调查为什么在某些情况下排序会发生变化。 – 2013-11-14 03:55:20

+0

也许克隆语法在版本之间更改?今天它是克隆$ url [$ target_dir](dir是可选的) – tutuDajuju 2013-11-14 10:36:48

1

我不能评论,所以我在这里发布的解决方案,在我的情况下工作

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