我使用保存在svn中的軟件進行版本控制。我想使用git(git-svn),但是該軟件在使用前需要大量的設置和配置。有些工具可以處理所有的設置,包括通過svn檢查所有的代碼。將SVN簽出轉換爲使用git(git-svn)
git-svn的所有文檔(我已經能夠找到)需要使用git-svn進行全新的結帳。
有沒有辦法將現有的svn checkout轉換爲可以使用git-svn?
我使用保存在svn中的軟件進行版本控制。我想使用git(git-svn),但是該軟件在使用前需要大量的設置和配置。有些工具可以處理所有的設置,包括通過svn檢查所有的代碼。將SVN簽出轉換爲使用git(git-svn)
git-svn的所有文檔(我已經能夠找到)需要使用git-svn進行全新的結帳。
有沒有辦法將現有的svn checkout轉換爲可以使用git-svn?
你可以做這樣的事情:
編號git-svn克隆將整個存儲庫轉換爲git。 SVN簽出沒有整個存儲庫,因此無法從中克隆。這是從SVN或CVS切換到分佈式系統(如git)的主要優勢。
另一種方式來做到這一點,它不修改原始Subversion工作拷貝,也不需要你複製它,使用補丁:
git reset --hard :/r<revision>
強制它在克隆後進行相同的修訂,其中<revision>
是Subversion工作副本更新到的修訂版(請參閱此處使用svn info
)。cd
到您的Subversion工作副本。svn status
,以確保所有的新文件都標有A
(或使用svn add
添加它們),所有被刪除的文件標有D
(或使用svn rm
刪除它們)。svn diff >patch.diff
創建補丁文件。patch.diff
複製到之前創建的Git存儲庫的頂部。cd
到之前創建的Git存儲庫的頂部。git apply -p0 patch.diff
將補丁應用於Git存儲庫的工作樹上。現在,你可以通過使用git status
的變化,和git add
/git commit
它們,將它們保存在您的本地倉庫。
我假設你可能想保留歷史。但是,如果您(或任何其他人在此頁面上絆倒)不需要歷史記錄,則可以使用「導出」功能,如下所述:https://stackoverflow.com/a/419475/2437521。
我不關心所有的歷史,只是當它檢查出svn時的狀態,以及svn分支上的未來更改(所以我從調用git-svn rebase得到的) – Jachin 2009-05-05 21:16:22
這不是git的工作原理。 DVCS是「分佈式」的,因爲每個克隆都是存儲庫的完整副本。這就是整個問題。 – singpolyma 2009-05-05 21:53:58