2015-11-12 71 views
1

我的任務是將項目從SVN移動到Git,然後我按照https://git-scm.com/book/it/v2/Git-and-Other-Systems-Migrating-to-Git中的教程進行操作。好點:它的工作!悲傷的一點是,在移動遠程參考標籤和分支時,教程似乎已經過時。Git從SVN移動到哪裏:git 2.6存儲svn跟蹤分支?

本教程的狀態,它們存儲在

.git/refs/remotes/origin/tags/*

然而,在我的svn克隆,這個目錄是空的。他們似乎被儲存在

.git/svn/refs/remotes/origin/tags/*

同爲分支,我希望他們在

.git/refs/remotes/

,但發現他們在

.git/svn/refs/remotes/

所以,我的問題你現在是:遵循教程是安全的,但替換相應的路徑與那一個,我找到了?

編輯1:

假設它確實是安全的,我複製到新的目標的引用。不幸的是,這並沒有爲我工作:

$ git tag --list 

$ 

即使這樣,該文件夾.git/ref/tags/不是空的。在那裏,我找到了下列文件標籤命名的文件夾:

-rw-r--r-- 1 delo 1049089 96 Nov 12 10:00 .rev_map.9585454d-0aa9-4b53-3453-ca0f383a6637 
-rw-r--r-- 1 delo 1049089 247K Nov 12 10:00 index 
-rw-r--r-- 1 delo 1049089 24 Nov 12 10:00 unhandled.log 

相同的分支。我認爲,這不是它應該是...

我該如何解決這個問題?

回答

0

我認爲這很安全。請注意,您可以在移動它們之前始終創建備份。

另一種方法是使用this教程中的步驟。

基本上,你可以這樣做:

for tag in `git branch -r | grep "tags/" | sed 's/ tags\///'`; do 
    git tag -a -m"Converting SVN tags" $tag refs/remotes/$tag 
done 
+0

本教程似乎是過時的爲好。 '$ tag'將被命名爲'origin/tags/1.0.0',而不是'1.0.0'。但是,它提供了一個提示如何解決這個問題。 –

+0

是的,這不是最近的,但這個概念仍然有效。你可以去掉origin /標籤,通過執行:'sed's/origin \/tags \ //'' – dan

+0

當你去掉origin/tags時,你必須將它添加到'refs/remote/$ tag'所以它變成:'ref/remote/origin/tags/$ tag',否則你會得到'致命的:無法解析'refs/remotes/MyTag'作爲有效的ref'。所以我現在有了標籤。不幸的是,分支並不是那麼容易,因爲沒有分支/''路徑。分支位於'origin /'的正下方。有任何想法嗎? –