Subversion (svn) 2013/12/29
以下は、gitをCUIのみで使っている筆者がsvnを使わないといけなくて、かつCUIのみで使いたいときに、gitとの比較の観点でsvn
コマンドの使い方を調べたメモです。
gitとの違い 2013/06/11
- ブランチやタグは branches や tags の中の普通のディレクトリとしてコピーして作る (branches や tags といったディレクトリ名は単なる習慣でsvnの仕様ではない)
- clone, push, pull がない
参考
- SVN脳患者から見たGit | Qiita http://qiita.com/kaityo256/items/81e7951a1ca2706955a4
スポンサーリンク
チェックアウト 2013/06/11
# チェックアウト
# (カレントディレクトリにtrunkというディレクトリが作成される)
svn checkout svn://id@host/path/to/svnroot/trunk
# カレントディレクトリにチェックアウト
svn checkout svn://id@host/path/to/svnroot/trunk .
# 作成されるディレクトリの名前を指定してチェックアウト
# (カレントディレクトリにhogeというディレクトリが作成される)
svn checkout svn://id@host/path/to/svnroot/trunk hoge
詳細情報表示 2013/06/11
# カレントディレクトリの詳細情報を表示
svn info
# 作業用ディレクトリ特定のパスを指定して詳細情報を表示
svn info foo/bar
ログ表示 2013/06/11
# リポジトリのルートを指定してログを表示
svn log svn://id@host/path/to/svnroot
# リポジトリの特定のパスを指定してログを表示
# ファイルでもディレクトリでも可能
svn log svn://id@host/path/to/svnroot/trunk/foo/bar
# リポジトリの特定のリビジョンを指定してログを表示
svn log svn://id@host/path/to/svnroot/trunk/foo/bar@r999
# リポジトリの特定のリビジョンを指定してログを表示
svn log svn://id@host/path/to/svnroot@r999
# カレントディレクトリのログを表示
svn log
# 作業用ディレクトリの特定のパスを指定してログを表示
svn log foo/bar
差分表示 2013/06/25
# カレントディレクトリの最後のコミットと作業用ディレクトリとの差分を表示
svn diff
# カレントディレクトリについてのリビジョン間の差分を表示
svn diff -r r998:r999
# 差分のファイル名のみを表示
svn diff --summarize -r r998:r999
# 作業用ディレクトリの特定のパスについてのリビジョン間の差分を表示
svn diff -r r998:r999 foo/bar
# リポジトリの特定のパスとリビジョンを指定して差分を表示
svn diff svn://id@host/path/to/svnroot/trunk@r998 svn://id@host/path/to/svnroot/tags/hoge@r999
ファイル一覧表示 2013/06/14
# カレントディレクトリのファイル一覧を表示
# (まだaddしていないファイルがあれば、それは表示されない。
# まだrmしていない削除済みファイルは表示される)
svn ls
# ファイル一覧を詳細に表示 (ls -l みたいな)
svn ls -v
# ファイル一覧をサブディレクトリも再帰的に表示 (find みたいな)
svn ls -R
# 作業用ディレクトリ特定のパスを指定してファイル一覧を表示
svn ls foo/bar
# リポジトリの特定のパスを指定してファイル一覧を表示
svn ls svn://id@host/path/to/svnroot/trunk/foo/bar
新規作成ファイルの登録 2013/07/02
# ファイルをステージングに登録
# git add newhoge.txt に相当
svn add newhoge.txt
# ディレクトリをステージングに登録
# ディレクトリの中も再帰的に登録
# git add newhogedir に相当
svn add newhogedir
既存ファイルの削除 2013/12/19
# ファイル削除をステージングに登録
# git rm hoge.txt に相当
# ディレクトリに対しても同じコマンドで可能
svn delete hoge.txt
コミット 2013/07/02
# コミット
# git commit && git push に相当(?)
# svn update しないと、svn log したときの結果には反映されない
# コミットメッセージを入力するエディタが開く
svn commit && svn update
# コミットメッセージを指定してコミット
# git commit -m "hogehoge message" && git push に相当(?)
svn commit -m "hogehoge message" && svn update
編集取り消し 2013/06/18
# まだコミットしていない編集済みのファイルを元に戻す
# git checkout foo/bar.txt に相当
svn revert foo/bar.txt
更新を取り込むには 2013/09/18
# 更新を取り込む
# git pull に相当(?)
# カレントディレクトリ配下のみをとり込むので、
# 作業ディレクトリのルートより下で実行すると
# カレントディレクトリは以下とそれより上のディレクトリとで
# リビジョンがずれる
svn update
# ディレクトリを指定して更新を取り込む
svn update ../hogedir
update
前に手動でファイルをいじっていても、結果的にupdate
後と同じ状態にしてあれば、svn update
は成功する。
ブランチの作成 2013/07/11
svn copy svn://id@host/path/to/svnroot/trunk svn://id@host/path/to/svnroot/branches/hoge -m "hogehoge message"
タグの設定 2013/07/11
svn copy svn://id@host/path/to/svnroot/trunk svn://id@host/path/to/svnroot/tags/hoge -m "hogehoge message"
または、ローカルにtrunk, tagsディレクトリの存在する作業ディレクトリがあれば
# trunkに対してタグを設定する
# trunk, tagsディレクトリの存在する作業ディレクトリにて
svn copy trunk tags/hogehoge && svn commit -m "commit message"
作業ディレクトリを特定のブランチに切り替え 2013/08/31
# git checkout hoge に相当
svn switch svn://id@host/path/to/svnroot/branches/hoge
マージ 2013/07/12
# hogeブランチをtrunkにマージ。現在の作業ディレクトリがtrunkだとして
# hogeブランチを作ったリビジョンが99だとして
svn merge -r 99:HEAD svn://id@host/path/to/svnroot/branches/hoge
svn commit -m "hogehoge message"
マージしたあとのコミットはなぜか svn update
しなくてもローカルのリビジョン番号が上がる。
レポジトリ作成 2013/07/02
# カレントディレクトリをレポジトリにする
# git init --bare . に相当
svnadmin create .