Disons que j'ai deux fichiers file1
et file2
:
$ echo aaa >file1
$ ln file1 file2
Ensuite, je vérifie que les inodes sont les mêmes:
$ ls -i
18749779 file1 18749779 file2
ce qui montre que les deux fichiers sont en fait les mêmes. Maintenant, je modifie file1
dans Emacs, et j'ajoute une ligne avec par exemple le texte bbb
, je l'enregistre et quitte Emacs.
Maintenant je reçois:
$ ls -i
18749781 file1 18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa
Le lien dur est donc rompu. Notez que cela ne se produit pas lorsque je modifie le fichier vim
ou si je le fais simplement echo bbb >>file1
.
Comment puis-je empêcher Emacs de rompre les liens durs?
Mise à jour:
Notez que j'ai
(require 'backup-dir)
(setq bkup-backup-directory-info
'((t "~/.emacs-backups/" ok-create full-path )))
dans mon ~/.emacs
fichier init. Si je modifie en file1
utilisant à la emacs -Q file1
place, j'obtiens un fichier appelé file1~
dans le répertoire courant qui est lié à file2
(a le même inode) mais file1~
n'a pas été modifié (il est donc identique à l'ancien file1
). Ce n'est pas ce que je souhaite. Je voudrais les deux file1
et file2
être le même fichier, et inclure le contenu du fichier mis à jour ..
(setq backup-by-copying t)
à mon~/.emacs
fichier init, cela fonctionne comme souhaité ..Réponses:
@Hakon a résolu son propre problème avec:
Si vous préférez conserver le comportement par défaut et l'utiliser
back-up-by-copying
uniquement pour les fichiers liés en dur, vous pouvez utiliser ceci à la place (et laisserbackup-by-copying
la valeur ànil
):En outre, comme l'a souligné @Harald, vous pouvez définir
back-up-by-copying
une variable locale de fichier à la place, pour activer cette fonctionnalité uniquement pour les fichiers individuels.L'explication de ce comportement dans le manuel Emacs :
Voir la page liée pour plus de discussion.
la source