バックアップファイルは、古いファイルをコピーまたはリネームすることで作ることができます。コピーとリネームは、古いファイルが複数の名前をもつ場合(ハードリンクされている場合)に、異なる効果をもちます。古いファイルがバックアップファイルにリネームされた場合、ハードリンクされた別の名前で参照されるファイルは、バックアップファイルとなります。かわりに古いファイルをコピーすると、ハードリンクされた別の名前で参照されるファイルは、編集中のファイルのままで、それらの名前でアクセスする内容は新しい内容となります。
バックアップファイルを作る方法は、編集中のファイルの所有者とグループにも影響します。コピーが使われた場合、それらは変化しません。リネームが使われた場合、そのユーザーがファイルの所有者となり、ファイルのグループはデフォルト(オペレーティングシステムごとにグループのデフォルトは異なります)のグループになります。
リネームとコピーの選択は、以下の変数により行われます:
backup-by-copying
が非nil
(デフォルトはnil
)の場合、コピーが使用されます。
backup-by-copying-when-linked
が非nil
(デフォルトはnil
)で、ファイルが複数の名前をもつ場合は、コピーが使用されます。
backup-by-copying-when-mismatch
が非nil
(デフォルトはt
)で、リネームによりファイルの所有者かグループが変更される場合は、コピーが使用されます。
backup-by-copying-when-mismatch
をnil
に変更すると、Emacsはファイルの所有者のユーザーIDとファイルのグループのグループIDの数字をチェックします。もしいずれかの数字がbackup-by-copying-when-privileged-mismatch
の値より大きければ、backup-by-copying-when-mismatch
が非nil
であるかのように振る舞います。
ファイルがバージョンコントロールシステムで管理されている場合(バージョンコントロールを参照)、通常、Emacsは普通の方法でそのファイルのバックアップを作りません。しかしコミット(チェックインとも呼ばれる。バージョンコントロールの概念を参照されたい)は、バックアップを作るのと似たところがあります。これらの操作は通常ハードリンクをこわし、同じファイルにたいする別のファイル名でのvisitを切断します。Emacsにできることはありません。バージョンコントロールシステムがこれを行うのです。
一部のファイルストレージサービス(FSS)はファイルバージョニング(file
versioning)をサポートしています。これらのFSSではファイルにたいする以前の履歴を記録して、以前のバージョンにリバートすることができます。Emacsでこの種のサービスによってホストされたファイルを編集する際にこれらの操作を可能にしたい場合には、backup-by-copying
を非nil
値にカスタマイズしてください。
大事なファイルの編集中には、古いファイルもバックアップとしてコピーできれば役に立つかもしれません。なぜならバックアップと編集の保存の間に何かが失敗しても古いファイル名として確実に保持されるからです。かわりにfile-precious-flag
を非nil
値にカスタマイズすることもできます。これによりコピーによるバックアップが行われるとともに、編集の保存の間のI/Oエラーから守ることができます。