Subversion 必要最低限のコマンドたち

リポジトリの作成

mkdir /home/hoge/svn-repos
svnadmin create /home/hoge/svn-repos

svnserveによるリポジトリの公開

svnserve --daemon --root /home/hoge/svn-repos

リポジトリへのインポート

server という名前のサーバに既存の sesame プロジェクトをインポート

cd sesame
svn import -m "initial import" svn://server/sesame/trunk
svn mkdir -m "create tags directory" svn://server/sesame/tags
svn mkdir -m "create branches directory" svn://server/sesame/branches

チェックアウト

sesame の trunk をチェックアウトして作業コピーをローカルに取得

svn co svn://server/sesame/trunk sesame


リビジョン(リビジョン6の例)を指定してチェックアウト

svn co -r 6 svn://server/sesame/trunk old-sesame


作業コピーの情報確認

svn info sesame

コミット

cd sesame
svn commit -m "Fixed XX bug"

作業コピーの更新

ローカルの作業コピーを最新のリポジトリの内容で更新

cd sesame
svn update

update 結果の記号の意味

処理内容 意味
A 追加された
D 削除された
U 更新された
C 競合している
G マージされた

Cについては競合の解消が必要

差分確認

最後に取得したリポジトリのバージョンと現在の作業コピーのバージョンとの差分

svn diff Customer.java


リポジトリにコミットされた最新版と、現在の作業コピーとの差分

svn diff -r HEAD Customer.java


バージョン間(リビジョン10と12)での差分確認

svn diff -r10:12 Customer.java

競合の解消

作業コピーの内容をリポジトリの内容で更新

svn revert Customer.java
svn update Customer.java


リポジトリの内容を作業コピーの内容で更新

cp Customer.java.mine Customer.java
svn resolved Customer.java

競合発生時にはローカルのファイルが.mineや.r1などの拡張子で保存される。このファイルで更新して競合を解消

または Customer.java を編集して

svn resolved Customer.java


通常の流れでは、svn update で競合を確認→競合の解消→svn commit とする。

ログの確認

コミットログの確認は

svn log Customer.java


リビジョン指定は

svn log -r 10:12 Customer.java

変更の取り消し

昔のリビジョンに戻すには

svn merge -r 27:26 Customer.java
svn commit -m "Revert deleteAll change from r27"

リビジョン27で加えられた変更分をリビジョン26の状態に戻している
一括での復帰は以下のように行える

svn merge -r 27:26 .

ファイルの追加と削除

svn add Customer.java
svn delete Customer.java 

ディレクトリについても同様

ファイルのコピーと移動

ファイルのコピーや移動はsvnコマンドで行うことで、変更を追従できる。

svn copy Customer.java SpecialCustomer.java
svn commit -m "Create SpecialCustomer"
svn move Customer.java SpecialCustomer.java
svn commit -m "Rename Customer to SpecialCustomer"

ディレクトリについても同様の操作が可能

ステータスの確認

svn status

1列目の記号の意味

処理内容 意味
A 追加されている
D 削除されている
C 競合している
I 無視されている
M 変更されている
R 置き換えられている
X バージョン管理対象外だが、外部定義で使用されている
? バージョン管理外
! 消失している(svnコマンドを使用せずに削除された)
~ バージョン管理下にあったファイルがことなるアイテムにより妨害された