本文主要總結了svn
遷移到git
的步驟。
下載遷移工具subgit
subgit
是一個基于java開發的svn2git商業遷移工具,夸平臺,其import功能
(一次性把代碼從svn
遷移到git
)是免費的,其他功能(主要是各種mirror功能)則是收費的。
遷移前的準備工作
由于svn
用戶格式(只有用戶名)與git
用戶格式(由用戶名和用戶郵箱組成)是不一樣的,需要創建一個用戶映射文件authors.txt
,以在遷移記錄時進行轉換。authors.txt
的內容格式如下:
york = york <york@example.com>
kiii = kitty <kitty@example.com>
如何快速獲得
svn
倉庫里曾經提交過記錄的的用戶呢?可通過以下命令行獲得:cd path/to/svn_repo svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq
或者直接從遠程倉庫獲得:
svn log --quiet http://path/to/root/of/project | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq
開始遷移
- 使用subgit的import功能,一次性把代碼從svn遷移到git
cd svn2git_workspace
path/to/subgit-3.2.2/bin/subgit import --non-interactive --default-domain YOUR_DOMAIN --authors-file path/to/authors.txt --trunk trunk --tags tags --branches branches --username SVN_USERNAME --password SVN_PASSWORD --svn-url http://svn.example.com/path/to/repo repo.git
如果遷移過程中遇到錯誤導致中斷,執行
subgit import repo.git
進行恢復
- 克隆一個裸庫,去掉無用的svn信息
git clone --bare repo.git repo-clone.git
- 推送代碼到git遠程倉庫
cd repo-clone.git
git remote add gitlab http://gitlab.example.com/path/to/repo.git
- 推送需要的分支到遠程參考
//推送所有本地分支到遠程倉庫
git push gitlab --all
//或者
//推送指定分支
git push gitlab master:master
git push gitlab v1.3.0:develop
- 推送所有本地tag到遠程倉庫
git push gitlab --tags