面倒くさいsvnリポジトリをgit-svnで扱う時に役立ちそうなオプション一覧

最近は分散バージョン管理が主流になり、githgを使う事が増えてきたと思う。

ただ、政治的な事情でsvnを使わなければならない事もあります。

そんな時に役立ちそうなgit-svnのオプションを備忘録として一覧にしておきます。

標準ディレクトリ構成のリポジトリ

svnの標準的なディレクトリ構成の場合は一番楽。

./trunk/src
./branches/v1.x/src
./tags/v1.0.0/src

使うコマンド

この場合、オプションに -s(もしくは--stdlayout)を使用する。

$ git svn clone -s <svnのURL>

非標準ディレクトリ構成のリポジトリ

色々な事情により、標準的なディレクトリ名を使っていない場合。(複数プロジェクトは後述)

./dev/src
./support/v1.x/src
./release/v1.0.0/src

使うコマンド

この場合、-T/-t/-b(もしくは--trunk/--tags/--branches)を使用する。

$ git clone -T dev -t release -b support <svnのURL>

長寿リポジトリ

長期間使われているリポジトリはコミット履歴が膨大で、git-svn cloneがなかなか終らない。

この場合、最新のrevだけを取得することで高速化できる。

使うコマンド

$ git svn clone -r HEAD https://github.com/sinsoku/gitsvn_commits

もちろん、特定のリビジョンやリビジョン範囲を指定する事も可能。

特定のリビジョン

$ git svn clone -r 180 https://github.com/sinsoku/gitsvn_commits

リビジョン範囲

$ git svn clone -r 180:HEAD https://github.com/sinsoku/gitsvn_commits

複数プロジェクトのリポジトリ

色々な事情により、1つのsvnリポジトリに複数のプロジェクトを詰め込む場合がある。

./project_A/trunk/src
./project_A/branches/v1.x
./project_A/tags/v1.0.0
./project_B/trunk/src
./project_B/branches/v2.x
./project_B/tags/v2.0.0

使うコマンド

gitのオプションではないけど、URLの指定を下記のようにすると特定のディレクトリを対象にできます。

githubを使っているため、少し分かりづらいですが、trunk/project_A の部分はディレクトリ名です。

$ git svn clone -s https://github.com/sinsoku/gitsvn_projects/trunk/project_A

不要ファイル混入リポジトリ

色々な事情により、svnリポジトリに不要なディレクトリがコミットされる場合がある。

./trunk/src
./trunk/test
./trunk/backup/バックアップ_20140226.zip

「なぜsvnにバックアップファイルがコミットされているのか?」とか考えてはいけない。そんな時もある。

使うコマンド

この場合、--ignore-pathsオプションで不要なディレクトリを正規表現で指定する。

$ git svn clone -s --ignore-paths="^trunk/backup" https://github.com/sinsoku/gitsvn_backup

補足

ちなみに、githubsubversionになぜか対応している。

コマンド例に記載されているURLは、記事を書いていた時に実験に使ったgithubリポジトリです。