svn その3 課題リストを消化するんご
■検証環境
・svn server
CentOS6.9、192.168.2.26、プロンプト:せ6>、リポジトリのパス:/var/svn/repos/project
svnサーバ起動
せ6> service svnserve start
・svn client A
CentOS7.3、192.168.2.7、プロンプト:せ7>、リポジトリのパス:/svn/project
・svn client B
OpenSuSE11.4、192.168.2.11、プロンプト:すぜ>、リポジトリのパス:/svn/project
■素朴な疑問
・svn coした起点と、svnコマンドを実行したカレントディレクトリによって、各種svnコマンドを引数のパスを省略して実行した際、出力結果はどのディレクトリを起点としたものになるか?.
■検証
17.下記のsvnコマンドの引数としてパスを指定した場合と省略した場合の処理の起点はカレントディレクトリと関係があるのか
・svn ci
・svn up
・svn st
・svn log
・svn info
・svn ls
・svn diff
【検証17】 複数のbranchを作成した「branches」リポジトリを適当な場所にチェックアウトする。
すぜ> svn co svn://192.168.2.26/var/svn/repos/project/branches chinko
svnサーバ上のbranchesリポジトリには下記のように4つの独立したブランチが作られている
すぜ> svn ls -v chinko
103 centos7 May 04 20:56 ./
97 centos7 May 04 20:48 20180504/
99 centos7 May 04 20:51 20180504_2/
101 suse May 04 20:54 20180504_3/
103 centos7 May 04 20:56 20180504_4/
すぜ> ll chinko
total 20
drwxr-xr-x 6 root root 4096 May 4 22:48 .svn
drwxr-xr-x 6 root root 4096 May 4 22:48 20180504
drwxr-xr-x 6 root root 4096 May 4 22:48 20180504_2
drwxr-xr-x 3 root root 4096 May 4 22:48 20180504_3
drwxr-xr-x 6 root root 4096 May 4 22:48 20180504_4
→上記のように4つのブランチの作業コピーがchinkoディレクリ直下にコピーされた
上記の 20180504_3は、作業コピーがすべてファイルだけでディレクトリを含まない。
20180504、20180504_2、20180504_4 の3つの作業コピーの内容はだいたい同じで下記のようなファイル(ディレクトリ)を含む
すぜ> ll chinko/20180504_3
total 140
drwxr-xr-x 6 root root 4096 May 4 22:48 .svn
-rw-r--r-- 1 root root 412 May 4 22:48 README
-rw-r--r-- 1 root root 1305 May 4 22:48 clockn
-rw-r--r-- 1 root root 29 May 4 22:48 hoge
-rwxr-xr-x 1 root root 110216 May 4 22:48 ls
-rw-r--r-- 1 root root 1736 May 4 22:48 passwd
-rw-r--r-- 1 root root 1662 May 4 22:48 passwd2
lrwxrwxrwx 1 root root 6 May 4 22:48 passwdln -> passwd
-rw-r--r-- 1 root root 1736 May 4 22:48 passwdn
-rw-r--r-- 1 root root 70 May 4 22:48 piyo.data
すぜ> ll chinko/20180504
total 156
-rw-r--r-- 1 root root 10 May 4 22:48 .hind
drwxr-xr-x 6 root root 4096 May 4 22:48 .svn
-rw-r--r-- 1 root root 480 May 4 22:48 README
-rw-r--r-- 1 root root 1305 May 4 22:48 clockn
drwxr-xr-x 4 root root 4096 May 4 22:48 dir
-rw-r--r-- 1 root root 29 May 4 22:48 hoge
-rwxr-xr-x 1 root root 110216 May 4 22:48 ls
-rw-r--r-- 1 root root 1736 May 4 22:48 passwd
-rw-r--r-- 1 root root 1662 May 4 22:48 passwd2
lrwxrwxrwx 1 root root 6 May 4 22:48 passwdln -> passwd
-rw-r--r-- 1 root root 1736 May 4 22:48 passwdn
drwxr-xr-x 3 root root 4096 May 4 22:48 piyo
-rw-r--r-- 1 root root 70 May 4 22:48 piyo.data
drwxr-xr-x 3 root root 4096 May 4 22:48 puni
上記の「dir」ディレクトリは下記のように子ディレクトリ「dir_1」をもつ
すぜ> ll chinko/20180504/dir
total 12
drwxr-xr-x 6 root root 4096 May 4 22:48 .svn
-rw-r--r-- 1 root root 2 May 4 22:48 1.txt
drwxr-xr-x 3 root root 4096 May 4 22:48 dir_1
すぜ> ll chinko/20180504/dir/dir_1
total 8
drwxr-xr-x 6 root root 4096 May 4 22:48 .svn
-rw-r--r-- 1 root root 4 May 4 22:48 1_1.txt
【検証17-1】 引数無しの svn st コマンドはカレントディレクトリによってどう変わるか
・チェックアウト地点がカレントディレクトリ
すぜ> pwd
/svn/chinko ←カレントディレクトリはチェックアウト地点
すぜ> svn st -v | grep "dir/dir_1/1_1.txt"
106 45 centos7 20180504/dir/dir_1/1_1.txt
106 45 centos7 20180504_2/dir/dir_1/1_1.txt
106 45 centos7 20180504_4/dir/dir_1/1_1.txt
→各ブランチの末端まで見えた
・どれかブランチの一つがカレントディレクトリ
すぜ> cd 20180504_2
すぜ> pwd
/svn/chinko/20180504_2
すぜ> svn st -v | grep "dir/dir_1/1_1.txt"
106 45 centos7 dir/dir_1/1_1.txt
→カレントディレクトリより支流の末端までしか見えない
・ブランチの中の末端ディレクトリがカレントディレクトリ
20180504_2ディレクトリがカレントディレクトリの場合、
すぜ> cd 20180504_2
すぜ> pwd
/svn/chinko/20180504_2
すぜ> svn st -v | grep 1.txt
106 45 centos7 dir/dir_1/1_1.txt
106 45 centos7 dir/1.txt
ここで、もし上記の「dir/dir_1/」がカレントディレクトリの場合、「dir/1.txt」はsvn stコマンドで見えるのか?
すぜ> cd dir/dir_1
すぜ> pwd
/svn/chinko/20180504_2/dir/dir_1
すぜ> svn st -v | grep 1.txt
106 45 centos7 1_1.txt
→カレントディレクトリより支流の末端までしか見えない
・svn stコマンドの引数が絶対パスなら見えるか?
すぜ> pwd
/svn/chinko/20180504_2/dir/dir_1 ←20180504_2ブランチの最末端ディレクトリがカレントディレクトリ
すぜ> svn st -v /svn/chinko | grep 1.txt
106 45 centos7 /svn/chinko/20180504/dir/dir_1/1_1.txt
106 45 centos7 /svn/chinko/20180504/dir/1.txt
106 45 centos7 /svn/chinko/20180504_2/dir/dir_1/1_1.txt
106 45 centos7 /svn/chinko/20180504_2/dir/1.txt
106 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
106 45 centos7 /svn/chinko/20180504_4/dir/1.txt
→当然全部見渡せる
【検証17-2】 引数無しの svn ci コマンドはカレントディレクトリによってどう変わるか
・チェックアウト地点がカレントディレクトリ
すぜ> pwd
/svn/chinko ←カレントディレクトリはチェックアウト地点
すぜ> echo `LANG=C date` add to $PWD/20180504_2/dir/dir_1/1_1.txt from `hostname` >> 20180504_2/dir/dir_1/1_1.txt
すぜ> echo `LANG=C date` add to $PWD/20180504/dir/dir_1/1_1.txt from `hostname` >> 20180504/dir/dir_1/1_1.txt
すぜ> svn ci -m "" ←このコミットの影響範囲は?
Sending 20180504/dir/dir_1/1_1.txt ←このコミットされた
Sending 20180504_2/dir/dir_1/1_1.txt このコミットされた
Transmitting file data ..
Committed revision 107.
別のローカルリポジトリの作業コピーで見てみる
せ7> pwd
/svn/project/branches
せ7> svn up
Updating '.':
U 20180504/dir/dir_1/1_1.txt ←このコミットされてる
U 20180504_2/dir/dir_1/1_1.txt ←このコミットされてる
リビジョン 107 に更新しました。
※まあ予想通りですね
・どれかブランチの一つがカレントディレクトリ
すぜ> cd 20180504_2
すぜ> pwd
/svn/chinko/20180504_2
すぜ> echo `LANG=C date` add to $PWD/20180504_2/dir/dir_1/1_1.txt from `hostname` >> dir/dir_1/1_1.txt
すぜ> echo `LANG=C date` add to $PWD/20180504/dir/dir_1/1_1.txt from `hostname` >> ../20180504/dir/dir_1/1_1.txt
すぜ> cat dir/dir_1/1_1.txt
Sat May 5 00:19:52 JST 2018 add to /svn/chinko/20180504_2/dir/dir_1/1_1.txt from suse
Sat May 5 00:30:08 JST 2018 add to /svn/chinko/20180504_2/20180504_2/dir/dir_1/1_1.txt from suse
すぜ> cat ../20180504/dir/dir_1/1_1.txt
Sat May 5 00:20:26 JST 2018 add to /svn/chinko/20180504/dir/dir_1/1_1.txt from suse
Sat May 5 00:30:48 JST 2018 add to /svn/chinko/20180504_2/20180504/dir/dir_1/1_1.txt from suse
すぜ> svn ci -m "" ←このコミットの影響範囲は?
Sending 20180504_2/dir/dir_1/1_1.txt ←カレントディレクトリの支流のファイルしかコミットされてない。
Transmitting file data .
Committed revision 108.
すぜ> svn up ←この位置でアップデートしちゃう!
At revision 108.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt ←checkout地点から状態を見る
M 107 107 suse /svn/chinko/20180504/dir/dir_1/1_1.txt ←コミット未済!
108 108 suse /svn/chinko/20180504_2/dir/dir_1/1_1.txt ←コミット済み
107 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
別のローカルリポジトリの作業コピーで見てみる
せ7> pwd
/svn/project/branches
せ7> svn up
Updating '.':
U 20180504_2/dir/dir_1/1_1.txt ←当然コミットされたファイルしか更新されない
リビジョン 108 に更新しました。
ちなみに、パスを指定してコミットした場合は
すぜ> pwd
/svn/chinko/20180504_2
すぜ> svn ci -m "" /svn/chinko
Sending 20180504/dir/dir_1/1_1.txt
Transmitting file data .
Committed revision 109.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
109 109 suse /svn/chinko/20180504/dir/dir_1/1_1.txt ←コミットされた
108 108 suse /svn/chinko/20180504_2/dir/dir_1/1_1.txt
107 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
※引数のパスを指定しないでsvn commitを実行したらカレントディレクトリより支流にあるファイルだけしかコミットしない。
・ブランチの中の末端ディレクトリがカレントディレクトリ
すぜ> cd dir/dir_1
すぜ> pwd
/svn/chinko/20180504_2/dir/dir_1 ←末端ディレクトリがカレントディレクトリ
すぜ> echo `LANG=C date` add to chinko/20180504_2/dir/dir_1/1_1.txt from `hostname` >> 1_1.txt
すぜ> echo `LANG=C date` add to chinko/20180504/dir/dir_1/1_1.txt from `hostname` >> ../../../20180504/dir/dir_1/1_1.txt
すぜ> cat 1_1.txt
Sat May 5 00:19:52 JST 2018 add to /svn/chinko/20180504_2/dir/dir_1/1_1.txt from suse
Sat May 5 00:30:08 JST 2018 add to /svn/chinko/20180504_2/20180504_2/dir/dir_1/1_1.txt from suse
Sat May 5 01:02:02 JST 2018 add to chinko/20180504_2/dir/dir_1/1_1.txt from suse
すぜ> cat ../../../20180504/dir/dir_1/1_1.txt
Sat May 5 00:20:26 JST 2018 add to /svn/chinko/20180504/dir/dir_1/1_1.txt from suse
Sat May 5 00:30:48 JST 2018 add to /svn/chinko/20180504_2/20180504/dir/dir_1/1_1.txt from suse
Sat May 5 01:02:11 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
すぜ> svn ci -m ""
Sending dir_1/1_1.txt ←やはりカレントディレクトリの支流のファイルしかコミットされてない。
Transmitting file data .
Committed revision 110.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
M 109 109 suse /svn/chinko/20180504/dir/dir_1/1_1.txt ←コミット未済
110 110 suse /svn/chinko/20180504_2/dir/dir_1/1_1.txt ←コミット済み
107 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
パスを指定してコミットする。
すぜ> svn ci -m "" /svn/chinko
Sending 20180504/dir/dir_1/1_1.txt
Transmitting file data .
Committed revision 111.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
111 111 suse /svn/chinko/20180504/dir/dir_1/1_1.txt ←コミットされた
110 110 suse /svn/chinko/20180504_2/dir/dir_1/1_1.txt
107 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
※引数のパスを指定しないでsvn commitを実行したらカレントディレクトリより支流にあるファイルだけしかコミットしない。
・引数のパスを指定してsvn commitを実行する
すぜ> pwd
/svn/chinko/20180504_2/dir/dir_1 ←末端ディレクトリがカレントディレクトリ
すぜ> echo `LANG=C date` add to chinko/20180504_2/dir/dir_1/1_1.txt from `hostname` >> 1_1.txt
すぜ> echo `LANG=C date` add to chinko/20180504/dir/dir_1/1_1.txt from `hostname` >> ../../../20180504/dir/dir_1/1_1.txt
すぜ> cd /svn/chinko
すぜ> svn ci -m "" 20180504_2/dir/dir_1/
Sending 20180504_2/dir/dir_1/1_1.txt
Transmitting file data .
Committed revision 112.
すぜ> svn st -v | grep 1_1.txt
M 111 111 suse 20180504/dir/dir_1/1_1.txt ←コミット未済
112 112 suse 20180504_2/dir/dir_1/1_1.txt ←コミット済み
107 45 centos7 20180504_4/dir/dir_1/1_1.txt
※引数のパスを指定してsvn commitを実行したら引数のパスより支流にあるファイルだけしかコミットしない。
次の検証のためにお作法しとく。
すぜ> svn ci -m "" /svn/chinko
すぜ> svn up
せ7> svn up
【検証17-3】 引数無しの svn up コマンドはカレントディレクトリによってどう変わるか
・チェックアウト地点がカレントディレクトリ
別のローカルリポジトリ(centos7)で作業コピーを編集してコミットする
せ7> pwd
/svn/project/branches
せ7> echo `LANG=C date` add to branches/20180504_2/dir/dir_1/1_1.txt from `hostname` >> 20180504_2/dir/dir_1/1_1.txt
せ7> echo `LANG=C date` add to branches/20180504/dir/dir_1/1_1.txt from `hostname` >> 20180504/dir/dir_1/1_1.txt
せ7> tail -n 1 20180504_2/dir/dir_1/1_1.txt
Sat May 5 01:39:13 JST 2018 add to branches/20180504_2/dir/dir_1/1_1.txt from centos7
せ7> tail -n 1 20180504/dir/dir_1/1_1.txt
Sat May 5 01:39:26 JST 2018 add to branches/20180504/dir/dir_1/1_1.txt from centos7
せ7> svn ci -m ""
送信しています 20180504/dir/dir_1/1_1.txt
送信しています 20180504_2/dir/dir_1/1_1.txt
ファイルのデータを送信しています ..
Committed revision 115.
suse側でsvn upする
すぜ> pwd
/svn/chinko ←カレントディレクトリはチェックアウト地点
すぜ> svn up
U 20180504/dir/dir_1/1_1.txt ←更新された
U 20180504_2/dir/dir_1/1_1.txt ←更新された
Updated to revision 115.
すぜ> tail -n 1 20180504_2/dir/dir_1/1_1.txt
Sat May 5 01:39:13 JST 2018 add to branches/20180504_2/dir/dir_1/1_1.txt from centos7
すぜ> tail -n 1 20180504/dir/dir_1/1_1.txt
Sat May 5 01:39:26 JST 2018 add to branches/20180504/dir/dir_1/1_1.txt from centos7
→どっちもちゃんと更新されてる
・どれかブランチの一つがカレントディレクトリ
別のローカルリポジトリ(centos7)で作業コピーを編集してコミットする
--- 省略 ---
せ7> svn ci -m ""
送信しています 20180504/dir/dir_1/1_1.txt
送信しています 20180504_2/dir/dir_1/1_1.txt
ファイルのデータを送信しています ..
Committed revision 116.
suse側でsvn upする
すぜ> cd 20180504_2
すぜ> pwd
/svn/chinko/20180504_2
すぜ> svn up
U dir/dir_1/1_1.txt ←カレントディレクトリの下流のファイルしか更新されてない。
Updated to revision 116.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
115 115 centos7 /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新未済
116 116 centos7 /svn/chinko/20180504_2/dir/dir_1/1_1.txt ←更新済み
115 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
パスを指定して更新しる
すぜ> svn up /svn/chinko
U /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新された
Updated to revision 116.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
116 116 centos7 /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新された
116 116 centos7 /svn/chinko/20180504_2/dir/dir_1/1_1.txt
116 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
※引数のパスを指定しないでsvn updateを実行したらカレントディレクトリより支流にあるファイルだけしか更新されない。
※引数のパスを指定してsvn updateを実行したらパスより支流にあるファイルが更新される。
・ブランチの中の末端ディレクトリがカレントディレクトリ
別のローカルリポジトリ(centos7)で作業コピーを編集してコミットする
--- 省略 ---
せ7> svn ci -m ""
送信しています 20180504/dir/dir_1/1_1.txt
送信しています 20180504_2/dir/dir_1/1_1.txt
ファイルのデータを送信しています ..
Committed revision 117.
suse側でsvn upする
すぜ> cd dir/dir_1
すぜ> pwd
/svn/chinko/20180504_2/dir/dir_1 ←末端ディレクトリがカレントディレクトリ
すぜ> svn up
U 1_1.txt ←カレントディレクトリの下流のファイルしか更新されてない。
Updated to revision 117.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
116 116 centos7 /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新未済
117 117 centos7 /svn/chinko/20180504_2/dir/dir_1/1_1.txt ←更新済み
116 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
パスを指定して更新しる
すぜ> svn up /svn/chinko/20180504_2 ←更新対象を含まないディレクトリをパスに指定して更新
At revision 117.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
116 116 centos7 /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新されない
117 117 centos7 /svn/chinko/20180504_2/dir/dir_1/1_1.txt
116 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
すぜ> svn up /svn/chinko/20180504 ←更新対象を含むディレクトリをパスに指定して更新
U /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新された
Updated to revision 117.
すぜ> svn st -v /svn/chinko/ | grep 1_1.txt
117 117 centos7 /svn/chinko/20180504/dir/dir_1/1_1.txt ←更新された
117 117 centos7 /svn/chinko/20180504_2/dir/dir_1/1_1.txt
116 45 centos7 /svn/chinko/20180504_4/dir/dir_1/1_1.txt
※引数のパスを指定してsvn updateを実行したらパスより下流にあるファイルが更新される。
※引数のパスを指定してsvn updateを実行したらパスより下流にないファイルは更新されない。
次の検証のためにお作法しとく。
すぜ> svn up
せ7> svn up