2017-04-18 136 views
1

我正在使用git svn clone將一些SVN回購遷移到Bitbucket。看起來克隆在克隆修訂版本不存在時會失敗,因爲它影響的分支在Subversion中不再存在。git svn克隆由於刪除分支而失敗

我做

git svn clone -authors-file=authors.txt https://my.svn.com/project001 project001 

日誌顯示

{...}  
    r12 = f16b3d1014109ccd1c7e24dd70bfa9df45362e48 (refs/remotes/git-svn) 
      M  trunk/xx.java 
      M  trunk/xx.java 
    r13 = 9e61cda58fb2f5afa0a97277a10fd92365f3d1e3 (refs/remotes/git-svn) 
      M  trunk/xx.java 
      M  trunk/xx.java 
    r14 = f9964ce0a8081cf0bf22ee8a5ba32afe725323c3 (refs/remotes/git-svn) 
      M  trunk/xx.java 
    r15 = ac1f5c4a61346601dd85fbca55bd585ce5fc358d (refs/remotes/git-svn) 
    fatal: .git\svn\refs\remotes\origin\https;C:\Program Files\Git\index: index file open failed: Invalid argument 
      (in cleanup) update-index -z --index-info: command returned error: 128 
    W: +empty_dir: branches/https:/my.svn.com/project001/branches 

探索SVN回購似乎修訂#16指的是創建一個分支(錯誤命名https:/my.svn.com/project001/branches),其不存在了(它已被刪除,修訂版#18)。

我想這個問題是由於這個原因造成的,但是在閱讀文檔和瀏覽之後,我沒有找到一種方法讓git svn clone忽略它。如果可能,我正在尋找自動化的方法,因爲我必須編寫一個腳本來遷移幾個GB的SVN回購。

+0

這是關於一次性遷移,然後只使用Git,或者你想從你的Git克隆提交回SVN回購? – Vampire

+0

@Vampire這是一次性遷移。 – Averroes

回答

2

對於一次性遷移git-svn而不是轉儲存儲庫或存儲庫部件的正確工具。如果你想使用Git作爲現有SVN服務器的前端,這是一個很好的工具,但是對於一次性轉換,你應該使用而不是使用git-svn,但是svn2git更適合這種使用情況。

有很多工具叫svn2git,可能最好的一個是從https://github.com/svn-all-fast-export/svn2git的KDE。我強烈建議使用svn2git工具。這是我所知道的最好的,並且它對你的規則文件可以做的非常靈活。

您將可以輕鬆配置svn2git的規則文件,以根據當前的SVN佈局生成所需的結果。

如果您不是100%關於存儲庫的歷史記錄,svneverever from http://blog.hartwork.org/?p=763是一個很好的工具,用於在將SVN存儲庫遷移到Git時調查SVN存儲庫的歷史。


即使git-svn比較容易下手,這裏是爲什麼使用KDE svn2git代替git-svn優越,除了它的靈活性,一些深層次原因:

  • 歷史重建更好的和更清潔通過svn2git(如果使用正確的),這是更復雜的分支和合並的歷史尤其如此
  • 標籤是真正的標籤,而不是Git分支
  • git-svn標籤包含一個額外的空提交這也使得分支機構他們不要的部分,所以直到你給--tags的命令,默認情況下只標記指向獲取分支還端來一正常fetch不會得到他們。有了正確的svn2git標籤是屬於他們的地方
  • ,如果你在SVN改變佈局,可以輕鬆地與svn2git配置此,與git-svn你將失去​​歷史最終
  • svn2git你也可以拆分一個SVN倉庫分成多個Git倉庫容易
  • 或結合在相同的SVN根多個SVN儲存庫到一個Git倉庫容易
  • 轉換是用正確的svn2git速度比與極大數倍git-svn

你看,爲什麼git-svn更糟,KDE svn2git更好。 :-)

+0

謝謝。我嘗試過使用svn2git(不是kde的,但是nirvdrum/svn2git,因爲我在Windows上),但看起來像我被困在一個經常性的「問題」中運行命令:git checkout -f master error:pathspec'master'not匹配git已知的任何文件。' – Averroes

+1

nirvdrum'svn2git'在引擎蓋下使用'git-svn',因此遭受大多數相同的缺點,只是在實際的'git-svn'克隆之後修復其中的一些。我也在Windows上使用KDE'svn2git',這裏沒有問題。 – Vampire

+0

謝謝!我要去試試KDE svn2git。 – Averroes