使用git svn clone遷移svn倉庫(保留提交記錄)


使用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
  1. r指定起止版本號。
  2. no-metadata阻止git導出SVN包含的一些無用信息。
  3. authors-file必須指定svn帳號在git中的映射。
  4. trunk指定導出倉庫的主干項目路徑。
  5. 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服務器吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM