面倒くさいsvnリポジトリをgit-svnで扱う時に役立ちそうなオプション一覧
最近は分散バージョン管理が主流になり、git
やhg
を使う事が増えてきたと思う。
ただ、政治的な事情で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
補足
ちなみに、githubはsubversionになぜか対応している。