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

 

■検証

【検証17-4】 引数無しの svn log コマンドはカレントディレクトリによってどう変わるか

・その前に svn log の特性把握

すぜ> cd /svn/chinko
すぜ> pwd

/svn/chinko

すぜ> svn log /svn/chinko | head -n 5
------------------------------------------------------------------------
r117 | centos7 | 2018-05-05 01:58:54 +0900 (Sat, 05 May 2018) | 1 line

------------------------------------------------------------------------
svn: Write error: Broken pipe      ←なんかこんなんでるんだけど。まあいっか

すぜ> svn log /svn/chinko/20180504_3 | head -n 5
------------------------------------------------------------------------
r101 | suse | 2018-05-04 20:54:25 +0900 (Fri, 04 May 2018) | 1 line     ←どうやらパスより下流の最新リビジョンが表示される

------------------------------------------------------------------------

svn管理下のファイルを更新

すぜ> echo `LANG=C date` add to chinko/20180504_2/dir/dir_1/1_1.txt from `hostname` >> 20180504_2/dir/dir_1/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

すぜ> tail -n 1 20180504_2/dir/dir_1/1_1.txt
Sat May 5 02:25:18 JST 2018 add to chinko/20180504_2/dir/dir_1/1_1.txt from suse
すぜ> tail -n 1 20180504/dir/dir_1/1_1.txt
Sat May 5 02:25:27 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

すぜ> svn log /svn/chinko/20180504_2 | head -n 5
------------------------------------------------------------------------
r117 | centos7 | 2018-05-05 01:58:54 +0900 (Sat, 05 May 2018) | 1 line          ←当然リビジョンは変更なし
------------------------------------------------------------------------

すぜ> 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 118.

すぜ> svn log /svn/chinko/20180504_2 | head -n 5
------------------------------------------------------------------------
r117 | centos7 | 2018-05-05 01:58:54 +0900 (Sat, 05 May 2018) | 1 line      ←コミットしてもsvn logは更新されない
------------------------------------------------------------------------

すぜ> svn st -v | grep 1_1.txt
               118      118 suse         20180504/dir/dir_1/1_1.txt  ←作業コピーとsvnサーバのリビジョンはともに更新されている                         118      118 suse         20180504_2/dir/dir_1/1_1.txt  ←同上
               117       45 centos7      20180504_4/dir/dir_1/1_1.txt

すぜ> svn up
At revision 118.
すぜ> svn log /svn/chinko/20180504_2 | head -n 5
------------------------------------------------------------------------
r118 | suse | 2018-05-05 02:29:46 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

※svn stの出力結果のリビジョンはsvn ciしたら更新される。 

※svn logの出力結果のリビジョンはsvn ciしても更新されない。

※svn logの出力結果はリビジョンはsvn upしたら更新される。

 

・チェックアウト地点がカレントディレクトリ

すぜ> pwd
/svn/chinko                     ←カレントディレクトリはチェックアウト地点

すぜ> echo `LANG=C date` add to chinko/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
Transmitting file data .
Committed revision 120.

すぜ> svn st -v | grep 1_1.txt
               120      120 suse         20180504/dir/dir_1/1_1.txt     ←こっちだけリビジョンを上げる
               119      119 suse         20180504_2/dir/dir_1/1_1.txt    ←こっちのリビジョンは据え置き
               119       45 centos7      20180504_4/dir/dir_1/1_1.txt

すぜ> svn up
At revision 120.

すぜ> svn log 20180504/ | head -n 5
------------------------------------------------------------------------
r120 | suse | 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

すぜ> svn log 20180504_2/ | head -n 5
------------------------------------------------------------------------
r119 | suse | 2018-05-05 02:39:48 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

※パスを指定したsvn logは上述の通り指定したパスの下流にあるファイルのうち最新リビジョンを出力する

カレントディレクトリを変えてみる

すぜ> cd /svn/chinko/20180504
すぜ> svn log | head -n 5

------------------------------------------------------------------------
r120 | suse | 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

すぜ> cd /svn/chinko/20180504_2
すぜ> svn log | head -n 5

------------------------------------------------------------------------
r119 | suse | 2018-05-05 02:39:48 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

※パスを指定しないsvn logはカレントディレクトリの下流にあるファイルのうち最新リビジョンを出力する

 

・ブランチの中の末端ディレクトリがカレントディレクトリ

すぜ> cd /svn/chinko/20180504/dir/dir_1
すぜ> pwd

/svn/chinko/20180504/dir/dir_1
すぜ> svn log | head -n 5
------------------------------------------------------------------------
r120 | suse | 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

すぜ> cd /svn/chinko/20180504_2/dir/dir_1
すぜ> pwd

/svn/chinko/20180504_2/dir/dir_1
すぜ> svn log | head -n 5
------------------------------------------------------------------------
r119 | suse | 2018-05-05 02:39:48 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

すぜ> cd /svn/chinko/20180504_4/dir/dir_1
すぜ> pwd

/svn/chinko/20180504_4/dir/dir_1
すぜ> svn log | head -n 5
------------------------------------------------------------------------
r87 | centos7 | 2018-05-04 20:14:37 +0900 (Fri, 04 May 2018) | 1 line
------------------------------------------------------------------------

 

・svn logコマンドの引数が絶対パスの場合

すぜ> cd /
すぜ> pwd

/
すぜ> svn log /svn/chinko/20180504/dir/dir_1 | head -5
------------------------------------------------------------------------
r120 | suse | 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

すぜ> svn log /svn/chinko/20180504_4/dir/dir_1 | head -5
------------------------------------------------------------------------
r87 | centos7 | 2018-05-04 20:14:37 +0900 (Fri, 04 May 2018) | 1 line
------------------------------------------------------------------------

ちなみに、ローカルリポジトリ外でパスを引数で指定しないと

すぜ> svn log
svn: '.' is not a working copy

のようにになる。

 

【検証17-5】 引数無しの svn info コマンドはカレントディレクトリによってどう変わるか

・その前に svn info の特性把握

すぜ> pwd
/svn/chinko

すぜ> svn log /svn/chinko | head -5
------------------------------------------------------------------------
r120 | suse | 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018) | 1 line
------------------------------------------------------------------------

すぜ> svn info
Path: .
URL: svn://192.168.2.26/var/svn/repos/project/branches
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 120
Last Changed Date: 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018)

すぜ> svn info 20180504/

Path: 20180504
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 120
Last Changed Date: 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018)

すぜ> svn info 20180504_3/
Path: 20180504_3
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504_3
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 101
Last Changed Date: 2018-05-04 20:54:25 +0900 (Fri, 04 May 2018)

すぜ> svn info 20180504_4/dir/dir_1
Path: 20180504_4/dir/dir_1
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504_4/dir/dir_1
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: centos7
Last Changed Rev: 45
Last Changed Date: 2018-05-03 19:55:12 +0900 (Thu, 03 May 2018)

ファイルを一個変更してみる

すぜ> echo `LANG=C date` add to chinko/20180504/dir/dir_1/1_1.txt from `hostname` >> 20180504/dir/dir_1/1_1.txt

すぜ> tail -1 20180504/dir/dir_1/1_1.txt
Sat May 5 03:23:52 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

すぜ> svn info 20180504/
Path: 20180504
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 120
Last Changed Date: 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018)

→ファイルを編集して保存しただけでは、svn infoの出力は一語一句一切変更なし

すぜ> svn ci -m ""
Sending        20180504/dir/dir_1/1_1.txt
Transmitting file data .
Committed revision 121.

すぜ> svn info 20180504/
Path: 20180504
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 120
Last Changed Date: 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018)

すぜ> svn info

Path: .
URL: svn://192.168.2.26/var/svn/repos/project/branches
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 120
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 120
Last Changed Date: 2018-05-05 02:44:06 +0900 (Sat, 05 May 2018)

→ファイルをコミットしただけでは、svn infoの出力は一語一句一切変更なし

すぜ> svn up
At revision 121.
すぜ> svn info 20180504/
Path: 20180504
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 121
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 121
Last Changed Date: 2018-05-05 03:40:43 +0900 (Sat, 05 May 2018)

すぜ> svn info
Path: .
URL: svn://192.168.2.26/var/svn/repos/project/branches
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 121
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 121
Last Changed Date: 2018-05-05 03:40:43 +0900 (Sat, 05 May 2018)

※svn infoの出力結果はsvn ciしても更新されない。

※svn infoの出力結果はsvn upしたら更新される。

 

・チェックアウト地点がカレントディレクトリ

→上記の通りカレントディレクトリの下流の情報が出力される

 

・どれかブランチの一つがカレントディレクトリ

すぜ> cd 20180504_2
すぜ> pwd

/svn/chinko/20180504_2

すぜ> svn info
Path: .
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504_2
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 121                      ←これはどこのリビジョンを出力してるんだ?
Node Kind: directory
Schedule: normal
Last Changed Author: suse
Last Changed Rev: 119
Last Changed Date: 2018-05-05 02:39:48 +0900 (Sat, 05 May 2018)

※パスを指定しないsvn infoの「Last Changed Rev」はカレントディレクトリの下流にあるファイルのうち最新リビジョンを出力するが、「Revision」がどれのリビジョンを出力しているのか不明

 

・ブランチの中の末端ディレクトリがカレントディレクトリ

すぜ> cd /svn/chinko/20180504_4/dir/dir_1
すぜ> pwd

/svn/chinko/20180504_4/dir/dir_1     ←末端ディレクトリがカレントディレクトリ

すぜ> svn info
Path: .
URL: svn://192.168.2.26/var/svn/repos/project/branches/20180504_4/dir/dir_1
Repository Root: svn://192.168.2.26/var/svn/repos/project
Repository UUID: e112b0dd-4d9d-45c6-b232-96d9d69c4d33
Revision: 121
Node Kind: directory
Schedule: normal
Last Changed Author: centos7
Last Changed Rev: 45
Last Changed Date: 2018-05-03 19:55:12 +0900 (Thu, 03 May 2018)

※パスを指定しないsvn infoの「Last Changed Rev」はカレントディレクトリの下流にあるファイルのうち最新リビジョンを出力するが、「Revision」がどれのリビジョンを出力しているのか不明

 

【検証17-6】 引数無しの svn ls コマンドはカレントディレクトリによってどう変わるか

・チェックアウト地点がカレントディレクトリ

すぜ> pwd
/svn/chinko                     ←カレントディレクトリはチェックアウト地点

すぜ> svn ls
20180504/
20180504_2/
20180504_3/
20180504_4/

 

・どれかブランチの一つがカレントディレクトリ

すぜ> cd 20180504_2
すぜ> pwd

/svn/chinko/20180504_2

すぜ> svn ls
.hind
README
clockn
dir/             ←カレントディレクトリの第一階層のファイルまたはディレクトリしか出力しない
hoge
ls
passwd
passwd2
passwdln
passwdn
piyo/
piyo.data
puni/

すぜ> svn ls -v
    119 suse                  May 05 02:39 ./
     87 centos7            10 May 04 20:14 .hind
     99 centos7           414 May 04 20:51 README
     49 suse             1305 May 03 20:09 clockn
    119 suse                  May 05 02:39 dir/  ←やはり第一階層しか出力しない
     79 suse               29 May 04 02:56 hoge
     59 suse           110216 May 03 23:16 ls
     76 suse             1736 May 04 02:23 passwd
     42 centos7          1662 May 03 18:58 passwd2
     43 suse               11 May 03 19:33 passwdln
     76 suse             1736 May 04 02:23 passwdn
     26 dagyah                May 02 20:26 piyo/
     53 centos7            70 May 03 21:59 piyo.data
     58 centos7               May 03 22:32 puni/

すぜ> svn ls dir/
1.txt
dir_1/    ←やはり第一階層しか出力しない(dir_1/1_1.txtは出力しない)

すぜ> svn ls -l dir/      ←ちなみにこのような「-l」オプションは無い
svn: Non-numeric limit argument given

 

・ブランチの中の末端ディレクトリがカレントディレクトリ

すぜ> cd dir/dir_1
すぜ> pwd

/svn/chinko/20180504_2/dir/dir_1     ←末端ディレクトリがカレントディレクトリ

すぜ> svn ls
1_1.txt

※svn lsコマンドは引数としてパスを指定しない場合は、カレントディレクトリの第一階層にあるファイルまたはディレクトリだけ出力する。

 

・svn lsコマンドの引数が絶対パスの場合は?

※svn lsコマンドは引数としてパスを指定した場合は、引数として指定したパスの第一階層にあるファイルまたはディレクトリだけ出力する。

 

【検証17-7】 引数無しの svn diff コマンドはカレントディレクトリによってどう変わるか

・その前に svn diff の特性把握

すぜ> cd /svn/chinko
すぜ> pwd

/svn/chinko

すぜ> svn up
At revision 121.

すぜ> svn ci -m ""
すぜ>

ファイルを変更して保存する

すぜ> echo `LANG=C date` add to chinko/20180504/dir/dir_1/1_1.txt from `hostname` >> 20180504/dir/dir_1/1_1.txt
すぜ> tail -n 1 20180504/dir/dir_1/1_1.txt

Sat May 5 04:24:08 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

すぜ> svn diff
Index: 20180504/dir/dir_1/1_1.txt
===================================================================
--- 20180504/dir/dir_1/1_1.txt  (revision 121)
+++ 20180504/dir/dir_1/1_1.txt  (working copy)
@@ -10,3 +10,4 @@
 Sat May 5 02:38:19 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
 Sat May 5 02:42:46 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
 Sat May 5 03:23:52 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
+Sat May 5 04:24:08 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

→差分が検知された

コミットする

すぜ> svn ci -m ""
Sending        20180504/dir/dir_1/1_1.txt
Transmitting file data .
Committed revision 122.

すぜ> svn diff
すぜ>

→差分が無くなった

※「svn diff」はsvnサーバ上のリポジトリと作業コピーの差分を検知する。svn upは不要

すぜ> svn up
At revision 122.

すぜ> svn diff
すぜ>

 

・チェックアウト地点がカレントディレクトリ

→上記の通り、カレントディレクトリ配下のファイルとsvnサーバ上のリポジトリに差分があれば検知される。

 

・どれかブランチの一つがカレントディレクトリ

すぜ> cd 20180504_2
すぜ> pwd

/svn/chinko/20180504_2

すぜ> echo `LANG=C date` add to chinko/20180504/dir/dir_1/1_1.txt from `hostname` >> ../20180504/dir/dir_1/1_1.txt

すぜ> tail -n 1 ../20180504/dir/dir_1/1_1.txt
Sat May 5 04:34:07 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

すぜ> svn diff
すぜ>
                  ←差分無し

※svn diff コマンドは引数のパスを指定しないと、カレントディレクトリより下流のファイルとリポジトリの差分しか検知しかしない。

 

・ブランチの中の末端ディレクトリがカレントディレクトリ

すぜ> cd dir/dir_1
すぜ> pwd

/svn/chinko/20180504_2/dir/dir_1     ←末端ディレクトリがカレントディレクトリ

すぜ> cd dir/dir_1/
すぜ> pwd

/svn/chinko/20180504_2/dir/dir_1

すぜ> echo `LANG=C date` add to chinko/20180504_2/dir/1.txt from `hostname` >> ../1.txt
すぜ> tail -n 1 ../1.txt

Sat May 5 04:46:20 JST 2018 add to chinko/20180504_2/dir/1.txt from suse

すぜ> svn diff
すぜ>
               ←差分無し

※svn diff コマンドは引数のパスを指定しないと、カレントディレクトリより下流のファイルとリポジトリの差分しか検知しかしない。

すぜ> svn diff /svn/chinko/20180504_2/dir/dir_1/
すぜ>
              ←差分無し
すぜ> svn diff /svn/chinko/20180504_2/dir
Index: /svn/chinko/20180504_2/dir/1.txt
===================================================================
--- /svn/chinko/20180504_2/dir/1.txt    (revision 122)
+++ /svn/chinko/20180504_2/dir/1.txt    (working copy)
@@ -1 +1,2 @@
 1
+Sat May 5 04:46:20 JST 2018 add to chinko/20180504_2/dir/1.txt from suse

 

・svn -r オプション

すぜ> svn st -v /svn/chinko/20180504 | grep 1.txt
M              122      122 suse         /svn/chinko/20180504/dir/dir_1/1_1.txt
M              122       45 centos7      /svn/chinko/20180504/dir/1.txt

現在上記の2つのファイルが編集したけどコミットは未済。

すぜ> svn diff /svn/chinko/20180504/dir/dir_1/1_1.txt
Index: /svn/chinko/20180504/dir/dir_1/1_1.txt
===================================================================
--- /svn/chinko/20180504/dir/dir_1/1_1.txt      (revision 122)
+++ /svn/chinko/20180504/dir/dir_1/1_1.txt      (working copy)
@@ -11,3 +11,4 @@
 Sat May 5 02:42:46 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
 Sat May 5 03:23:52 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
 Sat May 5 04:24:08 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
+Sat May 5 04:34:07 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

すぜ> svn diff /svn/chinko/20180504/dir/1.txt
Index: /svn/chinko/20180504/dir/1.txt
===================================================================
--- /svn/chinko/20180504/dir/1.txt      (revision 122)
+++ /svn/chinko/20180504/dir/1.txt      (working copy)
@@ -1 +1,2 @@
 1
+Sat May 5 04:43:58 JST 2018 add to chinko/20180504/dir/1.txt from suse

すぜ> svn diff -r r122:r121 /svn/chinko/20180504/dir/1.txt
すぜ>
                  ←差分無し
すぜ> svn diff -r r122:r121 /svn/chinko/20180504/dir/dir_1/1_1.txt
Index: /svn/chinko/20180504/dir/dir_1/1_1.txt
===================================================================
--- /svn/chinko/20180504/dir/dir_1/1_1.txt      (revision 122)
+++ /svn/chinko/20180504/dir/dir_1/1_1.txt      (revision 121)
@@ -10,4 +10,3 @@
 Sat May 5 02:38:19 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
 Sat May 5 02:42:46 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
 Sat May 5 03:23:52 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse
-Sat May 5 04:24:08 JST 2018 add to chinko/20180504/dir/dir_1/1_1.txt from suse

 

【分かったこと】

・svnコマンドの引数としてパスを指定した場合は、カレントディレクトリがどこであっても、引数で指定したパスを起点とした場所から実行される。

・svnコマンドの引数としてパスを指定しなかった場合は、カレントディレクトリを起点とした場所から実行される。

・svnコマンドの引数としてパスを指定しなかった場合は、カレントディレクトリがローカルリポジトリ外の場合は実行されない。

・svnコマンドの引数としてパスを指定した場合は、カレントディレクトリがローカルリポジトリ外でも実行できる。