CVS と違い、Subversion はファイル・フォルダの名前の変更や移動ができます。そのため TortoiseSVN のサブメニューには、削除や名前の変更のメニューエントリがあります。
subversionから、ファイルやフォルダを削除するには、
→ としてください。ファイルを 「削除」 オーバーレイアイコンを表示します。変更をコミットする前なら、親フォルダで → で元に戻せます。
→ すると、作業コピーからすぐに削除し、次のコミットでリポジトリから削除するようにマークを付けます。ファイルの親フォルダにはフォルダを
→ すると、作業コピーには残りますが、オーバーレイアイコンが変わり削除のマークが付きます。変更をコミットする前なら、そのフォルダで → で元に戻せます。この違いは、Subversion の部分によるもので、TortoiseSVN によるものではありません。リポジトリから削除したい、でもバージョン管理外のファイル・フォルダとして保持しておきたい場合には、Shift キーを押したまま、項目を右クリックすると、拡張コンテキストメニューを表示します。
→ をお使いください。エクスプローラのリストペイン (右ペイン) でTortoiseSVN コンテキストメニューを使用しないで、ファイルをエクスプローラで削除した場合、コミットダイアログにそのファイルを表示し、コミットの前にバージョン管理から削除するかどうか確認することになります。しかし、作業コピーを更新する場合、Subversion は紛失ファイルを特定し、リポジトリから最新のファイルを取得して置き換えます。バージョン管理下のファイルを削除する必要がある場合は、常に → を使用するようにしてください。そうすると Subversion がファイルを本当に削除したいのかどうか推測する必要がなくなります。
TortoiseSVN コンテキストメニューを使用しないで、フォルダをエクスプローラで削除した場合、作業コピーを破損してしまいコミットできなくなります。作業コピーを更新すると、Subversion はリポジトリから最新のフォルダを取得し、紛失したフォルダと置き換えます。そのため、フォルダを削除する正しい方法は、 → を使用することです。
削除したファイルやフォルダがあり、その変更をリポジトリにコミットしているなら、通常の
→ では、元に戻せません。しかし、ファイルやフォルダが完全に失われたわけではありません。ファイルやフォルダを削除したリビジョンがわかっているなら (わからなければログダイアログで探してください) 、リポジトリブラウザを開きそにリビジョンに切り替えてください。削除したファイル・フォルダを選び、右クリックして → を選択してください。コピー先は作業コピーのパスにしてください。ファイル・フォルダの名前の変更をその場で行う場合、
→ を使用してください。新しい項目名を入力すると完了します。別のサブフォルダへなど、作業コピー内に移動する場合、右ドラッグ & ドロップハンドラを以下のように使用してください。
移動したいファイル・ディレクトリを選択してください。
それを作業コピー内の新しい場所に 右ドラッグ してください。
右マウスボタンを放します。
ポップアップメニューの
→ を選択してください。名前の変更や移動は、追加に続いて削除として動作するため、名前の変更・移動したファイルの親フォルダに対してコミットしなければなりません。そうでないと、名前の変更・移動したファイルがコミットダイアログに表示されません。名前の変更・移動した部分を除いてコミットしないと、リポジトリの陰に隠れてしまい、共同作業者が更新すると、古いファイルが削除されません。つまり、新旧のファイルの両方がある状態になります。
このとき、フォルダ内のファイルにいずれの変更を加える前に、フォルダの名前の変更をコミットしなければなりません。そうしないと、作業コピーが台無しになってしまいます。
また、リポジトリブラウザを用いて、項目を移動できます。詳細は 「リポジトリブラウザ」 をご覧ください。
svn:externals
で作成したフォルダに対して、TortoiseSVN 移動 や 名前の変更 コマンドを実行するべきではありません。このアクションは外部参照項目を親リポジトリから削除してしまい、おそらく他の人たちを驚かせてしまいます。外部参照フォルダを移動する必要があるときには、通常の (シェルでの) 移動を行い、移動元と異動先それぞれ親フォルダに対して svn:externals
属性を調整してください。
Windows 上の Subversion で、ファイル名を文字の大小のみの変更はやりにくいです。変更中の短時間でも、両方のファイル名が同時に存在してしまうためです。Windows は、文字の大小を区別しないファイルシステムを使用しており、通常の「名前の変更」コマンドは使用できません。
幸い、ログの履歴を失わずにファイルの名前を変更する、(少なくとも) 2 つの有効な解決法があります。重要なのは Subversion で名前を変更することです。単にエクスプローラで名前を変更すると、作業コピーが壊れてしまいます!
解決法 A) (お勧め)
作業コピーの変更をコミットします。
リポジトリブラウザを使用して、ファイル名を UPPERcase から upperCASE へ直接変更します。
作業コピーを更新します。
解決法 B)
TortoiseSVN のサブメニューにある名前の変更コマンドで、UPPERcase から UPPERcase_ へ変更します。
変更をコミットします。
UPPERcase_ から upperCASE へ名前を変更します。
変更をコミットします。
リポジトリ内に、文字の大小のみが異なる同じ名前のファイル (例: TEST.TXT
と test.txt
) がある場合、Windows のクライアントで、親ディレクトリの更新・チェックアウトができなくなります。Subversion は文字の大小を区別していますが、Windows はそうではないからです。
これは 2 人の人が別々の作業コピーから、同じ名前で文字の大小のみ異なるファイルをコミットした場合に発生します。また Linux のような、文字の大小を区別するファイルシステムを使用するシステムからコミットした場合も、発生します。
この場合どちらかを残し、一方をリポジトリから削除 (または名前変更) するよう決めなければなりません。
競合するようなチェックインが起きないようにするサーバスクリプトが、http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ にあります。
時に、親切な IDE がリファクタリングの一環でファイルの名前変更を行います。そしてもちろん Subversion に通知しません。変更をコミットすると、Subversion には古いファイル名を紛失ファイル、新しいファイル名をバージョン管理外のファイルとして見えることになります。新しいファイルを追加することもできますが、Subversion にはそのファイルの関連が分かりませんから、追跡履歴を失うことになります。
もっと良い方法は、Subversion に実際には名前変更であったと通知することです。これはコミット ダイアログと 変更をチェック ダイアログで行えます。単に古い名前 (紛失) と新しい名前 (バージョン管理外) を選択し、 → を使用して、2 つのファイルが名前の変更であったと通知します。
通常、生成した全ファイルといった無視リストは、Subversion が無視します。しかし、もしクリーンビルドを提供するため、無視されるファイルをすべてクリアするとしたらどうでしょうか? 通常、makefile を設定しているでしょうが、makefile のデバッグやビルドシステムを変更する際に、デッキをクリアする方法があると便利です。
TortoiseSVN はそのような場合に Shift キーを押したまま、フォルダを右クリックすると、拡張コンテキストメニューを表示します。これにより作業コピーにあるバージョン管理外ファイルの一覧ダイアログが現れます。削除するファイルを選択状態・未選択状態にできます。
→ を使用するという選択肢を提供しています。エクスプローラのリストペイン (右ペイン) でそのようなファイルを削除した際、ゴミ箱を使用していますので、もし間違ってバージョン管理化におくはずのファイルを削除してしまっても、元に戻せます。