ファイルの移動

今回は、作業コピーを取得した作業用ディレクトリ内でのファイル移動について見ていきます。作業用ディレクトリ内のファイル配置は前回のままとします。

まず、普通に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.

これでファイル名の変更がリポジトリにも反映されました。