Як запобігти розриву жорстких посилань Emacs?


13

Скажімо, у мене є два файли file1та file2:

$ echo aaa >file1
$ ln file1 file2

Потім я перевіряю, чи є вставки однакові:

$ ls -i
18749779 file1  18749779 file2

що показує, що два файли насправді однакові. Тепер я редагую file1в Emacs і додаю рядок, наприклад текст bbb, і зберігаю його та виходжу з Emacs.

Тепер я отримую:

$ ls -i
18749781 file1  18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa

Так жорсткий зв’язок розірваний. Зауважте, що цього не відбувається, коли я редагую файл vim, або якщо просто роблю echo bbb >>file1..

Як я можу запобігти розриву жорстких посилань Emacs?

Оновлення:

Зауважте, що я

(require 'backup-dir)
(setq bkup-backup-directory-info
      '((t  "~/.emacs-backups/" ok-create full-path )))

в моєму ~/.emacsфайлі init. Якщо я редагую, file1використовуючи emacs -Q file1замість цього, я отримую файл, який називається file1~у поточному каталозі, на який посилається file2(має такий самий inode), але file1~він не був змінений (тож він ідентичний старому file1). Це не те, чого я бажаю. Я хотів би, щоб file1і file2той самий файл був, і включав оновлений вміст файлу ..


3
Гаразд, я думаю, що я знайшов рішення: Якщо я додам (setq backup-by-copying t)до свого ~/.emacsфайлу init, він працює за бажанням ..
Håkon Hægland

Відповіді:


10

@Hakon вирішив власну проблему:

(setq backup-by-copying t)

Якщо ви вважаєте за краще зберігати поведінку за замовчуванням і використовувати back-up-by-copyingлише для файлів з жорстким зв’язком, ви можете використовувати це замість цього (і залишити backup-by-copyingвстановлене значення nil):

(setq backup-by-copying-when-linked t)

Крім того, як зазначає @Harald, ви можете back-up-by-copyingзамість цього встановити локальну змінну файлів, щоб увімкнути цю функцію лише для окремих файлів.

Пояснення такої поведінки в посібнику Emacs :

Файли резервного копіювання можна зробити, скопіювавши старий файл або перейменувавши його. Це має значення, коли старий файл має кілька імен (жорсткі посилання). Якщо старий файл перейменований у файл резервного копіювання, то альтернативні імена стають іменами файлу резервної копії. Якщо замість цього скопійовано старий файл, то альтернативними іменами залишаються назви файлу, який ви редагуєте, а вміст, до якого звертаються до цих імен, буде новим вмістом.

Див. Пов’язану сторінку для подальшого обговорення.


2
Зауважте, що ви можете встановити це як локальну змінну файлу, якщо ви не хочете цього поведінки для всіх файлів.
Харальд Ханш-Ольсен

@ HaraldHanche-Olsen зазначив!
Тайлер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.