2011-12-12 10 views
22

मान लीजिए कि मेरे पास फ़ाइल fname है जो किसी अन्य भंडार/प्रोजेक्ट से फ़ाइल के लिए एक सिम्लिंक है, ../../proj2/fname कहें।गिट प्रतिबद्ध symlink एक नियमित फ़ाइल के रूप में

क्या नियमित फ़ाइल के रूप में fname जोड़ने/प्रतिबद्ध करने का कोई तरीका है?

ऐसा लगता है कि, डिफ़ॉल्ट रूप से, गिट फ़ाइल मोड 120000 देता है और लिंक फ़ाइल को ब्लॉब सामग्री के रूप में सेट करता है।

मुझे यह पता है क्योंकि git ls-tree फ़ाइल के लिए मोड 120000 दिखाता है, और git cat-file -p../../proj2/fname को ब्लॉब की सामग्री के रूप में दिखाता है।

+0

हाय क्या आप गिट का उपयोग कर फ़ाइल को symlinkinf के बारे में चरणों को अपडेट कर सकते हैं? –

उत्तर

13

नहीं, गिट जानता है कि यह एक सिम्लिंक है। गिट के लिए अन्यथा नाटक करने के लिए यह खतरनाक होगा, क्योंकि इसके बाद रेपो के बाहर फाइलों को लिखना समाप्त हो जाएगा। इसे सिम्लिंक के रूप में ट्रैक करना वास्तव में इच्छित व्यवहार है।

+2

मुझे उम्मीद है कि इस मामले में लिखने का व्यवहार सिम्लिंक को हटाना और इसे नियमित फ़ाइल से बदलना है। – hasen

+2

@ हसनज: यदि आप यही चाहते हैं, तो सिम्लिंक को हटा दें और इसे लिंक की गई फ़ाइल की प्रतिलिपि से प्रतिस्थापित करें। आपके "अपेक्षित" व्यवहार में गिट को फ़ाइल को संशोधित करना शामिल है ... जोड़ें? प्रतिबद्ध? यह या तो अच्छी बात नहीं है। – Cascabel

+1

आपके गिट भंडार में इंगित सिम्लिंक होने के लिए उपयोगी होने की अधिक संभावना है। यह मामला होगा यदि आपके पास सिस्टम की कॉन्फ़िगरेशन के लिए एक रिपोजिटरी थी और फिर आप गेट प्रबंधित कॉन्फ़िगरेशन फ़ाइलों को चेक आउट रिपोजिटरी में फ़ाइलों के लिंक के साथ बदल देंगे। – LovesTha

3

विंडोज में, आप एक जंक्शन

उदाहरण के लिए के साथ आप क्या चाहते हैं कर सकते हैं, कार्यक्रम अक्सर एक सेटिंग सिस्टम पर कहीं फाइल रखने के लिए, लेकिन मैं संस्करण नियंत्रण यह मेरे भंडार में करना चाहते हैं। मैं फ़ाइल को स्थानांतरित नहीं कर सकता, और मैं डुप्लिकेट या कुछ भी नहीं बनाना चाहता

यदि हम रिपॉजिटरी निर्देशिका में Windows शॉर्टकट डालते हैं, तो वह इसे बाइनरी एकल फ़ाइल के रूप में देखेगा; नहीं एक निर्देशिका आप शामिल करना

हम क्या जरूरत भंडार में एक Windows शॉर्टकट की तरह कुछ डाल करने की क्षमता है, लेकिन उस Git के रूप में सिर्फ एक और फ़ोल्डर व्यवहार करेगा चाहते हैं सभी वास्तविक फ़ाइलें की ओर इशारा करते:

cd /location/of/my/repo/ 
mklink /j "_linkTo_VimSettings" "C:\Program Files (x86)\Vim" 
+0

यदि आप अपस्ट्रीम से कोई परिवर्तन मर्ज करते हैं तो क्या होता है? क्या गिट स्रोत सामग्री को संशोधित करेगा? जेफ्रोमी की तरह [एक और जवाब] में उल्लेख किया गया है (http://stackoverflow.com/a/8470365/109618), यह खतरनाक होगा। –

32

यदि आप लिंक के बजाय फ़ाइल को दिखाना चाहते हैं, तो आपको शायद सिम-लिंक (ln -s) के बजाय हार्ड-लिंक बनाने के लिए ln कमांड का उपयोग करना चाहिए।

हार्ड-लिंक बनाना, आप एक ही फ़ाइल को दो अलग-अलग निर्देशिकाओं के अंतर्गत प्रदर्शित करने के लिए बना सकते हैं, इसलिए किसी भी लिंक के माध्यम से इसे बदलना दोनों लिंक के माध्यम से परिवर्तन को प्रतिबिंबित करेगा, और फ़ाइल दोनों निर्देशिकाओं में लाइव रहेगी, इसलिए यह git द्वारा ट्रैक किया जाए।

मुझे उम्मीद है कि Bukov's answer में कमांड यह करता है, लेकिन मुझे वास्तव में बिल्कुल पता नहीं है।

+3

यह उत्तर @ जेफोमी से एक के मुकाबले मेरे लिए अधिक उपयोगी लगता है। – JohnAllen

+1

यह ध्यान दिया जाना चाहिए कि 'ln' के साथ हार्ड लिंक केवल फाइलों के लिए काम करता है, लेकिन निर्देशिका नहीं। – BillyTom

+0

वास्तव में मैंने जो खोजा है! यूनिक्स सिस्टम के लिए Kudos! – blackjacx