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