Emacs가 하드 링크를 끊는 것을 방지하는 방법?


13

의 나는 두 개의 파일이 있다고 가정 해 봅시다 file1file2:

$ echo aaa >file1
$ ln file1 file2

그런 다음 inode가 동일한 지 확인합니다.

$ ls -i
18749779 file1  18749779 file2

두 파일이 실제로 동일하다는 것을 보여줍니다. 이제 file1Emacs에서 편집 하고 텍스트와 같은 줄을 추가 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 )))

~/.emacsinit 파일에. 대신 file1사용하여 편집 하면 현재 디렉토리에 링크 emacs -Q file1된 파일 (동일한 inode가 있음)이 있지만 수정되지 않았습니다 (이전 파일과 동일 함 ). 이것은 내가 원하는 것이 아닙니다. 나는 둘 다 좋아하는 것 하고 같은 파일이어야하고, 업데이트 된 파일의 내용을 포함 ..file1~file2file1~file1file1file2


3
좋아, 나는 해결책을 찾은 것 같아요 : init 파일에 추가 (setq backup-by-copying t)하면 ~/.emacs원하는대로 작동합니다.
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
모든 파일에 대해이 동작을 원하지 않는 경우이를 파일 로컬 변수로 설정할 수 있습니다.
Harald Hanche-Olsen

@ HaraldHanche-Olsen은 언급했다!
Tyler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.