web-dev-qa-db-ja.com

ファイルを削除せずにバージョン管理から削除する方法は?

svn rm fileを実行すると、ファイルはローカルの作業コピーから削除されます。

私が今していることは:

$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file

svn rmを使用しているときにsvnがローカルファイルも削除しないようにするにはどうすればよいですか?

125
Juanjo Conti

--keep-localコマンドラインオプションが必要です。これにより、ファイルシステムから削除せずに、バージョン管理からファイルが削除されます。

$ svn rm --keep-local my_important_file

注:--keep-localは、コピーのsvn rmのみに影響します。他のユーザーは、変更によってローカルコピーとリポジトリの間に競合がない限り、ファイルの独自のローカルコピーを削除する場合があります。これは望ましい結果ではない場合があります。以下のコメントを参照してください。

268

どこでもローカルに削除せずにSVNからファイルを削除することはよくある問題です。顕著な例の1つは、Eclipseプロジェクトの.classpathファイルです。プロジェクトで使用されるすべてのマシンが同じEclipseとJavaインストールを持っている限り、この構成ファイルをSVNの下に置くことは素晴らしいことです。この条件に違反すると、コミットが他のEclipseプロジェクトを破壊し始めます。これは、どこでもistを削除せずにSVNからファイルを削除する必要があるポイントです。

svn rm --keep-local .classpath

その時点で1台のマシンで完全にジョブを実行します。

問題は、他のマシンがそのファイルを失う(更新時)か、復活させる(コミット時)ことです。 SVNの欠陥は、リポジトリ内の--keep-localを処理したり、他の作業コピーに伝播したりすることではありません。したがって、上記の他のすべてのマシンでは、コミットまたは更新の前にコマンドを実行する必要があります。

もちろん、これはせいぜい90%で動作します。削除とバージョン管理は突然行われます。私の解決策は、すべてのマシンに直接または間接的にアクセスしてもらうことです

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

これは非常にoutいため、ほとんど「ソリューション」と呼ばれません。それにもかかわらず、それはその後の事故の迅速な修理を常に可能にしました。

12