Subversionは、リポジトリからファイルを完全に削除することはありません。実際、これはよく要求された機能です。
svn delete
またはを実行するsvn rm
と、ファイルは作業コピーに含まれなくなります。しかし、それは間違いなくまだそこにあります。おそらく、ファイルが完全に削除されたことを納得させるのは、次のようなことをしているということです。
$ svn co http://repo/svn/project
[...]
$ cd project
$ svn del foo.txt
$ svn commit -m "Removed foo.txt"
committed version 12345
$ svn ls http://repo/svn/project/foo.txt
No such file
これは本当です。ファイルfoo.txt
は、Subversionの最新リビジョンには含まれていません。
多分あなたはこのようなことをしました:
ファイルを削除したため、ファイルがリビジョン12345に含まれていないことがわかりました。ただし、リビジョン12344を見てみましょう。ファイルはそのリビジョンにまだ存在しているはずです。
$ svn ls -r12344 http://repo/svn/project/foo.txt
No such file
見てください、リビジョンはリビジョン12344にありません。したがって、完全に削除されています。
それほど速くはない、バンキー。要求したのは、リポジトリレイアウトの現在のリビジョンのファイルのリビジョン12344です。あなたがする必要があるのは、ファイルリビジョンとリポジトリリビジョンの違いを理解することです。これはリビジョンペギングと呼ばれ、Subversionではより難しい概念の1つになる可能性があります。
見たいのは、REPOSITORYの12,344番目のリビジョンのファイルです。これを行うに@
は、リポジトリURLの最後にを配置します。
$ svn ls http://repo/svn/project/foo.txt@12344
foo.txt
これで、そのリポジトリレイアウトの12,344番目のリビジョンにあるため、ファイルを確認できます。ファイルの削除を取り消す必要がある場合は、リポジトリレイアウトのペグされたリビジョンから、必要なファイルのリビジョンをいつでもコピーできます。
$ svn cp -r12344 -m"undeleting foo.txt" \
http://repo/svn/project/foo.txt@12344 \
http://repo/svn/project
これfoo.txt
により、リポジトリの12,344番目のリビジョンにあるファイルのリビジョン12344が、リポジトリの現在のリビジョンにコピーされます。
削除されたファイルを見つける最も簡単な方法は、以下を確認することですsvn log
。
$ svn log -rHEAD -v http://repo/svn/project/foo.txt
r12345 | dweintraub | [...]
Removed foo.txt
D /project/foo.txt
-----------------------------------------------------
リビジョン12345でファイル`foo.txtを削除しました。したがって、リビジョン12344でもまだ存在していました。ファイルの削除を取り消す必要があるかどうかを知っておくとよいでしょう。
はい、この場合、ファイルとSubversionレイアウトの両方が同じであるため、それらのリビジョンを要求する必要があるのはばかげているように見えるかもしれません。ただし、常にそうなるとは限りません。ファイルは移動され、コピー、削除、および削除解除されます。必要なファイルのバージョンは、探しているリポジトリのバージョンと同じではない可能性があります。