Subversion_git-svnを用いたリポジトリの変換

背景

現在の職場はバージョン管理ソフトにSubversionを使用している。 gitに移行する動きもあるらしいが、しがらみが多く、進捗は芳しくないとのこと。

状況確認のために、ローカル環境でリポジトリをgitへ変換してみたが、 特殊な使い方がされており、一工夫必要だった。

その手順を記録する。

置かれた状況

「特殊な使い方」を具体的に示す。

1ソフト1リポジトリではない

(Top)¥(Category)¥(SoftwareName)¥〜 という構造になっている。

追記

どうもSubversionでは、一般的な使い方らしい。

tortoisesvn.net

ブランチがフォルダ分けされている

branches¥(Category)¥(Year)¥(FeatureName) という構造になっている。

結局やりたいこと

以下の通り。

  1. リポジトリを初期化する
  2. 設定にリポジトリの構造を反映する
  3. リポジトリ履歴を取得する

実際の手順

リポジトリの初期化

リポジトリ用のフォルダ作成後に、以下コマンドを実行。 prefixは任意だが、短い方が見やすいので、「svn」とした。

git svn init --prefix=svn/ (ソフトのURL)

設定ファイルの編集

trunkとbrunchesの情報を追加する。 branches追加の方法は以下の2通り

  1. ワイルドカードを追加する
  2. ブランチを複数追加する

編集前

[svn-remote "svn"]
        url = (ソフトのURL)
        fetch = trunk:refs/remotes/svn/trunk

編集後(ワイルドカードを使う)

[svn-remote "svn"]
        url = (TopのURL)
        fetch = trunk:refs/remotes/svn/git-svn
        branches = branches/*/*/*:refs/remotes/svn/branches/*

編集後(ブランチを複数追加する)

[svn-remote "svn"]
        url = (TopのURL)
        fetch = :refs/remotes/svn/git-svn
        branches = branches/CategoryA/2023/*:refs/remotes/svn/branches/*
        branches = branches/CategoryA/2022/*:refs/remotes/svn/branches/*
        branches = branches/CategoryB/2023/*:refs/remotes/svn/branches/*
        branches = branches/CategoryB/2022/*:refs/remotes/svn/branches/*

リポジトリ履歴を取得する

以下コマンドを実行

git svn fetch

Ctrl+Cで停止する。 上のコマンドをもう一度実行すると再開できた。

参考文献

git-scm.com 「brunches =」あたりで検索すると、良い例が出る。

以上です。