2013-03-01 126 views
9

問題的Git,SVN - 進口全部歷史

默認情況下混帳svn的克隆進口只從分支創建起的歷史,儘管事實上,歷史文件存在於SVN倉庫先前分支的創建。

我們的svn分支是由svn copy創建的,如果有關係的話。

我嘗試

我試過--no-minimize-url--follow-parent,但沒有成功。生成的git倉庫與沒有這些參數相同,從分支創建開始。

期望的結果

Git倉庫從SVN倉庫創建完整的歷史。

更新 我的實際命令行是git svn clone http://svnserver/repo/dir1/dir2/project
什麼幫助是-T與結果命令的參數
git svn clone http://svnserver/repo/ -T dir1/dir2/project

非常感謝!

+0

你用-T標誌試過了嗎? git svn clone -T repo_url? – 2013-03-01 17:57:39

+0

@Kata,我不是在引用'-s'標誌嗎?標準佈局。它採用標準的trunk/branches/tags目錄格式,因此它從SVN存儲庫導入所有分支和標籤。我發現http://jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/特別適用於遷移。 – mgarciaisaia 2013-03-01 20:19:24

+0

你可以發佈你用來克隆svn回購的整個命令(排除敏感url)嗎? – 2013-03-01 20:30:10

回答

10

默認的git svn的克隆進口的歷史只能從分支創建 起,儘管事實上,歷史文件存在於SVN 庫先前分支的創建。

是的。那是真實的。如果被告知,git svn只會嘗試將分支導入分支。從GIT-SVN的手冊頁:

當克隆的SVN庫,如果使用沒有用於描述 庫佈局選項(--trunk,--tags,--branches, --stdlayout ),git svn clone會創建一個完全線性歷史記錄的git存儲庫,其中分支和標籤在工作副本中顯示爲單獨的 目錄。

如果您將一個分支的URL傳遞給git svn clone(而不是頂級URL),則只會獲得該分支的線性歷史記錄。這可能是你所看到的。

如果您想要完整的歷史記錄,請使用上述存儲庫佈局選項並傳遞頂級URL。然後git svn將嘗試爲SVN分支創建git分支,並且會嘗試給它們正確的歷史記錄,然後再創建它們。

請注意,這將爲您提供所有分支機構的完整存儲庫。如果你只想要一些分支機構,則需要修改配置如手冊頁解釋:

也可以通過使用大括號內名稱的 逗號分隔的列表來獲取分支或標籤的子集。例如:

 [svn-remote "huge-project"] 
       url = http://server.org/svn 
       fetch = trunk/src:refs/remotes/trunk 
       branches = branches/{red,green}/src:refs/remotes/branches/* 
       tags = tags/{1.0,2.0}/src:refs/remotes/tags/* 

git-svn(1)

+2

如果你指定多個單獨分支爲多個'svn-remote。{name} .fetch'配置選項(你需要在運行'git svn init'和第一個'git svn fetch'之間手工完成''git svn fetch克隆快捷方式在這裏),你可以獲取一些特定的分支,包括它們之間的分支歷史。 – 2013-03-04 15:23:14

+0

@me_and:好點。 git-svn文檔也解釋瞭如何只提取一些分支;我編輯了我的答案。 – sleske 2013-03-05 00:00:04

+0

如何做到這一點,如果你沒有svn佈局,而不是你做了svn-copys的分支? – Spen 2014-08-18 08:34:55