個人的によく使う svn コマンドの使い方まとめ
横浜は久しぶりの雨!こんにちは、nakamura です。
今やプログラマー、コーダーには欠かせない感のあるバージョン管理システムですが、弊社では subversion を使っています。今回はそんな subversion について、GUI も確かに便利だけどコマンドラインで使えると、作業の効率がぐっと上がりますよ!というお話しです。
サブコマンド、オプションの調べ方
svn コマンドは man ページもあるにはありますが大した情報は載っておらず、サブコマンドとして help を指定して実行すると詳細な説明が見れます。
shell > svn help
使用方法: svn <サブコマンド> [<オプション>] [<引数>]
Subversion コマンドラインクライアント, バージョン 1.6.12.
特定のサブコマンドに関するヘルプを読みたいときは 'svn help <サブコマンド>' と打ってください。
プログラムのバージョンや RA モジュールを参照するには 'svn --version' と、バージョン番号のみを参照するには 'svn --version --quiet' と、打ってください。
ほとんどのサブコマンドはファイルとディレクトリの一方または両方を引数にとり、ディレクトリでは再帰的な処理をします。このようなコマンドに引数が与えられなかった場合、デフォルトでは、カレントディレクトリで再帰的な処理をします。
利用可能なサブコマンド:
add
blame (praise, annotate, ann)
cat
changelist (cl)
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mergeinfo
mkdir
move (mv, rename, ren)
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
resolve
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
Subversion はバージョン管理用のツールです。
さらに詳しい情報は、http://subversion.tigris.org/ をご覧ください。
更に help の後に調べたいサブコマンドを指定すると、そのサブコマンドの詳細を見ることができます。
shell > svn help add
add: ファイルやディレクトリをバージョン管理下におき、それらをリポジトリに追加予定の状態とします。次回のコミットでそれらは追加されます。
使用方法: add <パス>...
有効なオプション:
--targets <ARG> : ファイル <ARG> の内容をサブコマンドの引数に追加 して渡します
-N [--non-recursive] : 廃止予定です。--depth=files または --depth=immediates を使用してください
--depth <ARG> : 操作の対象を深さ <ARG> ('empty'、'files'、'immediates'、'infinity' のいずれか) に限定します
-q [--quiet] : 何も表示しないか、要約情報のみを表示します
--force : 強制的に処理を実行します
--no-ignore : デフォルトや svn:ignore 属性が無視するような項目を無視しません
--auto-props : 自動的な属性設定を有効にします
--no-auto-props : 自動的な属性設定を無効にします
--parents : 途中の親ディレクトリを追加します
グローバルオプション:
--username <ARG> : ユーザ名を <ARG> と指定します
--password <ARG> : パスワードを <ARG> と指定します
--no-auth-cache : 認証情報をキャッシュしません
--non-interactive : 対話式の認証用プロンプト表示をしません
--trust-server-cert : accept unknown SSL server certificates without prompting (but only with '--non-interactive')
--config-dir <ARG> : ディレクトリ <ARG> からユーザ設定ファイルを読み込みます
--config-option <ARG> : set user configuration option in the format: FILE:SECTION:OPTION=[VALUE]
For example: servers:global:http-library=serf
実際のコマンド使用例
ではでは、個人的によく使う svn コマンドの使用例です。勝手に分類してご紹介します。
作業コピー操作系
作業コピーのチェックアウト。
svn co http://example.com/subversion/repository/trunk /var/www/working_copy
作業コピーの更新。
svn up /var/www/working_copy
ファイルの追加。--parents オプションを付けるとファイルまでのディレクトリで追加されていないものがあれば一緒に追加してくれます。
svn add --parents /var/www/working_copy/htdocs/index.html
変更点のチェックイン(コミット)。-m オプションはコミット時のコメントを指定するのに使います。
svn ci -m "index.html を追加。" /var/www/working_copy/htdocs/index.html
作業コピー上での変更を取り消す。
svn revert /var/www/working_copy/htdocs/index.html
作業コピーのクリーンアップ。
svn cleanup /var/www/working_copy
作業コピーの切り替え。
svn sw http://example.com/subversion/repository/branches/20100908 /var/www/working_copy
--relocate オプションで別リポジトリへの切り替えが可能です。(リポジトリの移行時など)
svn sw --relocate http://old.example.com/subversion/repository/trunk http://new.example.com/subversion/repository/trunk /var/www/working_copy
リポジトリ操作系
trunk をコピーして新しい branch を作成。
svn cp -m "2010/09 作業分の branch 作成。" http://example.com/subversion/repository/trunk http://example.com/subversion/repository/branches/201009
trunk を branch に移動。
svn mv -m "2010/09 時点での trunk を branch に移動。" http://example.com/subversion/repository/trunk http://example.com/subversion/repository/branches/201009
古い branch を削除。
svn rm -m "一年前の branch を削除。" http://example.com/subversion/repository/branches/200909
情報参照系
作業コピーの情報を確認。
svn info /var/www/working_copy
変更履歴を表示。
svn log /var/www/working_copy/htdocs/index.html
リポジトリと差分のあるファイル一覧を表示。
svn stat -u /var/www/working_copy/
リポジトリとの差分を表示。
svn di /var/www/working_copy/htdocs/index.html
-r オプションで指定したリビジョンとの差分を見れます。
svn di -r 10 /var/www/working_copy/htdocs/index.html
svn:mergeinfo や svn:ignore などの属性情報を表示。
svn pl -v /var/www/working_copy
branch から trunk の作業コピーにマージ系
リビジョンを指定してマージ。
svn merge -c 10,12,18 http://example.com/subversion/repository/branches/201009 /var/www/working_copy
-r でリビジョン範囲を指定できます。
svn merge -r 10:18 http://example.com/subversion/repository/branches/201009 /var/www/working_copy
適用されていない変更点を全てマージ。
svn merge --reintegrate http://example.com/subversion/repository/branches/201009 /var/www/working_copy
ちなみに --dry-run オプションでマージ対象のファイルの一覧が見れます。
svn merge --dry-run --reintegrate http://example.com/subversion/repository/branches/201009 /var/www/working_copy
終わりに
ざっくりとよく使う svn コマンドの使用例を挙げてみました。他にもサブコマンド、オプションはたくさんあるので svn help で確認しながら使ってみてください。