サンプル集 |
■VC ■C# ■Java ■BorlandC ■LinuxC ■MS-DOS ■bash ■Excel VBA ■VBScript ■PHP ■HTML ■perl ■iPhone ■Android ■Lua ■other |
Linuxコマンド |
用語集 |
debian メモ |
apache2 メモ |
MySQL メモ |
Oracle メモ |
HOME |
subversion を使ってみます。
- リポジトリの作成 (svnadmin create)
- リポジトリに格納 (svm import)
- リポジトリから取得 (svn checkout)
- 変更点の比較 (svn diff)
- コミット (svn commit)
- ステータスの確認 (svn status)
- ファイルの追加 (svn add)
- ファイル名の変更 (svn move)
- ログの参照 (svn log)
- タグの作成 (svn copy)
- ブランチの作成 (svn copy)
- リポジトリの一覧 (svn ls)
- マージ (svn merge)
- 指定したリビジョンの内容を表示 (svn cat)
- 指定したリビジョンを取得 (svn update)
OS | Windows XP Professional Version 2002 Service Pack 3 |
---|---|
subversion | 1.4.5 (r25188) Aug 22 2007, 20:49:04 |
リポジトリの作成 (svmadmin create)
まずはリポジトリ用のディレクトリを作成します。 今回は、「C:\svntest\repos」を作成しました。
>
リポジトリを初期化します。
>
コマンドを実行しても特にメッセージも出ませんでしたが、リポジトリディレクトリを見たら色々できていました。
└─repos
│ format
│ README.txt
├─conf
│ authz
│ passwd
│ svnserve.conf
├─dav
├─db
│ │ current
│ │ format
│ │ fs-type
│ │ uuid
│ │ write-lock
│ ├─revprops
│ │ 0
│ ├─revs
│ │ 0
│ └─transactions
├─hooks
│ post-commit.tmpl
│ post-lock.tmpl
│ post-revprop-change.tmpl
│ post-unlock.tmpl
│ pre-commit.tmpl
│ pre-lock.tmpl
│ pre-revprop-change.tmpl
│ pre-unlock.tmpl
│ start-commit.tmpl
└─locks
db-logs.lock
db.lock
リポジトリに格納 (svm import)
まずはリポジトリに格納するファイルを作ります。
今回は c:\svntest 配下に MyProject というフォルダを作り、その中に readme.txt を作りました。 これをリポジトリに格納してみます。
svntest>mkdir MyProject
svntest>cd MyProject
svntest\MyProject>echo hello subversion!! > readme.txt
svntest\MyProject>type readme.txt
hello subversion!!
リポジトリへの格納は svn import を使います。
st import."
追加しています readme.txt
リビジョン 1 をコミットしました。
リポジトリに追加されたようです。
リポジトリから取得 (svn checkout)
リポジトリに格納したファイルを取得してみます。
svntest 配下に aaa というフォルダを作成します。
svntest>mkdir aaa
svntest>cd aaa
svntest\aaa>
リポジトリからの取得は svn checkout を使います。
A MyProject\readme.txt
リビジョン 1 をチェックアウトしました。
svntest\aaa>dir /A
2009/02/04 16:00 <DIR> .
2009/02/04 16:00 <DIR> ..
2009/02/04 16:00 <DIR> MyProject
0 個のファイル 0 バイト
3 個のディレクトリ 65,123,459,072 バイトの空き領域
svntest\aaa>cd MyProject
svntest\aaa\MyProject>dir /A
2009/02/04 16:00 <DIR> .
2009/02/04 16:00 <DIR> ..
2009/02/04 16:00 <DIR> .svn
2009/02/04 16:00 20 readme.txt
1 個のファイル 20 バイト
3 個のディレクトリ 65,123,459,072 バイトの空き領域
無事チェックアウトできました。 隠し属性で「.svn」というディレクトリが追加されています。
変更点の比較 (svn diff)
チェックアウトしたファイルを変更し、リポジトリのものと比較します。
まずは、チェックアウトしたファイルを変更します。 「help!!」という文字をファイルに追記してみます。
変更内容の比較には svn diff を使います。
Index: readme.txt
===================================================================
--- readme.txt (リビジョン 1)
+++ readme.txt (作業コピー)
@@ -1 +1,2 @@
hello subversion!!
+help!!
「help!!」の行の先頭に「+」と付いています。 行が追加されたという印でしょうか。
試しに、1行目を「hello svn!!」に変更して比較してみます。
Index: readme.txt
===================================================================
--- readme.txt (リビジョン 1)
+++ readme.txt (作業コピー)
@@ -1 +1,2 @@
-hello subversion!!
+hello svn!!
+help!!
「hello subversion!!」の行の先頭に「-」が、「hello svn!!」の行の先頭に「+」が付いています。 今、ローカルにあるファイルは「hello svn!!」です。 svn diff の出力結果の最初の方の行に「+++ readme.txt (作業コピー)」と表示されています。 ローカル=作業コピーで、それを表す記号が先頭の「+」という事でしょうか。
「hello svn!!」の行を削除して比較してみます。
Index: readme.txt
===================================================================
--- readme.txt (リビジョン 1)
+++ readme.txt (作業コピー)
@@ -1 +1 @@
-hello subversion!!
+help!!
「hello subversion!!」の行の先頭には「-」が付いています。
リポジトリにあるものの先頭には「-」が、ローカルにあるものの先頭には「+」が付くようです。
コミット (svn commit)
変更結果をリポジトリに反映(コミット)します。 svn commit を使います。
送信しています readme.txt
ファイルのデータを送信しています .
リビジョン 2 をコミットしました。
無事コミットされたようです。 差分が無いか svn diff で比較してみます。
svntest\aaa\MyProject>
何も表示されませんでした。
ステータスの確認 (svn status)
今の状態を確認したい場合、svn status を使います。
svntest\aaa\MyProject>
何も表示されませんでした。 何も変更していないので、何も表示されなくて良いと思います。
ファイルの追加
新しくファイルを作ります。
ステータスを確認します。
? hello.txt
新しいファイルが表示されました。 行の先頭には Subversionが知らないことを表す「?」が表示されています。
Subversion への追加は svn add を使います。
A hello.txt
追加されたのでしょうか。 ステータスを見てみます。
A hello.txt
行の先頭の「?」が「A」に変わっていました。 この状態は「追加はしたけどまだコミットしていない」という状態です。 変更点の比較もしてみます。
Index: hello.txt
===================================================================
--- hello.txt (リビジョン 0)
+++ hello.txt (リビジョン 0)
@@ -0,0 +1 @@
+hello!!
「---」の行も「+++」の行もリビジョン 0 となっています。
コミットします。
追加しています hello.txt
ファイルのデータを送信しています .
リビジョン 3 をコミットしました。
無事コミットできたようです。 状況を確認してみます。
svntest\aaa\MyProject>
何も表示されなかったので、何も変更点は無いようです。
ファイル名の変更
ファイル名の変更には svn move を使います。 先程作った「hello.txt」を「aisatu.txt」という名前に変えてみます。
A aisatu.txt
D hello.txt
aisatu.txt の先頭に追加を表す「A」が、hello.txt の先頭に「D」が表示されました。 状態を確認します。
D hello.txt
A + aisatu.txt
コミットします。
追加しています aisatu.txt
削除しています hello.txt
リビジョン 4 をコミットしました。
問題なくコミットできたようですが、一応状態を確認します。
svntest\aaa\MyProject>
問題なさそうです。
ログの参照
ログを見る場合、svn log を使います。
最初に作成した readme.txt のログを見てみます。
----------------------------------------------------------------------
r2 | ymlib | 2009-02-04 16:10:55 +0900 (水, 04 2 2009) | 1 line
change message.
----------------------------------------------------------------------
r1 | ymlib | 2009-02-04 15:55:40 +0900 (水, 04 2 2009) | 1 line
first import.
----------------------------------------------------------------------
aisatu.txt のログを見てみます。
----------------------------------------------------------------------
r4 | ymlib | 2009-02-04 16:22:37 +0900 (水, 04 2 2009) | 1 line
hello.txt -> aisatu.txt
----------------------------------------------------------------------
r3 | ymlib | 2009-02-04 16:18:45 +0900 (水, 04 2 2009) | 1 line
add hello.txt.
----------------------------------------------------------------------
このログだけだと、元のファイルが hello.txt だったという事は分りません。 元々あった hello.txt のログはどうなっているでしょうか。 作成、変名とかが出ると良いのですが・・・
svn: 'hello.txt' はバージョン管理下におかれていません
「バージョン管理下におかれていない」と言われました。
ちなみに --limit オプションを付けると、指定した行数だけログを出力できます。
----------------------------------------------------------------------
r2 | ymlib | 2009-02-04 16:10:55 +0900 (水, 04 2 2009) | 1 line
change message.
----------------------------------------------------------------------
タグの作成 (svn copy)
タグの作成には、svn copy を使います。
Project file:///c:/svntest/repos/MyProject2
リビジョン 5 をコミットしました。
svntest\aaa\MyProject>
コピーといってもファイルが複写されるわけではなく、UNIXのハードリンクっぽい感じらしいです。
ブランチの作成 (svn copy)
ブランチも、リポジトリを copy することとほぼ同じです。(コマンドもまったく同じです???)
yProject file:///c:/svntest/repos/MyProject3
リビジョン 6 をコミットしました。
svntest\aaa\MyProject>
リポジトリの一覧 (svn ls)
作成したタグがリポジトリのディレクトリにあるかと思い見てみました。
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
MyProject2 とかのディレクトリが作成されているかと思ったのですが、それらしいものはありませんでした。
リポジトリの一覧の参照には svn ls を使います。
MyProject/
MyProject2/
MyProject3/
マージ (svn merge)
2つのリポジトリをマージしてみます。
まずは MyProject の aisatu.txt を更新します。
状況を確認します。
M aisatu.txt
aisatu.txt の先頭に「M」と出ています。 コミットします。
送信しています aisatu.txt
ファイルのデータを送信しています .
リビジョン 7 をコミットしました。
一応状態を確認します。
svntest\aaa\MyProject>
bbb というフォルダを作り MyProject3 をチェックアウトします。
svntest>mkdir bbb
svntest>cd bbb
svntest\bbb>svn checkout file:///c:/svntest/repos/MyProject3
A MyProject3\aisatu.txt
A MyProject3\readme.txt
リビジョン 7 をチェックアウトしました。
チェックアウトした aisatu.txt を確認します。
svntest\bbb\MyProject3>type aisatu.txt
hello!!
MyProject3 からチェックアウトしたので、MyProject の修正は入っていません。 (当然ですが。)
MyProject3 に MyProject をマージします。 マージには svn merge を使用します。
roject
U aisatu.txt
マージしたファイルの内容を確認します。
M aisatu.txt
svntest\bbb\MyProject3>type aisatu.txt
konnitiwa!!
svntest\bbb\MyProject3>
状態は「M」になっていました。 内容は MyProject で更新した konnitiwa!! になりました。
コミットしてマージ結果を確定させます。
送信しています aisatu.txt
ファイルのデータを送信しています .
リビジョン 8 をコミットしました。
svntest\bbb\MyProject3>
指定したリビジョンの内容を表示 (svn cat)
任意のリビジョンの内容を表示するには svn cat を使います。
konnitiwa!!
svntest\bbb\MyProject3>svn cat -r6 aisatu.txt
hello!!
svntest\bbb\MyProject3>svn cat -r4 aisatu.txt
hello!!
指定したリビジョンを取得 (svn update)
先程マージした aisatu.txt をマージ前に戻してみます。
まずは、aisatu.txt のログを見ます。
----------------------------------------------------------------------
r8 | ymlib | 2009-02-04 16:56:57 +0900 (水, 04 2 2009) | 1 line
merge MyProject
----------------------------------------------------------------------
r6 | ymlib | 2009-02-04 16:38:05 +0900 (水, 04 2 2009) | 1 line
branch 3
----------------------------------------------------------------------
r4 | ymlib | 2009-02-04 16:22:37 +0900 (水, 04 2 2009) | 1 line
hello.txt -> aisatu.txt
----------------------------------------------------------------------
r3 | ymlib | 2009-02-04 16:18:45 +0900 (水, 04 2 2009) | 1 line
add hello.txt.
----------------------------------------------------------------------
r6 (リビジョン6) がマージ前のものなので、それに戻します。 リビジョンを指定して更新するには svn update を使います。
U aisatu.txt
リビジョン 6 に更新しました。
リビジョン 6 を取得できたようです。 内容と状態を確認します。
hello!!
svntest\bbb\MyProject3>svn status
svntest\bbb\MyProject3>
状態は「M」になるかと思っていたのですが、何も表示されませんでした。
ログを確認します。
----------------------------------------------------------------------
r6 | ymlib | 2009-02-04 16:38:05 +0900 (水, 04 2 2009) | 1 line
branch 3
----------------------------------------------------------------------
r4 | ymlib | 2009-02-04 16:22:37 +0900 (水, 04 2 2009) | 1 line
hello.txt -> aisatu.txt
----------------------------------------------------------------------
r3 | ymlib | 2009-02-04 16:18:45 +0900 (水, 04 2 2009) | 1 line
add hello.txt.
----------------------------------------------------------------------
r8 が無くなっています! svn update で古いリビジョンを取得すると、それ以降のものは消えるようです。
試しに r3 に戻してみます。
D aisatu.txt
リビジョン 3 に更新しました。
先頭に「D」と出ています。 ファイルを確認すると aisatu.txt が無くなっていました!
元々 aisatu.txt は hello.txt の名前を変えたもので、最初に追加した時点では hello.txt という名前でした。 r3 の時点では hello.txt という名前で、aisatu.txt は無かったため削除されたのだと思います。 ただ、それなら hello.txt が出来れば良かったのですが・・・
とりあえず aisatu.txt を復活させたいので svn checkout で取得し直します。
aisatu.txt
svn: URL 'file:///c:/svntest/repos/MyProject/aisatu.txt' が参照している
のはファイルです。ディレクトリではありません
ファイル名を指定してチェックアウトできるかなぁと勘でやってみましたがエラーになりました。
仕方が無いので MyProject3 をチェックアウトし直しました。
svntest\bbb>svn checkout file:///c:/svntest/repos/MyProject3
A MyProject3\aisatu.txt
リビジョン 8 をチェックアウトしました。
Copyright (C) 2013 ymlib.com