使用git svn clone遷移svn倉庫
clone命令可以指定很多參數,主要用到這些,你也可以使用git svn help查看完整的參數列表。
git svn clone https://172.16.0.241:8443/svn/wsgjp/ -r 76896:HEAD --no-metadata --authors-file=svnuser.text --trunk=svnproject --branches=svnbranch yourGitProject
- r指定起止版本號。
- no-metadata阻止git導出SVN包含的一些無用信息。
- authors-file必須指定svn帳號在git中的映射。
- trunk指定導出倉庫的主干項目路徑。
- branches指定svn的分支項目路徑。
注意:clone命令需要管理員權限,否則會遇到下面的異常:
couldn't truncate file .... at line 1393.
你要做的就是右鍵使用管理員身份運行CMD,然后使用fatch繼續執行導出。
git svn fatch -r 76896:HEAD --authors-file=svnuser.text
當然這並不是唯一的坑,你還有可能會遇到下邊的錯誤:
0 [main] perl 24432 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
fatal: malformed index info 100644 362f1c18ceed5d593eb021432545685283a93
要解決這個問題,請打開隱藏項目找到.git/config文件,文件大概長這個樣子:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
longpaths = true
[svn-remote "svn"]
...
重要的就是longpaths = true這一句,然后fatch繼續。
接下來的就是等待,如果你的svn庫比較大,像我要導出2w+的commit,會花費相當長的時間。
so, just do it!
然然然后。。。
fetch之后通過git log你會發現看不到新的log,這是因為fetch之后並不會自動將代碼合並到當前master,我們查看一下所有的分支
$ git branch -a
* master
remotes/origin/trunk
可以看到有一個遠程分支,這個就是SVN產生的分支,查看一下log
git log remotes/origin/trunk
LOG中顯示了SVN最新的提交日志,我們需要手動合並到master上,然后查看日志包含了最新的提交。
git merge remotes/origin/trunk
git log
到此遷移已經完成,接下來添加GIT遠程地址,放心將代碼push到GIT服務器吧。