Subversion では、ファイルやフォルダーの名前の変更や移動が可能です。そのため TortoiseSVN のサブメニューには、「削除」や「名前を変更」コマンドがあります。
Subversionからファイルやフォルダーを削除するには、
→ を実行してください。「削除」 オーバーレイアイコンを表示します。変更をコミットする前ならば、親フォルダーに対して → を実行すると、ファイルを取り戻すことができます。
→ を実行すると、ファイルやフォルダーは作業コピーからすぐに削除され、次のコミットでリポジトリから削除するようにマークされます。項目の親フォルダーには項目をリポジトリから削除しても、バージョン管理外のファイルやフォルダーとして残しておきたい場合は、 Shift キーを押したまま項目を右クリックすると、拡張コンテキストメニューが表示されます。
→ を使用してください。エクスプローラーのリストウインドウ(右画面)でTortoiseSVN のコンテキストメニューを使用せずに、項目をエクスプローラーで削除した場合、コミットの際に、コミットダイアログにはそのファイルが紛失と表示され、バージョン管理からも削除するかどうか確認してきます。しかし、作業コピーに対して更新を実行すれば、 Subversion は紛失したファイルを特定し、リポジトリから最新のファイルを取得して置き換えます。バージョン管理下のファイルを削除する場合は、必ず
→ を使用するようにしてください。そうすると Subversion は項目を本当に削除するべきかどうか推測する必要がなくなります。ファイルやフォルダーを削除してリポジトリにコミットした後では、
→ コマンドだけでは取り戻せなくなります。しかし、ファイルやフォルダーが全く失われてしまった訳ではありません。もしファイルやフォルダーを削除したリビジョンが分かるのであれば(分からない場合はログダイアログから探し出して)、リポジトリブラウザーを開いてそのリビジョンに切り替えます。そして、削除されたファイルやフォルダーを選択して、右クリックして → を実行し、コピー先として作業コピーのパスを指定してください。ファイルやフォルダーの名前をその場で変更するならば、
→ を使用してください。新しい名前を入力すれば完了です。作業コピー内でファイルを(例えば異なるサブフォルダーへ)移動する場合は、マウスの右ドラッグ&ドロップ操作を使用して次のように操作してください。
移動したいファイルやディレクトリを選択する
作業コピー内の新しい位置にそれらを右ドラッグする
マウスの右ボタンを離す
ポップアップメニューの
→ を選択する名前の変更や移動は、削除した後に追加という形で行われるため、コミットは名前変更または移動したファイルの親フォルダーに対して行わなければなりません。そうでないと、名前変更または移動したファイルがコミットダイアログに表示されません。名前変更または移動した際の削除の部分をコミットしないと、リポジトリ上にそれが残ってしまい、共同作業者が更新した際に、古いファイルが削除されません。つまり、新旧の 両方 のファイルがある状態になってしまいます。
フォルダー内のいずれかのファイルに変更を加える前に、 必ず フォルダーの名前の変更をコミットしてください。そうしないと、作業コピーが混乱してしまいます。
ファイルの移動やコピーは、他にも Windows のコピー/切り取りコマンドを使って行うこともできます。コピーしたいファイルを選択し、右クリックしてエクスプローラーの
→ を実行します。それからコピー先のフォルダーを開いて右クリックし、 → を選択します。ファイルを移動する場合は、 → の代わりに → を使用します。また、リポジトリブラウザーを用いて、項目を移動することもできます。詳細は 「リポジトリブラウザー」 をご覧ください。
svn:externals
で作成したフォルダーに対して、TortoiseSVN の 移動 や 名前を変更 コマンドを実行しては いけません 。この操作は外部参照の項目を親リポジトリから削除してしまうことになり、おそらく他の人たちを驚かせてしまいます。外部参照フォルダーを移動する必要があるときには、通常の(シェルでの)移動を行い、移動元と移動先の各親フォルダーに対して svn:externals
プロパティを設定しなおしてください。
リポジトリ内に、大文字か小文字かのみが異なる名前のファイル(例えば TEST.TXT
と test.txt
)がある場合、 Windows のクライアントでは、親ディレクトリの更新やチェックアウトができなくなります。 Subversion は文字の大小を区別していますが、Windows はそうではないからです。
これは2人が別々の作業コピーから、大文字か小文字かのみが異なる名前のファイルをコミットした場合に発生します。また Linux のような、大文字と小文字を区別するファイルシステムを使用するシステムからコミットした場合も、発生します。
この場合は、どちらかを一方のみを残し、もう一方をリポジトリから削除(または名前変更)しなりません。
大文字・小文字が競合するようなチェックインを拒否するサーバースクリプトが、https://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ にあります。
時に、親切な IDE がリファクタリングの一環でファイルの名前変更を行います。そしてもちろん Subversion に通知しません。変更をコミットすると、 Subversion には古いファイル名が紛失ファイル、新しいファイル名がバージョン管理外のファイルとして見えることになります。新しいファイルを追加することもできますが、 Subversion にはそのファイルの関連が分からないので、履歴が追跡できなくなってしまいます。
改善策は、実際には名前変更であったと Subversion に通知することで、これは コミット ダイアログや 変更をチェック ダイアログから行うことができます。古い名前(紛失)と新しい名前(バージョン管理外)の両方を選択し、 → を使用すれば、2つのファイルを名前変更の関係にすることができます。
通常は、生成される全てのファイルが Subversion に無視されるように、無視リストを設定するでしょう。しかし、クリーンビルドを行うために、これらの無視される項目を削除したい場合はどうしますか?通常は、 makefile でこれを行うよう設定しますが、 makefile がデバッグ中だったり、他のビルドシステムに変更しているときには、これらを丸ごとクリアする手段があると便利です。
TortoiseSVN では、そのような場合に Shift キーを押したままフォルダーを右クリックすると、拡張コンテキストメニューが表示されます。これにより、作業コピーにあるバージョン管理外のファイルの一覧ダイアログが現れます。削除する項目を選択または選択解除してください。
→ という機能を提供しています。エクスプローラーのリストウインドウ(右画面)でここで項目が削除される際、ごみ箱が使用されますので、ここで誤ってバージョン管理下に置くはずのファイルを削除してしまっても元に戻せます。