Angenommen, ich habe zwei Dateien file1
und file2
:
$ echo aaa >file1
$ ln file1 file2
Dann überprüfe ich, ob die Inodes gleich sind:
$ ls -i
18749779 file1 18749779 file2
Dies zeigt, dass die beiden Dateien tatsächlich gleich sind. Jetzt bearbeite ich file1
in Emacs und füge eine Zeile mit beispielsweise dem Text hinzu bbb
, speichere sie und beende Emacs.
Jetzt bekomme ich:
$ ls -i
18749781 file1 18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa
Die harte Verbindung ist also unterbrochen. Beachten Sie, dass dies nicht passiert, wenn ich die Datei bearbeite vim
oder wenn ich es einfach tue echo bbb >>file1
.
Wie kann ich verhindern, dass Emacs harte Links unterbricht?
Aktualisieren:
Beachten Sie, dass ich habe
(require 'backup-dir)
(setq bkup-backup-directory-info
'((t "~/.emacs-backups/" ok-create full-path )))
in meiner ~/.emacs
Init-Datei. Wenn ich bearbeiten file1
Verwendung emacs -Q file1
stattdessen ich eine Datei mit dem Namen bekommen file1~
im aktuellen Verzeichnis , dass Links zu file2
(die gleiche Inode hat) , aber das file1~
hat sich nicht geändert (so ist es identisch mit dem alten file1
) .. Dies ist nicht das, was ich will. Ich würde beide mögen file1
und file2
die gleiche Datei zu sein, und die aktualisierten Dateiinhalte aufzunehmen ..
(setq backup-by-copying t)
zu meiner~/.emacs
Init-Datei hinzufüge , funktioniert es wie gewünscht.Antworten:
@ Hakon löste sein eigenes Problem mit:
Wenn Sie es vorziehen , das Standardverhalten zu behalten, und verwenden Sie
back-up-by-copying
nur für Dateien fest verbunden, können Sie diese stattdessen verwenden (und verlassenbackup-by-copying
Satznil
):Wie von @Harald hervorgehoben, können Sie
back-up-by-copying
stattdessen eine dateilokale Variable festlegen , um diese Funktion nur für einzelne Dateien zu aktivieren .Die Erklärung dieses Verhaltens aus dem Emacs- Handbuch :
Weitere Informationen finden Sie auf der verlinkten Seite.
quelle