2009-12-11 20 views
12

"svn switch"の動作について何らかの明確化が必要です。私はSVNバージョン1.6.5を使用しています。'svn switch'はローカルで追加されたファイルを削除しますか?

マニュアルを読むことから、動作の理解はローカル変更が保持されることです。だから、svn switchの後に、ローカルに追加されたファイルが私の作業ディレクトリにまだ存在すると思います。

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

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

答えて

11

コミットされていない変更があったときに切り替えるのは悪い考えです。まず、ローカル変更をsvn cp . <branch URL>でブランチにコミットし、次に切り替えます。 非常にになる可能性があります。

切り替えようとしているバージョンでは、ローカルに追加したファイルが既に存在し、まったく違うとします。また、ファイルのディレクトリ全体を追加した場合は、切り替えようとしているバージョンのファイルと適切にマージできません。あなたは本当にその一つの大きな葛藤を望んでいますか?

svn statusで示される「S」状態です。ソースツリーのさまざまな部分が異なるバージョンを持つことを意味します。それは、SVNがスイッチ中のローカル変更と混同されている場合に起こります。それはちょうどスイッチの真ん中で壊れてしまい、それから回復する頸部の痛みです。何度か私に起こった。そのため、svn swを実行する前に私の作業コピーにローカル修正がないことを常に確認しています。

+0

ありがとうIvan。 "svn cpを使ってブランチにローカル変更をコミットする"と言うとき、おそらく私は一時的な開発者固有のブランチを使うべきでしょうか?つまり、私の変更はまだ完了していないので、最終的に切り替えることはできません。 –

+0

はい。それはあなたの個人的な「進行中の作業」ブランチのようなものでしょう。 –

+0

あなたが切り替えている理由は、あなたの仕事をチェックインするので、リポジトリ内のあなたのプロジェクトへのパスが(管理者の移動のために)変更された場合、これは実際には機能しません。 – badbod99

6

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

私はしばしば、ツリーの競合が考えられる場合、現在の変更のパッチを保存することです。それから私は私の仕事のコピーを拭き取り、必要であれば仕事を失うことなく再開できることを知っています。

svn diff > ../somewhere/safe/save.diff 
# Break stuff 
patch -p0 < ../somewhere/safe/save.diff 
+0

はそれを考えていなかった: – Pondidum

+0

ありがとうアンドリュー。私は過去にそれを試みましたが、svn diffの制限は新しいファイルを表示しないことです - 変更されたファイルのみを表示します。 –

+3

ファイルを 'svn add 'すると、ファイルをチェックインする前にdiffに表示されます。 –

0

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

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

関連する問題