Subversion

よく使うオプション付き Subversion コマンド (入門者向け)

-m [--message]

svn commit -m[--message] <メッセージ>

コミットと同時にコミットメッセージを送れる。いつも使う。
関係無いけど、コミット前には svn statussvn diff をして、コミットされる内容が自分の意図通りかちゃんと確認しましょう。

-l [--limit] / -v [--verbose]

svn log -l[--limit] <数字> -v[--verbose]

-l オプションで指定した個数分だけ直近のログが表示される。
-v オプションを付けると変更のあったファイルが表示される。
具体的には svn log -l 5 -v などとして使う。

-r [--revision]

svn log -r[--revision] ARG1:ARG2

-r オプションはあらゆる svn コマンドで使用できて、ARG1 < ARG2 で使うことが多いが、
svn log の場合、ARG1 < ARG2 で使うと -r オプションを使わなかった時と上下が反転してしまう。
ARG には日付などいくつか指定できる種類が有るが、私が主に使うのはリビジョン番号と 'HEAD' 。
具体的には svn log -r HEAD:500 などとして使う。(ただしHEADは501以降と仮定)
もちろん -v オプションなどと併用可。

svn diff -r[--revision] ARG1:ARG2

svn log 同様。
ARG1 が旧、ARG2 が新として扱われるので、入れ替えると + と - が入れ替わる。

svn merge -r ARG1:ARG2 <ソースブランチ> <ターゲットブランチ>

マージするときはターゲットブランチに移動して svn merge <ソースブランチ> するのが楽。
リビジョンを指定しなかった場合、ARG1 はそのブランチが作られたリビジョン、ARG2 は HEAD で指定したのと同等。
基本的に指定しなくて良いと思うが、ARG1 はそのブランチが作られたリビジョン、ARG2 にそのブランチが最終更新されたリビジョンを指定しておくと、作業したリビジョン番号を振り返りやすくて良くない?むしろマージされたリビジョン番号を mergeinfo に残しておきたい?一理ある。

ARG1 > ARG2 のリビジョン番号の指定をすると逆マージ( git revert に相当?)という過去のリビジョンに戻す操作をできる。
例えば svn merge -r 1000:995 . とするとカレントディレクトリに加えられた 996, 997, 998, 999, 1000 のコミットの変更箇所を元に戻せる。内部的にどのような処理になっているのかは知らないが、リバースパッチのようなもの、 svn diff -r 1000:995 > パッチファイル でパッチを作って svn patch パッチファイル をやっているようなものじゃないかと思ってるので、あまり過信しすぎるのも怖い…かも?

-c [--change]

svn diff -c[--change] <リビジョン番号>
svn log -c[--change] <リビジョン番号>
svn merge -c[--change] <リビジョン番号>

-r オプションだとリビジョン番号を範囲で指定するが、 -c はリビジョン番号を一つだけ指定する。
svn log -c 1000svn log -r 1000:1000 と同等。
svn diff -c 1000svn diff -r 999:1000 と同等。
svn merge -c 1000svn merge -r 999:1000 と同等。
特に diff はこのコミットの変更だけ見たいという状況はよくあると思う。そういうときに使う。
また、負の数も指定できる。
svn diff -c -1000svn diff -r 1000:999 と同等。
svn merge -c -1000svn merge -r 1000:999 と同等。
そのため、 diff は正の値を指定した時と +- が逆に、 merge は負の値を指定した場合逆マージになる。
個人的には(会社のルールに従ってください)逆マージを行いたいときは -r オプションを使わず、 -c オプションを使うことを勧めたい。
コミットするときにワンステップごとに変更したので戻すときもワンステップごとに。一つづつ戻したほうが、何を戻したのがわかりやすいと思う。リビジョンが増えることは大した問題じゃ無いと思う。