2009-05-05 59 views
30

我使用保存在svn中的軟件進行版本控制。我想使用git(git-svn),但是該軟件在使用前需要大量的設置和配置。有些工具可以處理所有的設置,包括通過svn檢查所有的代碼。將SVN簽出轉換爲使用git(git-svn)

git-svn的所有文檔(我已經能夠找到)需要使用git-svn進行全新的結帳。

有沒有辦法將現有的svn checkout轉換爲可以使用git-svn?

回答

11

你可以做這樣的事情:

  1. 不要使用Git SVN的SVN樹的完整克隆到一個臨時目錄。確保您使用與現有結帳完全相同的修訂版。
  2. 將git-svn結帳頂層的「.git」文件夾移動到SVN結帳的頂層。
  3. 然後你需要告訴Git忽略「.svn」目錄,或者你可以全部刪除它們。
  4. 刪除git-svn結帳。
  5. 在那裏,現在你可以使用Git和git-svn來操縱現有的文件。
  6. 做一個「git狀態」,並希望它說沒有變化。
13

編號git-svn克隆將整個存儲庫轉換爲git。 SVN簽出沒有整個存儲庫,因此無法從中克隆。這是從SVN或CVS切換到分佈式系統(如git)的主要優勢。

+0

我不關心所有的歷史,只是當它檢查出svn時的狀態,以及svn分支上的未來更改(所以我從調用git-svn rebase得到的) – Jachin 2009-05-05 21:16:22

+3

這不是git的工作原理。 DVCS是「分佈式」的,因爲每個克隆都是存儲庫的完整副本。這就是整個問題。 – singpolyma 2009-05-05 21:53:58

1

另一種方式來做到這一點,它不修改原始Subversion工作拷貝,也不需要你複製它,使用補丁:

  1. 使用做你的Subversion樹的完整克隆git-svn,到一個將成爲Git倉庫的新目錄。確保您使用與現有結帳完全相同的修訂版。您可以使用git reset --hard :/r<revision>強制它在克隆後進行相同的修訂,其中<revision>是Subversion工作副本更新到的修訂版(請參閱此處使用svn info)。
  2. cd到您的Subversion工作副本。
  3. 使用svn status,以確保所有的新文件都標有A(或使用svn add添加它們),所有被刪除的文件標有D(或使用svn rm刪除它們)。
  4. 運行svn diff >patch.diff創建補丁文件。
  5. patch.diff複製到之前創建的Git存儲庫的頂部。
  6. cd到之前創建的Git存儲庫的頂部。
  7. 運行git apply -p0 patch.diff將補丁應用於Git存儲庫的工作樹上。

現在,你可以通過使用git status的變化,和git add/git commit它們,將它們保存在您的本地倉庫。