(Subversion)このファイルはどのレビジョンか(svn)

9-2.バージョン管理

元々svn管理されていて、何らかの理由で管理から外れたファイルがあるとします。

takk@deb8:~/a/copy$ ls
func_07.c
takk@deb8:~/a/copy$ ls -l
合計 4
-rw-r--r-- 1 takk takk 409  2月 22 20:38 func_07.c
takk@deb8:~/a/copy$

このファイルは、元々どのレビジョンのファイルなのでしょうか。

takk@deb8:~/a/work$ ls
func_00.c  func_02.c  func_04.c  func_06.c  func_08.c  main.c
func_01.c  func_03.c  func_05.c  func_07.c  func_09.c  proto.h
takk@deb8:~/a/work$ svn info
パス: .
Working Copy Root Path: /home/takk/a/work
URL: file:///home/takk/a/repos
Relative URL: ^/
リポジトリのルート: file:///home/takk/a/repos
リポジトリ UUID: 3a74390e-897f-40d9-97c3-4158fc9d3bdf
リビジョン: 13
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: takk
最終変更リビジョン: 13
最終変更日時: 2017-02-21 20:50:13 +0900 (2017年02月21日 (火))

takk@deb8:~/a/work$ 

完全一致するファイルを見つけたいので、md5sum等の結果が一致するレビジョンのファイルを見つけることにします。

takk@deb8:~/a/work$ md5sum *
927295cebe67218d51ea15f83315e906  func_00.c
196eccf14c73bcc73c6749f492fc2c0b  func_01.c
d63ae12809a910f831fc2a5618a574e3  func_02.c
11c054d9898f5230f980ed8f9e8d6c4d  func_03.c
8a968bbbdff31e231946a3cc9121e049  func_04.c
d413c138fe576d9f89f6a18dfa389c78  func_05.c
73277340cd1688717e5fbf8bdf753060  func_06.c
36acd2bb891fbb5e2bbbae7f7e717c95  func_07.c
072bf4f6840d5f8a7f9448215b00e712  func_08.c
90f88aa9afab4e420d0caeb2b05eac04  func_09.c
787da955fb3310fa3520282d9d8389c1  main.c
a85c65b7bab77350ca7661f89ff68aaa  proto.h
takk@deb8:~/a/work$

上記を各レビジョンで繰り返し求めてリストを作ります。

takk@deb8:~/a/work$ for i in {1..13};do svn update -r$i;echo r$i>>../list.txt;md5sum *>>../list.txt;done
Updating '.':
U    func_01.c
U    func_02.c
U    func_03.c
U    func_04.c
U    func_07.c
U    func_09.c
リビジョン 1 に更新しました。
Updating '.':
U    func_03.c

(省略)

リビジョン 13 に更新しました。
takk@deb8:~/a/work$ 

後はgrepするだけです。複数探したい場合のことを考えてパターンはファイルに保存しておきます。

takk@deb8:~/a/copy$ (echo ^r;md5sum *)>search
takk@deb8:~/a/copy$ grep -f search ../list.txt
r1
r2
r3
3866931569f35727ff698b1a459b5e72  func_07.c
r4
3866931569f35727ff698b1a459b5e72  func_07.c
r5
r6
r7
r8
r9
r10
r11
r12
r13
takk@deb8:~/a/copy$ 

レビジョン3と4のファイルが一致しました。念の為diffしてみましょう。

takk@deb8:~/a/copy$ svn cat -r3 ../work/func_07.c | diff - func_07.c
takk@deb8:~/a/copy$ svn cat -r4 ../work/func_07.c | diff - func_07.c

一致しているときは、何も表示されないので心配ですね。
不一致のレビジョンも見てみましょう。

takk@deb8:~/a/copy$ svn cat -r5 ../work/func_07.c | diff - func_07.c
9d8
<   func_075();
takk@deb8:~/a/copy$ 

レビジョン5の場合は、差分が出たので、あってそうですね。

コメント

タイトルとURLをコピーしました