以下は、gitをCUIのみで使っている筆者がsvnを使わないといけなくて、かつCUIのみで使いたいときに、gitとの比較の観点でsvn
コマンドの使い方を調べたメモです。
参考
# チェックアウト# (カレントディレクトリに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
# カレントディレクトリの詳細情報を表示svn info# 作業用ディレクトリ特定のパスを指定して詳細情報を表示svn info foo/bar
# リポジトリのルートを指定してログを表示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
# カレントディレクトリの最後のコミットと作業用ディレクトリとの差分を表示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
# カレントディレクトリのファイル一覧を表示# (まだ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
# ファイルをステージングに登録# git add newhoge.txt に相当svn add newhoge.txt# ディレクトリをステージングに登録# ディレクトリの中も再帰的に登録# git add newhogedir に相当svn add newhogedir
# ファイル削除をステージングに登録# git rm hoge.txt に相当# ディレクトリに対しても同じコマンドで可能svn delete hoge.txt
# コミット# 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
# まだコミットしていない編集済みのファイルを元に戻す# git checkout foo/bar.txt に相当svn revert foo/bar.txt
# 更新を取り込む# git pull に相当(?)# カレントディレクトリ配下のみをとり込むので、# 作業ディレクトリのルートより下で実行すると# カレントディレクトリは以下とそれより上のディレクトリとで# リビジョンがずれるsvn update# ディレクトリを指定して更新を取り込むsvn update ../hogedir
update
前に手動でファイルをいじっていても、結果的にupdate
後と同じ状態にしてあれば、svn update
は成功する。
svn copy svn://id@host/path/to/svnroot/trunk svn://id@host/path/to/svnroot/branches/hoge -m "hogehoge message"
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"
# git checkout hoge に相当svn switch svn://id@host/path/to/svnroot/branches/hoge
# hogeブランチをtrunkにマージ。現在の作業ディレクトリがtrunkだとして# hogeブランチを作ったリビジョンが99だとしてsvn merge -r 99:HEAD svn://id@host/path/to/svnroot/branches/hogesvn commit -m "hogehoge message"
マージしたあとのコミットはなぜかsvn update
しなくてもローカルのリビジョン番号が上がる。
# カレントディレクトリをレポジトリにする# git init --bare . に相当svnadmin create .