15

「svn switch」の動作について明確にする必要があります。SVN バージョン 1.6.5 を使用しています。

マニュアルを読んで、動作についての私の理解は、ローカルの変更が保持されるということです。したがって、ローカルに追加されたファイルは、svn switch.

ただし、同僚と私は、スイッチによって新しいファイルが削除される例をいくつか見てきました。残念ながら、これを再現する方法はわかりません。

svn switchがローカルに追加されたファイルを削除する状況 (機能または既知のバグ) はありますか?

4

3 に答える 3

11

コミットされていない変更がある場合、切り替えるのは悪い考えだと思います。まず、ローカルの変更を でブランチにコミットしてからsvn cp . <branch URL>、切り替えます。そうしないと、非常にトリッキーな状況に陥る可能性があります。

切り替え先のバージョンで、ローカルに追加したファイルが既に存在し、完全に異なっていると想像してください。または、切り替え先のバージョンのファイルと適切にマージできないファイルのディレクトリ全体を追加した場合はどうなるでしょうか。あなたは本当にその1つの大きな衝突を望んでいますか?

で示される「S」状態がありsvn statusます。これは、ソース ツリーのさまざまな部分にさまざまなバージョンがあることを意味します。これは、切り替え中に SVN がローカルの変更と混同されたときに発生します。スイッチの途中で壊れてしまうだけで、回復するのが首の痛みです。私に数回起こりました。そのため、実行する前に作業コピーがローカルで変更されていないことを常に確認していますsvn sw

于 2009-12-11T10:54:22.713 に答える
7

ローカルに追加されたファイルやバージョン管理されていないファイルは削除しないでください。エッジ ケースは、スイッチによってディレクトリが移動または削除される場合ですが、その場合はツリーの競合が発生するはずです。

ツリーの競合があると思われる場合、私がよく行うことは、現在の変更のパッチを保存することです。そうすれば、作業内容を失うことなく、必要に応じて作業コピーを消去してやり直すことができることがわかります。

svn diff > ../somewhere/safe/save.diff
# Break stuff
patch -p0 < ../somewhere/safe/save.diff
于 2009-12-11T11:01:16.477 に答える
0

の動作はsvn switchと非常によく似てsvn updateいます。スイッチのターゲットが、作業コピーに関していくつかのファイルが欠落しているパスである場合、それらのファイルは作業コピーから削除されます。

Ivan が言ったように、変更をコミットしてから切り替える必要があります。

于 2009-12-11T11:02:08.940 に答える