Subversionの基礎練習

結城浩

バージョン管理ツールSubversionの基礎練習です。 Windows XPのコマンドプロンプトでSubversionの基本的なコマンドを動かしていきます。 Subversionを学び始めるきっかけにどうぞ。

目次

はじめに

Windows XPのコマンドプロンプトで、 バージョン管理ツールSubversionの基本的なコマンドを動かしてみましょう。

この文書の通りに実行すると、 基本的なSubversionのコマンドをひととおり試すことができます(できるはずです)。

バージョン管理というものやSubversionについての解説は省き、 オペレーションだけを示します。

ダウンロードとインストール

Subversion (subversion.tigris.org)Downloadsのページから、 Windows NT, 2000, XP and 2003 を探し、そこに書いてある文章、

The same command-line binaries and libraries, but packaged within a friendly Installer program, are in the same directory of the file-sharing area, but end with "-setup.exe".

the same directoryというリンクをたどります。 ファイルの一覧が出るので、新しいものを選んでダウンロードします。

結城が以下で使ったファイルは、 svn-1.4.5-setup.exe です。

ダウンロードしたファイルを動かすとインストールが始まります。 インストール先はデフォルトのまま、 C:\Program Files\Subversion としました。

追記: 2008-11-04 Windows版のダウンロードURLは http://subversion.tigris.org/getting.html#windows に変更になったようです。

リポジトリ用のディレクトリを作ります

リポジトリ用のディレクトリC:\home\reposを作ります。

C:\> mkdir C:\home

C:\> mkdir C:\home\repos

リポジトリを初期化します

はじめにリポジトリを初期化します。 この初期化は、そのリポジトリを使う最初だけ行います。

C:\> svnadmin create C:\home\repos

新しいモジュールを作ってインポートします

新しいモジュールをリポジトリにインポートします。

ディレクトリとファイルを作成します

まずは作業場所を整え、readme.txtというファイルを作ります。

C:\> mkdir work

C:\> cd work

C:\work> mkdir myproject

C:\work> cd myproject

C:\work\myproject> echo This is readme file. > readme.txt      ※readme.txtを作った

C:\work\myproject> type readme.txt        ※内容の確認
This is readme file.

カレントディレクトリ以下を新しいモジュールmyprojectとしてリポジトリにインポートします

インポートするリポジトリは、file:///C:/home/repos/myprojectのようにURLで指定することに注意しましょう。

C:\work\myproject> svn import file:///C:/home/repos/myproject -m "Initial import."
追加しています              readme.txt

リビジョン 1 をコミットしました。

練習なので作業場所を削除します

C:\work\myproject> cd ..

C:\work> del myproject
C:\work\myproject\*、よろしいですか (Y/N)? y

C:\work> rmdir myproject

ここまでで、myprojectディレクトリの内容はなくなりましたが、 リポジトリにはmyprojectというモジュールがすでに登録されています。

チェックアウトして作業開始

myprojectモジュールをチェックアウトしよう

C:\work> svn checkout file:///C:/home/repos/myproject myproject
A  myproject\readme.txt
リビジョン 1 をチェックアウトしました。

C:\work> cd myproject

C:\work\myproject> dir /b
readme.txt

C:\work\myproject> type readme.txt
This is readme file.

確かにreadme.txtが取り出せています。

実は、ここには管理用のディレクトリ .svn も隠し属性付きで作られています。

C:\work\myproject> dir /b/a       ※/aオプションで全部見る
.svn                            ※管理用のディレクトリ
readme.txt

差分を確認します

readme.txtファイルに一行追加してから、 「元にしたリビジョン(リビジョン1)」と「作業コピー」との差分を確認してみましょう。

C:\work\myproject> echo Nice to meet you. >> readme.txt

C:\work\myproject> type readme.txt
This is readme file.
Nice to meet you.

C:\work\myproject> svn diff               ※差分を見てみよう
Index: readme.txt
===================================================================
--- readme.txt  (リビジョン 1)
+++ readme.txt  (作業コピー)
@@ -1 +1,2 @@
 This is readme file.
+Nice to meet you.

コミットすると編集結果がリポジトリに反映されます

作業コピーに加えた修正は、コミットしてはじめてリポジトリに反映されます。 コミットするときには、-mオプションで修正内容を書きます。

C:\work\myproject> svn commit -m "Add a greeting."
送信しています              readme.txt
ファイルのデータを送信しています .
リビジョン 2 をコミットしました。

新しいファイルを追加します

作業コピーの状態を確かめます

C:\work\myproject> svn status

何も表示されないので、コミットし忘れているファイルはありません。 自分が作業コピーに加えた修正は、リポジトリに反映されています。

リポジトリの修正を取り込みます(ここでは何も起きません)

一般に複数人で開発しているときには、リポジトリに対して誰かが修正をコミットしているかもしれません。 リポジトリに対して行われた修正を自分の作業コピーに取り込みましょう。

C:\work\myproject> svn update
リビジョン 2 です。

この練習ではリポジトリにコミットしているのは自分だけですから、 他の誰かがリポジトリを更新しているはずはありません。 ですから、単に現在のリビジョン番号が表示されてsvn updateの実行は終わります。

新しいhello.txtファイルを作ります

C:\work\myproject> echo Hello. > hello.txt

C:\work\myproject> type hello.txt
Hello.

新しく作ったファイルはまだSubversionの管理下にありません

C:\work\myproject> svn status
?      hello.txt                ※?は「知らない」印

いま作ったファイルhello.txtはまだ追加していませんので、 Subversionはhello.txtのことを「知らない」ことになります。 svn statusを使うとSubversionが「知らない」ファイルがわかります。

hello.txtを追加します

C:\work\myproject> svn add hello.txt
A         hello.txt             ※Aは「追加(Add)」の印

C:\work\myproject> svn status
A         hello.txt             ※Aは「追加(Add)」の印

ファイルhello.txtを作業コピーに追加しました。 でも、まだリポジトリには反映していません。 svn statusを実行すると、追加したけれどまだコミットしていないファイルがわかります(Aという印がつきます)。

コミットしてリポジトリに反映します

C:\work\myproject> svn commit -m "Add hello.txt."
追加しています              hello.txt
ファイルのデータを送信しています .
リビジョン 3 をコミットしました。

C:\work\myproject> svn status

コミットした後、再度svn statusしてみると、 hello.txtはもう表示されません。 すでにコミットされたからです。

新しいディレクトリを追加します

ディレクトリもファイルと同じように追加します

新しいディレクトリも、ファイルと同じように作成してから追加してもよいのですが、 ここではディレクトリを作ると同時に追加してみます。

C:\work\myproject> svn mkdir src
A         src

ディレクトリの中にファイルを作って追加します

C:\work\myproject> cd src

C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを作成する

C:\work\myproject\src> type Good.java
public class Good {
    public static void main(String[] args) {
        System.out.println("Good");
    }
}

C:\work\myproject\src> svn add Good.java
A         Good.java

C:\work\myproject> svn status
A         src
A         src\Good.java

C:\work\myproject\src> svn commit -m "Add a Java source file."
追加しています              src
追加しています              src\Good.java
ファイルのデータを送信しています .
リビジョン 4 をコミットしました。

C:\work\myproject\src> cd ..

C:\work\myproject> svn status
                                ※コミット忘れがないので、何も表示されません。

普段の作業はこんな風に進みます

C:\work\myproject> svn update
リビジョン 4 です。

C:\work\myproject> cd src

C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを編集する

C:\work\myproject\src> type Good.java
public class Good {
    public static void main(String[] args) {
        System.out.println("Good!");
    }
}

C:\work\myproject\src> svn diff                     ※差分を見てみよう
Index: Good.java
===================================================================
--- Good.java   (リビジョン 4)
+++ Good.java   (作業コピー)
@@ -1,5 +1,5 @@
 public class Good {
     public static void main(String[] args) {
-        System.out.println("Good");
+        System.out.println("Good!");
     }
 }

C:\work\myproject\src> svn commit -m "Add an exclamation mark."
送信しています              src\Good.java
ファイルのデータを送信しています .
リビジョン 5 をコミットしました。

ファイル名を変更してみよう

ファイル名をGood.javaからMain.javaに変更するには以下のようにします。 変更後はコミットが必要です。

C:\work\myproject\src> svn status

C:\work\myproject\src> svn move Good.java Main.java
A         Main.java
D         Good.java

C:\work\myproject\src> dir /b *.java
Main.java

C:\work\myproject\src> svn status
A  +   Main.java
D      Good.java

C:\work\myproject\src>  svn commit -m "Rename it." 
削除しています              src\Good.java
追加しています              src\Main.java

リビジョン 6 をコミットしました。

C:\work\myproject\src> svn status

Subversionの基礎練習は以上です。 お疲れさま。

この文書に書かなかったこと

関連リンク

更新履歴

ぜひ、感想をお送りください

あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。

あなたの名前: メール:
学年・職業など: 年齢: 男性女性
(上の情報は、いずれも未記入でかまいません)

お手数ですが、以下の問いに答えてから送信してください(迷惑書き込み防止のため)。
今年は西暦何年ですか?

何かの理由でうまく送れない場合にはメールhyuki dot mail at hyuki dot comあてにお願いします。

豊かな人生のための四つの法則