遷移 SVN 源碼庫到 git
因為最近工作需要,將幾個現存的 SVN repository 遷移到了 bitbucket 上。使用了好用的 subgit 這套工具,在這裏紀錄一下過程。
現存的幾個 SVN repository, 文件結構沒有 trunk
, branches
, tags
等資料夾,不是 subversion standard layout 的形式。
因此不能直接使用 subgit import ...
的一個指令簡單方式。而需要使用如下步驟:
- subgit configure …
- 修改配置文件 ../subgit/config
- 修改作者對應文件
- subgit install …
- git push 到對應的 repository
1. 下載安裝 subgit 工具
開始之前,請先到 subgit 下載這個工具,如果是要一次性轉換 SVN 到 git, 可以免費使用。
subgit 需要使用 java 運行,因此請先安裝好 JRE。
準備從 SVN 導出需要的設定
# 先建立接下來工作用的資料夾
$ mkdir -p /Users/larrysu/repos/temp-repo/.git
# 然後建立 subgit 需要的配置文件, 這裡指明了 svn 的 url 路徑,但是還不會去連線
# 參數: --layout directory 是因為現存的 subversion repository 不是 standard layout
$ ./bin/subgit configure \
--layout directory \
http://your.svn.url.com/svn/your_project /Users/larrysu/repos/temp-repo/.git
修改配置文件
修改 defaultDomain, 讓 svn 中 commit 的作者名 (svnuser),轉換成 git commit 紀錄的 作者郵箱地址: svnuser@your.default.com,
也可以自己手動整理所有的作者對應表: authors.txt
$ vim /Users/larrysu/repos/temp-repo/.git/subgit/config
# 修改下面幾行:
defaultDomain = your.default.com
...
[auth "default"]
userName = your_svn_username
password = your_svn_password
# 如果要自己手動整理所有的作者對應表:
$ vim /Users/larrysu/repos/temp-repo/.git/subgit/authors.txt
開始將 svn 紀錄導入到 .git
$ ./bin/subgit install /Users/larrysu/repos/temp-repo/.git
將 .git push 到遠端 bitbucket git repository
$ cd /Users/larrysu/repos/temp-repo
$ git push --mirror git@bitbucket.org:xxxx/your-git-repo.git