バックアップファイルは、元のファイルをコピーするか、名前を変更することで作成できます。元のファイルに複数の名前(ハードリンク)がある場合、この違いが重要になります。元のファイルをバックアップファイルに名前変更した場合、代替名はバックアップファイルの名前となります。一方、元のファイルをコピーした場合は、代替名は編集中のファイルの名前のままとなり、それらの名前でアクセスされる内容が新しい内容となります。
バックアップファイルの作成方法によって、ファイルの所有者やグループが影響を受ける場合があります。コピーを使用した場合、これらは変更されません。名前変更を使用した場合、ユーザーがファイルの所有者となり、ファイルのグループはデフォルト値になります(グループのデフォルト値はOSによって異なります)。
名称変更かコピーかの選択は、次のように行われます。
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はそのファイルに対して一般的な方法でバックアップを作成しません。しかし、ファイルの新しいバージョンをコミット(別名チェックイン、バージョン管理の概念を参照)することは、ある意味でバックアップを作成することに似ています。残念な共通点の一つは、これらの操作によって通常ハードリンクが切れ、参照していたファイル名と、同じファイルの他の名称との関連が失われることです。これはEmacsとは無関係であり、バージョン管理システムが行う動作です。
一部のファイルストレージサービスはファイルバージョニングをサポートしています。これらのサービスはファイルの過去のバージョン履歴を記録し、それらのバージョンへの復元を可能にします。Emacsで編集する際に、こうしたサービスでホストされているファイルで同様の操作を行いたい場合は、backup-by-copyingをnil以外の値にカスタマイズしてください。
バックアップ用に旧ファイルをコピーしておくことは、貴重なファイルを編集する際にも有用です。これにより、バックアップから編集内容の保存までの間に何らかの問題が発生しても、旧ファイルの名前がそのまま保持されるようになります。あるいは、file-precious-flag を nil
以外の値にカスタマイズすることも可能です。これにより、コピーによるバックアップが行われるとともに、編集内容の保存時の I/O
エラーに対する保護も実現します。