6

SubversionのフロントエンドとしてSmartSVNを使用しています。時折、リポジトリの制御下にあるソースファイルが冗長になることがあります-私は単にそれをもはや必要としません。このような場合、作業コピーを更新してもリポジトリからファイルがフェッチされなくなるという意味で、削除したいと思います。しかし、ファイルの履歴(つまり、以前にコミットされたリビジョン)をリポジトリに残したいのです。

私が正しく覚えていれば、SmartSVNのRemoveコマンドはファイルの履歴を削除します(私は明らかにこれを確認することを躊躇しています)。間違えたら訂正してください。それ以外の場合:どのようにして目的の効果を達成できますか?

編集:ダミーファイルを使用して、RemoveSVNコントロールからファイルを完全に削除し、その履歴が表示されなくなることを確認しました。したがって、問題は現実のものです。

4

3 に答える 3

5

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レイアウトの両方が同じであるため、それらのリビジョンを要求する必要があるのはばかげているように見えるかもしれません。ただし、常にそうなるとは限りません。ファイルは移動され、コピー、削除、および削除解除されます。必要なファイルのバージョンは、探しているリポジトリのバージョンと同じではない可能性があります。

于 2012-11-13T00:46:15.993 に答える
1

SmartSVNの場合:

[ファイル/フォルダ]->右クリック->[リポジトリブラウザで開く]->削除するファイル/フォルダを右クリック->[削除...]を選択します

于 2015-04-27T13:26:02.597 に答える
0

私はDavidW.の答えを受け入れました-それはSubversionの観点から物事の状態を正しく説明していました(コマンドラインベース)。私はSmartSVNをGUIフロントエンドとして使用しているので、この観点から適切な情報を追加したいと思います。

SmartSVNを使用して削除されたファイルの履歴を表示するには、

  • (プロジェクトウィンドウではなく)リポジトリブラウザを開きます
  • Repository | Show Revisionコマンドを発行します
  • Revisionラジオボタンを選択します。次にSelectボタンをクリックします
  • 表示するリポジトリリビジョンを選択します

選択したリポジトリバージョンにファイルが存在する場合は、ファイルが表示されます。

選択したフォルダによって、表示されるファイル(プロジェクトウィンドウのようにすべてのファイルを表示する方法はないようです)と、選択するために表示されるリポジトリリビジョンが決まることに注意してください。

于 2012-11-13T16:47:36.877 に答える