Git संस्करण नियंत्रण का उपयोग करके केवल फ़ाइल की अनुमतियों को अपडेट और कमिट करना


187

बस एक some.shफ़ाइल को एक निष्पादन योग्य ( chmod 755 ...) में बदल दिया , अनुमतियाँ अपडेट की गईं लेकिन सामग्री नहीं। क्या फ़ाइल को गिट में करने का कोई तरीका है , ताकि निष्पादन योग्य बिट को पुनर्स्थापित किया जाएगा / क्लोन / चेकआउट / पुल पर सेट किया जाएगा ?

अपडेट: मैं कैसे ट्रैक कर सकता हूं कि नई अनुमतियां सबमिट की गई थीं github?

जवाबों:


190

डिफ़ॉल्ट रूप से, यदि आप उन्हें बदलते हैं तो git फ़ाइल अनुमतियों को निष्पादित करेगा। यह किसी अन्य अनुमतियों को परिवर्तित या ट्रैक नहीं करेगा।

यदि आप निष्पादन की अनुमति को संशोधित करते समय कोई परिवर्तन नहीं देखते हैं, तो संभवतः आपके पास git में एक कॉन्फ़िगरेशन है जो फ़ाइल मोड को अनदेखा करता है।

फ़ाइल के .gitलिए फ़ोल्डर में अपने प्रोजेक्ट को देखें, configऔर आपको कुछ इस तरह से देखना चाहिए:

[core]
    filemode = false

आप इसे trueअपने पसंदीदा टेक्स्ट एडिटर में बदल सकते हैं , या चला सकते हैं:

git config core.filemode true

फिर, आपको सामान्य रूप से अपनी फ़ाइलों को करने में सक्षम होना चाहिए। यह केवल अनुमति परिवर्तन ही करेगा।


धन्यवाद! मैं कैसे ट्रैक कर सकता हूं कि अनुमति परिवर्तन सबमिट किए गए थे github?
ब्रेकफ्रे

2
जब आप किसी फ़ाइल को देखते हैं तो आप इसे देख सकते हैं (उदाहरण के लिए, रेल gitignore फ़ाइल पर , आपको फ़ाइल अनुमति के रूप में 100644 मिलेगी)
विंसेंट बी

8
Windows पर अनुमतियों को परिवर्तन के साथ परिवर्तन करना (वास्तव में फ़ाइल अनुमतियों को बदलना और कमिट करना
fooMonster

38
यह उत्तर गलत है! यदि कोई फ़ाइल निष्पादन योग्य है या नहीं तो केवल ट्रैक करें। यह अन्य फ़ाइल अनुमति जैसे ट्रैक करने योग्य या पठनीय नहीं है। अधिक के लिए stackoverflow.com/a/11231682/2311074 पढ़ें ।
एडम

मेरे लिए वेबस्टॉर्म ने परिवर्तन को नहीं पकड़ा, लेकिन में git status, मुझे परिवर्तन दिखाई देता है ..
टाउनशर

192

@fooMonster लेख ने मेरे लिए काम किया

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

जैसा कि आप देख सकते हैं कि फ़ाइल में 644 अनुमति (100 की अनदेखी) है। हम इसे 755 में बदलना चाहेंगे:

# git update-index --chmod=+x script.sh

परिवर्तन करें

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
यह ध्यान दिया जाना चाहिए कि आपको वास्तव में '-x / + x' का उपयोग करना होगा। आप कोई अन्य अनुमतियाँ या बिटमास्क सेट नहीं कर सकते।
देवोलस

नोट git commit -aने मेरे लिए कुछ भी नहीं किया, हालांकि कमांड लाइन पर संदेश सेट करना था। बिट ऑफ ए
क्वर्की

कमांड आदेश होना चाहिए: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
साइमनडेपेल्चिन

29

मेरे लिए काम नहीं कर रहा है।

मोड सही है, फ़ाइल परमिट बदल दिए गए हैं, लेकिन गिट कहते हैं कि कोई काम नहीं करना है।

git init
git add dir/file
chmod 440 dir/file
git commit -a

समस्या यह प्रतीत होती है कि git केवल कुछ अनुमति परिवर्तनों को पहचानता है।


51
सही - gitवास्तव में केवल ट्रैक करता है कि कोई फ़ाइल निष्पादन योग्य है या नहीं, न कि * निक्स अनुमतियों का पूरा सेट। तो आपको निष्पादन योग्य के बीच एक फ़ाइल को स्विच करना होगा / नहीं इसके लिए यह सोचने के लिए कि आपने कुछ करने के लायक बदल दिया है ...
twalberg

मुझे ऐसा दस्तावेज़ नहीं मिला जो स्पष्ट हो: मैं अपने अनुसार परमिट सेट करने के लिए क्या पोस्ट-एक्शन ट्रिगर का उपयोग कर सकता हूं?
ओथियस

2
वैसे, इसमें एक post-checkoutहुक है git, जो कुछ मामलों को कवर करेगा, लेकिन मुझे यकीन नहीं है कि अगर यह उन सभी संभावित चीजों को कवर करेगा जो आपके वर्कट्री में फ़ाइलों को अपडेट करते हैं। आप अपने रेपो में एक अतिरिक्त शेल स्क्रिप्ट रखने से बेहतर हो सकते हैं जो चीजों को अपने अनुसार सेट करता है। वैकल्पिक रूप से, वहाँ कुछ परियोजनाएं हैं जो gitमेटाडेटा को स्टोर करने के लिए वृद्धि करती हैं , लेकिन मैंने वास्तव में उनमें से किसी की भी कभी कोशिश नहीं की है ...
Twalberg

1
मैंने फ़ाइल अनुमतियों को 777 में बदल दिया और किया git update-index --refresh, लेकिन अंतर दिखाता है old mode 100644 new mode 100755। यह अनुमतियों के सभी अद्यतन नहीं किया
hudac

यहाँ देखें @tishma उत्तर stackoverflow.com/questions/14557106/… । यह मेरे लिए काम किया है
gary69
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.