2013-03-31 35 views

回答

2

前段時間我很難做,所以我已經收集了一些來自不同來源的步驟來完成它。此過程將保持您的完整git歷史記錄。 開始之前,請確保備有您的存儲庫副本。

首先要做的是創建一個空的svn存儲庫。當你用它做一定有git-svn安裝和編輯YOUT .git/config跟蹤新創建svn回購:

[svn-remote "svn"] 
url = https://your.svn.repo 
fetch = :refs/remotes/git-svn 

現在你可以獲取你的svn回購:

git svn fetch 

你應該看到遠程分支下面您svn回購,你可以檢查有:

git branch -a 

現在得到的散列您root commitsvn分支:

git rev-list --parents master | grep '^.\{40\}$' 
git rev-parse remotes/git-svn 

創建移植:

echo <hash-of-root-commit> <hash-of-svn-branch-commit> >> .git/info/grafts 

現在,如果你使用的git(我用tig)圖形的包裝,你應該看到你的root commitsvn-branch下降。

在這一點上,你必須傳播graft使其永久化:

git filter-branch -- remotes/git-svn --all 

現在我們不需要它了,所以我們可以用你的圖形混帳包裝刪除

rm .git/info/grafts 

檢查那svn-branchmaster的祖先。

現在你幾乎已經完成,重訂主幹頂部的歷史:

git svn rebase 

現在你準備承諾使用

git svn dcommit 

svn回購我創建這個程序合併相關信息我發現herehere,所以感謝各自的作者。我修改了第一部分,因爲建議的程序不適合我。

2

請注意,git-svn方法會導致部分歷史丟失。考慮使用SubGit來代替,它可以將Git存儲庫轉換爲SVN,並保留所有分支的歷史記錄。

下面你可以找到一個在本地模式下使用SubGit的例子,當兩個Subversion和Git倉庫駐留在同一臺主機上:

$ subgit configure SVN_REPO 
# adjust SVN_REPO/conf/subgit.conf, so git.default.repository points to GIT_REPO 
# adjust SVN_REPO/conf/authors.txt to map SVN usernames to Git identities 
$ subgit install SVN_REPO 
$ subgit uninstall --purge SVN_REPO 

一旦我們已經轉換Linux內核Git倉庫到SVN這種方式。希望有所幫助。