Subversion 超入門(1)
Subversion はEclpseやVisualStudioのプラグインとかクライアントとかで直感的に何となく使えちゃうんだけど、「何となく」使っちゃってる人向けに、概要を簡単にまとめる。まぁここを読めばよいのだが、手っ取り早く。
基本的な使い方
基本的な利用方法の概要
まず、各種ツールはインストールされているとする。
svnadmin create
サーバーに、ディレクトリ(OSのファイルシステム)とリポジトリ(OSのディレクトリ内に作成される一連のファイル群をまとめた概念)を作成。
リポジトリは、すべての変更を記録する、単に仮想的にバージョンかされたファイルシステム。
- # svnadmin create /var/www/svn/myrepo
- # chown -R apache:apache myrepo
svn import
ローカルのプロジェクト(バージョン管理対象としたいフォルダ)をサーバーのリポジトリにインポートする。
これで、サーバーのリポジトリに登録され、リビジョンが振られる。
リビジョンはリポジトリのスナップショット番号で、コミットのたびに1つずつ大きくなる。
以下の様な、キーワードで識別される
HEAD リビジョン ・・・ リポジトリにある最新のリビジョンのこと
BASE リビジョン ・・・ 作業コピーにある、「修正元」となるリビジョンのこと
COMMITED ・・・ ファイル、ディレクトリが変更された BASE 以前の最後のリビジョン
PREV ・・・ 変更があった最後のリビジョンの直前のリビジョン
- c:\work>tree /f myproject
- フォルダー パスの一覧
- ボリューム シリアル番号は 00000002 F2F7:41B7 です
- C:\WORK\MYPROJECT
- ├─branches
- ├─tags
- └─trunk
- Bar.java
- Foo.java
- c:\work>svn import ./myproject http://192.168.24.14/svn/myrepo/ --username piroto --password north123
- -- この行以下は無視されます --
- A myproject
- ログメッセージの変更や指定がなされていません
- 中断 (a), 続行 (c), 編集 (e):
- c
- 追加しています myproject\trunk
- 追加しています myproject\trunk\Foo.java
- 追加しています myproject\trunk\Bar.java
- 追加しています myproject\branches
- 追加しています myproject\tags
- リビジョン 1 をコミットしました。
取り込んだ myproject を削除してみる
- c:\work>rmdir /s myproject
svn checkout
myproject/trunk 以下を作業コピーとして取得。バージョン管理下に置かれる
- c:\work>svn checkout http://192.168.24.14/svn/myrepo/trunk myproject
- A myproject\Foo.java
- A myproject\Bar.java
- リビジョン 1 をチェックアウトしました。
svn status
コミットする前に、自分が何をしたのかみておく。
A ・・・ 追加予告
C ・・・ 衝突の常態
D ・・・ 削除予告
M ・・・ 修正されている
R ・・・ 内容置き換え準備
? ・・・ バージョン管理下にない
以下の変更をおこなってみる
- Foo.java を編集
- Hoge.java を追加
- c:\work\myproject>svn status
- ? Hoge.java
- M Foo.java
svn add
作業コピーに追加したファイルを、バージョン管理下へ置くことを予約する(commitで反映される)
作業コピーの構成を変える場合、svn copy、svn move、svn delete コマンドを使うこと。
- c:\work\myproject>svn add Hoge.java
- A Hoge.java
svn diff
- c:\work\myproject>svn diff
- Index: Hoge.java
- ===================================================================
- --- Hoge.java (リビジョン 0)
- +++ Hoge.java (リビジョン 0)
- @@ -0,0 +1,4 @@
- +public class Hoge {
- + public static void main(String[] args) {
- + }
- +}
- \ No newline at end of file
- Index: Foo.java
- ===================================================================
- --- Foo.java (リビジョン 1)
- +++ Foo.java (作業コピー)
- @@ -1,4 +1,5 @@
- public class Foo {
- public static void main(String[] args) {
- + System.out.println("Foo!");
- }
- }
- \ No newline at end of file
svn commit
リポジトリに自分のファイルの新しいバージョンをコミット
- c:\work\myproject>svn commit
- -- この行以下は無視されます --
- A Hoge.java
- M Foo.java
- ログメッセージの変更や指定がなされていません
- 中断 (a), 続行 (c), 編集 (e):
- c
- 送信しています Foo.java
- 追加しています Hoge.java
- ファイルのデータを送信しています ..
- リビジョン 2 をコミットしました。
svn update
リポジトリの最新状態で作業コピーを更新する。
他のユーザと編集箇所の競合がある場合。
- c:\work\myproject>svn update
- 'Bar.java' で競合が見つかりました。
- 選択: 延期 (p), 全差分 (df), 編集 (e),
- 衝突自分 (mc), 衝突他人 (tc),
- , すべてのオプションを表示 (s): e
- public class Bar {
- public static void main(String[] args) {
- <<<<<<< .mine
- System.out.println("Bar!");
- =======
- System.out.println("Bar2");
- >>>>>>> .r3
- }
- }選択: 延期 (p), 全差分 (df), 編集 (e), 解決版 (r),
- 衝突自分 (mc), 衝突他人 (tc),
今日はここまで。