2010-07-20 14 views
52

मैं अनजाने में अपने पूरे पेड़ की अनुमतियों को बदलता हूं और अन्य सामग्री परिवर्तनों के साथ अकेले परिवर्तन करता हूं।क्या मैं गिट डिफ को अनुमति परिवर्तनों को अनदेखा कर सकता हूं

मैं की तरह कुछ का उपयोग करें:

tar -czf deploy.tar git diff --name-only v1 v2

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

क्या कोई तरीका है कि मैं उन फ़ाइलों को अनदेखा करने के लिए git diff बता सकता हूं जिनके पास केवल अनुमतियां बदली गई हैं?

+3

संभावित डुप्लिकेट [मैं गिट अनदेखा मोड में परिवर्तन कैसे कर सकता हूं (chmod)?] (Http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod) – Leonel

उत्तर

115

इस अनुमतियों की अनदेखी करने के Git बता देंगे:

git config core.filemode false 
+2

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

+0

@ सीज़र का स्वागत है: कमांड सूचकांक और कार्यशील प्रति के बीच अनुमति अंतर को अनदेखा करने के लिए गिट को बताता है। क्या आप वह नहीं चाहते हैं? –

+0

मैं गिट करने के लिए नया हूं, लेकिन बात यह है कि मतभेदों के बीच मतभेद है। जब मैं गिट diff टैग 1 टैग 2 करता हूं, तो यह उन सभी फ़ाइलों को दिखाता है जिनमें मैंने संशोधित सामग्री वाली फ़ाइलों के अलावा अनुमतियां बदल दी हैं, मैं बस उन सभी 'मोड चेंज 664 => 775' को अनदेखा करने का तरीका ढूंढना चाहता हूं, मुझे उम्मीद है कि मैंने बनाया खुद को – Cesar

9

मैं जानबूझकर स्रोत कोड फ़ाइलों (~ 26K फ़ाइलें) से अनुमति निष्पादित हटाने के बाद इस समस्या थी। फिर, गिट diff का कहना है कि सभी फाइलें बदल गई हैं! Core.filemode के साथ उत्तर मेरी मदद नहीं करता है क्योंकि यह केवल आपके कामकाजी डीआईआर के खिलाफ भिन्नता को प्रभावित करता है, रेपो में 2 कामों के खिलाफ भिन्न नहीं होता है।

उत्तर (बड़े डरावनी) फ़िल्टर-शाखा कमांड का उपयोग करना था। विशेष रूप से, आपको केवल टाइप करने की आवश्यकता है:

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all 

आपके कामकाजी डीआईआर की जड़ से। बेशक, अगर आपको पुनः प्रयास करने की ज़रूरत है, तो अपने रेपो को पहले (cp -pr ~/repo.git ~/repo-orig.git या इसी तरह) की प्रतिलिपि बनाना सुनिश्चित करें।

का आनंद लें!

+1

दिलचस्प (+1)। मैंने इसे अपने उत्तर में http://stackoverflow.com/a/12979453/6309 पर शामिल किया है (क्योंकि आपका स्वयं का उत्तर हटा दिया गया था) – VonC

संबंधित मुद्दे

 संबंधित मुद्दे