削除・移動・名前の変更

CVS と違い、Subversion はファイル・フォルダの名前の変更や移動ができます。そのため TortoiseSVN のサブメニューには、削除や名前の変更のメニューエントリがあります。

図4.29 バージョン管理下のファイルに対するエクスプローラのコンテキストメニュー

バージョン管理下のファイルに対するエクスプローラのコンテキストメニュー


ファイル・フォルダの削除

subversionから、ファイルやフォルダを削除するには、TortoiseSVN削除 としてください。

ファイルを TortoiseSVN削除 すると、作業コピーからすぐに削除し、次のコミットでリポジトリから削除するようにマークを付けます。ファイルの親フォルダには 削除 オーバーレイアイコンを表示します。変更をコミットする前なら、親フォルダで TortoiseSVN元に戻す で元に戻せます。

フォルダを TortoiseSVN削除 すると、作業コピーには残りますが、オーバーレイアイコンが変わり削除のマークが付きます。変更をコミットする前なら、そのフォルダで TortoiseSVN元に戻す で元に戻せます。この違いは、Subversion の部分によるもので、TortoiseSVN によるものではありません。

リポジトリから削除したい、でもバージョン管理外のファイル・フォルダとして保持しておきたい場合には、拡張コンテキストメニュー削除 - ローカルファイルを保持 をお使いください。エクスプローラのリストペイン (右ペイン) で Shift キーを押したまま、項目を右クリックすると、拡張コンテキストメニューを表示します。

TortoiseSVN コンテキストメニューを使用しないで、ファイルをエクスプローラで削除した場合、コミットダイアログにそのファイルを表示し、コミットの前にバージョン管理から削除するかどうか確認することになります。しかし、作業コピーを更新する場合、Subversion は紛失ファイルを特定し、リポジトリから最新のファイルを取得して置き換えます。バージョン管理下のファイルを削除する必要がある場合は、常に TortoiseSVN削除 を使用するようにしてください。そうすると Subversion がファイルを本当に削除したいのかどうか推測する必要がなくなります。

TortoiseSVN コンテキストメニューを使用しないで、フォルダをエクスプローラで削除した場合、作業コピーを破損してしまいコミットできなくなります。作業コピーを更新すると、Subversion はリポジトリから最新のフォルダを取得し、紛失したフォルダと置き換えます。そのため、フォルダを削除する正しい方法は、TortoiseSVN削除 を使用することです。

削除したファイルやフォルダの取り消し

削除したファイルやフォルダがあり、その変更をリポジトリにコミットしているなら、通常のTortoiseSVN元に戻す では、元に戻せません。しかし、ファイルやフォルダが完全に失われたわけではありません。ファイルやフォルダを削除したリビジョンがわかっているなら (わからなければログダイアログで探してください) 、リポジトリブラウザを開きそにリビジョンに切り替えてください。削除したファイル・フォルダを選び、右クリックして コンテキストメニューコピー... を選択してください。コピー先は作業コピーのパスにしてください。

ファイルやフォルダの移動

ファイル・フォルダの名前の変更をその場で行う場合、コンテキストメニュー名前の変更... を使用してください。新しい項目名を入力すると完了します。

別のサブフォルダへなど、作業コピー内に移動する場合、右ドラッグ & ドロップハンドラを以下のように使用してください。

  1. 移動したいファイル・ディレクトリを選択してください。

  2. それを作業コピー内の新しい場所に 右ドラッグ してください。

  3. 右マウスボタンを放します。

  4. ポップアップメニューの コンテキストメニューSVN バージョン管理ファイルをここに移動する を選択してください。

親フォルダでのコミット

名前の変更や移動は、追加に続いて削除として動作するため、名前の変更・移動したファイルの親フォルダに対してコミットしなければなりません。そうでないと、名前の変更・移動したファイルがコミットダイアログに表示されません。名前の変更・移動した部分を除いてコミットしないと、リポジトリの陰に隠れてしまい、共同作業者が更新すると、古いファイルが削除されません。つまり、新旧のファイルの両方がある状態になります。

このとき、フォルダ内のファイルにいずれの変更を加える前に、フォルダの名前の変更をコミットしなければなりません。そうしないと、作業コピーが台無しになってしまいます。

また、リポジトリブラウザを用いて、項目を移動できます。詳細は 「リポジトリブラウザ」 をご覧ください。

外部参照の SVN 移動はしないでください

svn:externals で作成したフォルダに対して、TortoiseSVN 移動名前の変更 コマンドを実行するべきではありません。このアクションは外部参照項目を親リポジトリから削除してしまい、おそらく他の人たちを驚かせてしまいます。外部参照フォルダを移動する必要があるときには、通常の (シェルでの) 移動を行い、移動元と異動先それぞれ親フォルダに対して svn:externals 属性を調整してください。

ファイル名の大文字小文字の変換

Windows 上の Subversion で、ファイル名を文字の大小のみの変更はやりにくいです。変更中の短時間でも、両方のファイル名が同時に存在してしまうためです。Windows は、文字の大小を区別しないファイルシステムを使用しており、通常の「名前の変更」コマンドは使用できません。

幸い、ログの履歴を失わずにファイルの名前を変更する、(少なくとも) 2 つの有効な解決法があります。重要なのは Subversion で名前を変更することです。単にエクスプローラで名前を変更すると、作業コピーが壊れてしまいます!

解決法 A) (お勧め)

  1. 作業コピーの変更をコミットします。

  2. リポジトリブラウザを使用して、ファイル名を UPPERcase から upperCASE へ直接変更します。

  3. 作業コピーを更新します。

解決法 B)

  1. TortoiseSVN のサブメニューにある名前の変更コマンドで、UPPERcase から UPPERcase_ へ変更します。

  2. 変更をコミットします。

  3. UPPERcase_ から upperCASE へ名前を変更します。

  4. 変更をコミットします。

ファイル名の大文字小文字が競合した場合の対処

リポジトリ内に、文字の大小のみが異なる同じ名前のファイル (例: TEST.TXTtest.txt) がある場合、Windows のクライアントで、親ディレクトリの更新・チェックアウトができなくなります。Subversion は文字の大小を区別していますが、Windows はそうではないからです。

これは 2 人の人が別々の作業コピーから、同じ名前で文字の大小のみ異なるファイルをコミットした場合に発生します。また Linux のような、文字の大小を区別するファイルシステムを使用するシステムからコミットした場合も、発生します。

この場合どちらかを残し、一方をリポジトリから削除 (または名前変更) するよう決めなければなりません。

2 つのファイルが同じ名前にならないようにする方法

競合するようなチェックインが起きないようにするサーバスクリプトが、http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ にあります。

ファイルの名前変更の修復

時に、親切な IDE がリファクタリングの一環でファイルの名前変更を行います。そしてもちろん Subversion に通知しません。変更をコミットすると、Subversion には古いファイル名を紛失ファイル、新しいファイル名をバージョン管理外のファイルとして見えることになります。新しいファイルを追加することもできますが、Subversion にはそのファイルの関連が分かりませんから、追跡履歴を失うことになります。

もっと良い方法は、Subversion に実際には名前変更であったと通知することです。これはコミット ダイアログと 変更をチェック ダイアログで行えます。単に古い名前 (紛失) と新しい名前 (バージョン管理外) を選択し、コンテキストメニュー移動を修復 を使用して、2 つのファイルが名前の変更であったと通知します。

バージョン管理外フォルダの削除

通常、生成した全ファイルといった無視リストは、Subversion が無視します。しかし、もしクリーンビルドを提供するため、無視されるファイルをすべてクリアするとしたらどうでしょうか? 通常、makefile を設定しているでしょうが、makefile のデバッグやビルドシステムを変更する際に、デッキをクリアする方法があると便利です。

TortoiseSVN はそのような場合に 拡張コンテキストメニューバージョン管理外のファイルを削除する... を使用するという選択肢を提供しています。エクスプローラのリストペイン (右ペイン) で Shift キーを押したまま、フォルダを右クリックすると、拡張コンテキストメニューを表示します。これにより作業コピーにあるバージョン管理外ファイルの一覧ダイアログが現れます。削除するファイルを選択状態・未選択状態にできます。

そのようなファイルを削除した際、ゴミ箱を使用していますので、もし間違ってバージョン管理化におくはずのファイルを削除してしまっても、元に戻せます。