我很抱歉如果這個問題以前被問過,但我的情況是一個相對特定的問題。我一直在我公司工作一段時間並使用SVN,但由於各種原因最近希望轉移到Git。如何將具有不一致分支結構的SVN導入到Git中?
我現在遇到的問題是我的公司使用非標準分支結構,不幸的是,有時過去,它甚至沒有一致的非標準分支結構。
自加入公司以來,我瞭解到的歷史是,我們使用一個主幹分支,從中創建發佈分支和功能分支。然而,這些分支的結構不僅僅是標準的trunk/branches/tags結構。我們有不同類型的分支的幾個子文件夾。例如,發佈分支去branches_release,配備在branches_feature樹枝等,如下所示:
branches_feature/featureA
branches_release/2.0
我想出如何使這個克隆/通過修改的Git回購的配置正確讀取的工作,使
branches = {branches_feature,branches_release}/*:refs/remotes/branches/*
這在取得相應分支方面相對成功。我有一個問題是,當我公司首次啓動時,它使用更像是一個結構:
branches_feature/username/branchname
不幸的是發現了這一點(硬盤的方式),我不得不「混帳SVN取」,發現所有這些遵循舊的分支約定的分支都已經崩潰了,所以在Git中,每個用戶都有一個分支,每個分支都存在於每個分支中。所以,
branches_feature/username/featureA
branches_feature/username/featureB
已經坍塌成:
branches_feature/username
這顯然是不夠的正確轉載SVN回購的歷史,但我不知道如何修改配置的分支線封裝所有的這些分支仍然正確使用新的分支格式。我一直試圖用各種方式來操縱它,但是我最終會得到錯誤或者只是在嘗試中失敗。
如果任何人都可以提出一個很好的方法來適當地保留SVN回購的歷史,同時從SVN導入Git,我將不勝感激。
謝謝。
當然不會做任何git svn補丁(還)。我目前的計劃是做類似branches = branches_feature/{userA,userB}/*:refs/remotes/branches_feature/*。 (就像你的第一個解決方案)我擔心的是,如果我使用這種方法,是否會嘗試創建兩個分支,一個用於「userA」,另一個用於「userA/feature」。考慮到這種不確定性,我有點害怕開始......大聲笑。我將不得不最終雖然我猜... – 2012-03-07 04:36:33
就是這樣,它不會; 'svn-remote.branches'只爲子目錄創建分支。與branch = branches/*的「標準」配置比較:refs/remotes/branches/*' - 你沒有得到一個叫做「branches」的分支,每個子目錄只有一個分支。 – 2012-03-07 10:40:27
另外,請隨時嘗試!如果你不喜歡結果,從你的配置文件中刪除相關的行,並刪除你想從'.git/logs/refs/remotes','.git/refs/remotes'和'的.git/SVN /參/ remotes'。 – 2012-03-07 10:43:12