हार्ड लिंक को तोड़ने से Emacs को कैसे रोकें?


13

मान लीजिए कि मेरे पास दो फाइलें हैं file1और file2:

$ echo aaa >file1
$ ln file1 file2

फिर मैं जांचता हूं कि इनोड्स समान हैं:

$ 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करता हूं, तो मुझे file1~वर्तमान निर्देशिका में एक फ़ाइल मिलती है जो लिंक file2(उसी इनोड) के साथ है, लेकिन file1~इसे संशोधित नहीं किया गया है (इसलिए यह पुराने के समान है file1) .. यह वह नहीं है जो मैं चाहता हूं। मैं दोनों चाहते हैं file1और file2एक ही फाइल हो सकता है, और अद्यतन फ़ाइल सामग्री शामिल करने के लिए ..


3
ठीक है, मुझे लगता है कि मुझे इसका हल मिल गया है: अगर मैं (setq backup-by-copying t)अपनी ~/.emacs
इनिट

जवाबों:


10

@ हैकन ने अपनी समस्या हल की:

(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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.