svnのリポジトリを全部gitに移行する

2012年12月20日

svnのリポジトリをgitで扱う方法として
svn gitというコマンドツールがある

今回はgitをリモートリポジトリにする方法は別途解説するとして

このコマンドを使用して、svnリポジトリをgitに移行してみます。

まずは、gitリポジトリをイニシャライズします。

イニシャライズ時に、リモートリポジトリにする前提で移行するので–bareオプションを付けます。
これは、my_prodディレクトリにソースを展開せずに管理情報だけを保持するリポジトリにするオプションです。
[shell]git init –bare my_prod[/shell]

svnへの参照情報をconfigファイルに設定します。

[shell]cd .git
vi config[/shell]
以下の内容を追記
[text][svn-remote "svn"]
url = http://localhost/svn/my_prod
fetch = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*[/text]

  • urlというのは、SVNリポジトリのベースになるURLですが、個々のリポジトリ名まで含んで問題ないみたい。
    このURIに/trunkとか/branchesとかをくっつけられる状態であればいいようです。
  • fetchというのは、マスターを指定する部分です。
    が、マルチマスター構成も可能で、ここは複数行書くことが出来ます。
    その際は、refs/heads/sub-musterとかをフェッチ先に指定する様にします。
  • branchesは、ブランチ配下を取り込むという指定です。
    ここの書き方としては「*」をかならず含まなければいけないようです。
    で、ブランチ名によるフィルタリングをして取り込みたいブランチだけを指定することも可能。
    branches/release_*:refs/head/branches/release_*
    という感じに。
  • tagsも同様です。

svnからリポジトリを取得

[shell]git svn fetch[/shell]
これで、http://localhost/svn/my_prodにあるtrunk、branches以下のすべて、tags以下のすべての情報がgitに取り込まれます。

このgitリポジトリをサーバとして公開すれば、svnからgitへの移行が完了となります。