如果你的SVN倉庫的佈局是:
svnroot/
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
|-- projectB
| |-- branches
| |-- tags
| `-- trunk
`-- projectC
|-- branches
|-- tags
`-- trunk
然後,你可以爲每個項目創建例如單獨的git倉庫,projectA
:
$ git svn clone --stdlayout https://svn.example.net/svnroot/projectA
之後,你可以創建主要的git回購(git init
)並將創建的git倉庫添加爲子模塊project{A,B,C}
(git submodule
)。
但是它可能不是你想要的;從git submodule
手冊:
子模塊允許外國庫 要被嵌入專用 子目錄源樹的內, 總是指向一個特定的提交。
他們不要與遙控器混淆,這意味着主要是爲同一項目的分支機構 ;子模塊的意思是不同的 項目,你想成爲你的源代碼樹的一部分,而 兩個項目的歷史仍然保持完全獨立,你不能 從主項目中修改子模塊的內容。
如果您想在主項目中修改project{A,B,C}
並保留項目的統一歷史記錄,則子模塊不適用於該任務。
對於所提供的svn的佈局:
svnroot/
|-- branches
|-- tags
|-- trunk
|-- projectA
|-- projectB
`-- projectC
嘗試創建git倉庫使用--trunk
,--branches
,--tags
參數如:
$ git svn clone \
> --trunk trunk/projectA \
> --branches branches \
> --tags tags \
> https://svn.example.net/svnroot \
> projectA
在完成.git/config
文件應包含例如:
[svn-remote "svn"]
url = https://svn.example.net/svnroot
fetch = projectA/trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/*
tags = tags/*:refs/remotes/tags/*
您可以使用--ignore-paths=<regex>
跳過項目中的匹配路徑。
來源
2010-12-21 22:06:51
jfs
你的SVN結構是什麼? – mipadi 2010-12-21 18:59:55
我已經更新了我的答案svn結構http://stackoverflow.com/questions/4502847/converting-from-svn-to-git-with-submodules/4504410#4504410 – jfs 2010-12-23 20:15:09