![](/img/trans.png)
[英]SVN-to-git: How can I preserve history for files moved in SVN repo when migrating to git?
[英]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 commit
和svn
分支的哈希:
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-branch
是master
祖先。
現在您差不多完成了,將您的歷史記錄重新建立在主干上:
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.