簡體   English   中英

我如何將git歷史記錄推送到svn

[英]How can i push a git history to svn

我有一個歷史悠久的現有git存儲庫。 出於商業原因,我必須將該存儲庫鏡像到svn服務器。 我嘗試了幾種方法,但到目前為止一直失敗。

我前段時間很難做,所以我從不同的來源收集了一些步驟來做。此過程將保留您的完整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 repo之后看到遠程分支,可以使用以下命令進行檢查:

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 commit來自svn-branch

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

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

現在我們不再需要它,因此我們可以刪除它

rm .git/info/grafts

使用圖形git包裝器檢查svn-branchmaster祖先。

現在您差不多完成了,將您的歷史記錄重新建立在主干上:

git svn rebase

現在您准備使用提交到svn repo

git svn dcommit

我創建了此過程,用於合並在這里此處找到的信息,因此,感謝各自的作者。 我修改了第一部分,因為建議的過程對我不起作用。

請注意, 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。 希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM