2013-11-22 46 views
2

我有一個SVN -repository我想轉換爲git -repository。我使用svn2git來實現這一點。不幸的是,似乎這個工具在標籤正確的時候遇到問題。我SVN -repository看起來是這樣的:svn2git無法正確導入標籤

.../branches 
.../tags 
     project-version-5.2.5/ 
     project-version-5.3.0/ 
     project-version-5.3.1/ 
     project-version-5.4.0/ 
     project-version-5.5.0/ 
     project-version-5.5.1/ 
     project-version-5.5.2/ 
     project-version-5.5.3/ 
     project-version-5.5.4/ 
     project-version-5.6.0/ 
     project-version-5.6.1/ 
     project-version-5.6.2/ 
     project-version-5.6.3/ 
     project-version-5.6.4/ 
     project-version-5.6.5/ 
     project-version-5.6.6/ 
     project-version-6.0.0/ 
     project-version-6.0.1/ 
     project-version-6.0.2/ 
     project-version-6.1.0/ 
     project-version-6.1.1/ 
     project-version-6.1.2/ 
     project-version-6.2.0/ 
     project-version-6.2.1/ 
.../trunk 

但Git倉庫,並不代表這一點。標籤看起來像這樣:

bash:~$ git tag 
project-version-5.2.5 
project-version-5.3.0 
project-version-5.3.1 
[email protected] <-- I have no idea, where that is coming from... 
project-version-5.4.0 
project-version-5.5.0 
project-version-5.5.1 
project-version-5.5.2 
project-version-5.5.3 
project-version-5.5.4 
project-version-5.6.0 
project-version-5.6.1 
project-version-5.6.2 
project-version-5.6.3 
project-version-5.6.4 
project-version-5.6.5 

請注意缺少的標籤。他們由於某種原因存儲爲遠程分支:

bash:~$ git branch -r 
    svn/tags/[email protected] <-- Yay, random numbers! 
    svn/tags/project-version-5.6.6 
    svn/tags/[email protected] <-- And another one. 
    svn/tags/project-version-6.0.0 
    svn/tags/project-version-6.0.1 
    svn/tags/project-version-6.0.2 
    svn/tags/project-version-6.1.0 
    svn/tags/project-version-6.1.1 
    svn/tags/project-version-6.1.2 
    svn/tags/project-version-6.2.0 
    svn/tags/project-version-6.2.1 
    svn/trunk 

這裏發生了什麼?

編輯:我忘了補充我的命令:svn2git http://path/to/repository --no-minimize-url --verbose --username='username' --trunk trunk --nobranches --tags tags

EDIT2:我只是檢查,結果發現,這看似隨意的數字實際上在SVN修訂-repository,其標籤被製成。有點奇怪,只有~20個標籤中的3個得到了修改......

Edit3:顯然這個問題與一個標籤的註釋有關,它包含"。一個後,所有的標籤都保存爲分支,因爲svn2git不逃避",並嘗試做一些像

git tag -a -m "blablabla "blablabla"." "[email protected]" "svn/tags/[email protected]" 

其失敗的原因很明顯。我仍然不知道,爲什麼有些標籤會添加版本號。如果任何人有任何建議如何克服這個問題,我會非常感謝。

Edit4:我找到了逃避問題的解決方案。 svn2git -source中的轉義函數有點奇怪......它只用單引號(')替換'\''。我完成了...

回答

1

我通過添加雙引號轉義解決了這個問題。由於此更改已在github上建議,因此我沒有爲此啓動另一個請求。雖然在接下來的一個同樣的問題,這裏是我做過什麼:

  1. locate migration.rb - 在我的情況,這是在/var/lib/gems/1.9.1/gems/svn2git-2.2.2/lib/svn2git/migration.rb
  2. 找到escape_quotes()定義
  3. (目前在線路 335-337找到)
  4. 添加.gsub("\"", "\\\"")對身體

我希望,這將幫助別人同樣的問題一段時間:)

+0

哪裏是github線程?我有同樣的問題,但我們現在已經很多年了。代碼現在有點不同了,它包含'str.gsub(/'|「/){| c |」\\#{c}「}',但我不知道ruby是否足夠了解我必須改變,你能幫助我嗎? – lvthillo

1

我發現這個問題時,我也想知道那些@nnn標籤。所以,如果有人在尋找同樣的它在git svn manual描述:如果混帳SVN被配置爲獲取分支(和--follow支行有效)

,它有時會創建一個SVN多的Git分支分支,其中附加分支的名稱爲branchname @ nnn(其中nnn是SVN修訂版號)。如果git svn無法在SVN分支中找到第一次提交的父提交,將分支連接到其他分支的歷史記錄,則會創建這些額外的分支。