今回は、作業コピーを取得した作業用ディレクトリ内でのファイル移動について見ていきます。作業用ディレクトリ内のファイル配置は前回のままとします。
まず、普通にmvコマンドによって「page01.html」ファイルを移動させてみます。
# cd /home/testuser/work/ work# mv ./page/page01.html ./
これで、「page01.html」が作業用ディレクトリの最上位階層に移動しました。
work# ll -rw-r--r-- 1 root root 249 Aug 14 19:47 index.html drwxr-xr-x 3 root root 4096 Aug 14 20:36 page -rw-r--r-- 1 root root 151 Aug 14 18:43 page01.html
では、このファイル移動をSubversionは正しく認識できているのでしょうか。svn statusコマンドで確認してみます。
work# svn status ? page01.html ! page/page01.html
「?」は、その項目はバージョン管理下にないことを示しており、「!」はその項目が失われたことを示します。
Subversionは、その時点までにリポジトリにコミットされたすべてのファイルとディレクトリを記憶しています。そのため、OS上の通常のファイル操作(mvやcpコマンド)で行うのではなく、Subversionが用意しているコマンドを使用する必要があります。
ということで、移動してしまったファイルを一度復旧させます。このような場合、svn updateコマンドが有効です。svn updateコマンドはリポジトリにある変更を作業コピーに反映します。
work# svn update Restored 'page/page01.html' At revision 4.
「page/page01.html」が復旧しました。
work# ll -rw-r--r-- 1 root root 249 Aug 14 19:47 index.html drwxr-xr-x 3 root root 4096 Aug 14 20:38 page -rw-r--r-- 1 root root 151 Aug 14 18:43 page01.html
ただ、先ほど移動させたファイルがまだ残ってしまっています。Subversionが認識できていないファイルですので、これは通常のOSコマンドで消してやります。
work# rm page01.html rm: remove regular file `page01.html'? y
svn statusコマンドで変更点を確認します。
work# svn status
何の出力もなければ、変更が何も加えられていないということです。つまり、これで元の状態に復旧しました。
ファイル移動
Subversion管理下でファイル移動を行う場合は、svn moveコマンドを使用します。
work# svn move ./page/page01.html ./page01.html A page01.html D page/page01.html
あとは、svn commitコマンドでコミットします。
work# svn commit -m "ファイルの移動" Deleting page/page01.html Adding page01.html Committed revision 5.
これでファイルの移動がリポジトリにも反映されました。
ファイル名の変更
開発を進めているうちにファイル名を変更したいということはよくあります。ファイル名の変更はsvn moveコマンドでも可能ですが、Subversionはファイル名変更用のコマンドを用意しているので、そちらを使いましょう。
ファイル名の変更はsvn renameコマンドを使用します。
work# svn rename page01.html page02.html A page02.html D page01.html
変更内容を確認します。
work# svn status D page01.html A + page02.html
最後に、コミットします。
work# svn commit -m "ファイル名を変更" Deleting page01.html Adding page02.html Committed revision 6.
これでファイル名の変更がリポジトリにも反映されました。