2012-07-17 113 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