因為最近工作需要,將幾個現存的 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, 可以免費使用。

img

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

img

修改配置文件

修改 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

img

將 .git push 到遠端 bitbucket git repository

$ cd /Users/larrysu/repos/temp-repo
$ git push --mirror git@bitbucket.org:xxxx/your-git-repo.git