元々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の場合は、差分が出たので、あってそうですね。
コメント