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