我有一個已有的歷史悠久的git倉庫。出於商業原因,我必須將該存儲庫鏡像到svn服務器。我嘗試了幾種方法,但迄今一直失敗。我該如何推送一個git歷史到svn
2
A
回答
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 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
檢查那svn-branch
是master
的祖先。
現在你幾乎已經完成,重訂主幹頂部的歷史:
git svn rebase
現在你準備承諾使用
git svn dcommit
你svn
回購我創建這個程序合併相關信息我發現here和here,所以感謝各自的作者。我修改了第一部分,因爲建議的程序不適合我。
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這種方式。希望有所幫助。
相關問題
- 1. Git svn clone:如何推遲修訂歷史記錄的提取
- 2. 奇怪的git-svn歷史 - 我該如何解決這個問題?
- 3. 如何推送到git-svn回購?
- 4. 的Git - Github上推歷史
- 5. 如何徹底抹去歷史上的git推送?
- 6. 如何將我的git svn配置文件推送到另一個存儲庫?
- 7. 推送本地git提交歷史到原始分支
- 8. 如何從git-svn遷移到gitolite並保留歷史記錄
- 9. 如何追加一個git歷史到另一個?
- 10. 定期推送bash歷史到github
- 11. 如何在保持歷史的同時將git repo推送到現有的SVN回購?
- 12. 的Git,SVN - 進口全部歷史
- 13. SVN歷史在git中丟失
- 14. 如何清理我的Git歷史
- 15. 推送代碼到SVN和GIT
- 16. git:與SVN同步並推送到另一個遠程
- 17. Force推動了Git的歷史
- 18. git推(或拉)隨着本地歷史
- 19. 如果GIT比較年輕,我該如何向GIT添加顛覆歷史?
- 20. 櫻桃採摘到svn的(或者,如何保持一個項目歷史Git中並釋放在SVN)
- 21. 我如何創建一個歷史圖
- 22. SVN副本歷史
- 23. 如何git svn獲取較舊的歷史記錄?
- 24. 如何從git提交中刪除文件以推送到svn
- 25. git-svn重命名保存SVN歷史嗎?
- 26. 添加從SVN項目舊的歷史與GIT SVN
- 27. git - 恢復刪除svn分支而無需重讀svn歷史
- 28. 如何清理git歷史記錄刪除某些提交後被推送?
- 29. 從SVN遷移到有大歷史的Git
- 30. 將SVN歷史遷移到某些文件的GIT