GIT में फ़ाइल करने के लिए chmod अनुमतियां कैसे जोड़ें?


182

मैं एक .sh फ़ाइल को कमिट करना चाहता हूं, लेकिन जब मैं उसी फाइल को किसी अन्य सर्वर में चेकआउट करता हूं, तो यह निष्पादन योग्य होना चाहता है।

क्या मैन्युअल रूप से chmod u + x के बिना ऐसा करने का एक तरीका है जो फ़ाइल को चेकआउट करने वाले सर्वर में है?

जवाबों:


291

आधिकारिक दस्तावेज के अनुसार , आप update-indexउप-कमांड का उपयोग करके किसी भी ट्रैक की गई फ़ाइल पर "निष्पादन योग्य" ध्वज को सेट या निकाल सकते हैं ।

ध्वज सेट करने के लिए, निम्नलिखित आदेश का उपयोग करें:

git update-index --chmod=+x path/to/file

इसे हटाने के लिए, उपयोग करें:

git update-index --chmod=-x path/to/file

हुड के नीचे

हालांकि यह नियमित यूनिक्स फ़ाइलों की अनुमति प्रणाली की तरह दिखता है, वास्तव में यह नहीं है। Git अपने आंतरिक संग्रहण में प्रत्येक फ़ाइल के लिए एक विशेष "मोड" रखता है:

  • 100644 नियमित फ़ाइलों के लिए
  • 100755 निष्पादन योग्य लोगों के लिए

आप विकल्प के ls-fileसाथ, सबकांड का उपयोग करके इसकी कल्पना कर सकते हैं --stage:

$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0       .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0       my_executable_script.sh

डिफ़ॉल्ट रूप से, जब आप किसी फ़ाइल को एक रिपॉजिटरी में जोड़ते हैं, तो गिट अपने फाइलसिस्टम विशेषताओं को सम्मानित करने और उसके अनुसार सही फ़ाइलोड सेट करने का प्रयास करेगा। आप core.fileModeविकल्प को गलत पर सेट करके इसे अक्षम कर सकते हैं :

git config core.fileMode false

समस्या निवारण

यदि कुछ बिंदु पर गिट फाइलमोड सेट नहीं है, लेकिन फ़ाइल में सही फाइलसिस्टम ध्वज है, तो मोड को हटाने का प्रयास करें और इसे फिर से सेट करें:

git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file

बक्शीश

Git 2.9 के साथ शुरू, आप एक फाइल को स्टेज कर सकते हैं और एक कमांड में फ्लैग सेट कर सकते हैं:

git add --chmod=+x path/to/file

जब मैं ऐसा करने के लिए test.sh, git कमिट और पुश, और किसी अन्य सर्वर में चेकआउट करता हूं, तो ये उस फाइल के परमिट होते हैं: -rw-rw-r-- 1 उपयोगकर्ता उपयोगकर्ता 12 दिसंबर 5 11:42 test.sh
हेनले चिउ

मैंने सिर्फ अपने भंडार में से एक पर परीक्षण किया और यह उम्मीद के मुताबिक काम करता है। अनुमतियाँ विंडोज के तहत प्रदान की गई कमांड का उपयोग करके फ़ाइल पर सेट की गई थीं। मेरे एक सर्वर पर (डेबियन) फ़ाइल में -rw-r - r-- अनुमतियां पहले थीं, अब -rwxr-xr-x पर सेट करें। आप स्थानीय और दूरस्थ मशीनों पर किस संस्करण का उपयोग करते हैं?
एंटवेन

मेरे स्थानीय में git संस्करण 1.9.5 और चेकआउट करने वाले सर्वर में 1.7.1 git है।
हेन्ले चिउ

बस जीआईटी 1.7.10 के साथ दूसरे (पुराने) सर्वर पर क्लोन करने की कोशिश की गई है, यह अभी भी अच्छी तरह से काम करता है, फ़ाइल में एक्स अनुमतियां हैं। हो सकता है कि आपने किसी बिंदु पर गलती की हो, या आपके पास दूरस्थ सर्वर पर क्लोन करने वाले उपयोगकर्ता के साथ अनुमति की समस्या हो
Antwane

ध्यान दें कि आप केवल अनुमति को बदल सकते हैं (सेट या स्पष्ट) निष्पादित कर सकते हैं। Git किसी अन्य अनुमति को ट्रैक नहीं करता (जैसे पढ़ने या लिखने की अनुमति)।
डैन एंडरसन

25

एंटवेन का जवाब सही है, और यह एक टिप्पणी होनी चाहिए लेकिन टिप्पणियों में पर्याप्त स्थान नहीं है और प्रारूपण की अनुमति नहीं है। :-) मैं बस को जोड़ने के लिए है कि Git में, फाइल अनुमति दर्ज हैं चाहते हैं केवल 1 के रूप में या तो 644या 755(वर्तनी ( 100644और 100755, 100भाग का अर्थ है "नियमित रूप से फ़ाइल"):

diff --git a/path b/path
new file mode 100644

पूर्व - 644- का अर्थ है कि फ़ाइल निष्पादन योग्य नहीं होनी चाहिए , और बाद का अर्थ है कि यह निष्पादन योग्य होना चाहिए। आपकी फ़ाइल प्रणाली में वास्तविक फ़ाइल मोड में कैसे बदल जाता है, यह कुछ हद तक OS-निर्भर है। यूनिक्स जैसी प्रणालियों पर, बिट्स को आपकी umaskसेटिंग के माध्यम से पारित किया जाता है , जो आम तौर 022पर "समूह" और "अन्य" 002से लिखने की अनुमति को हटाने के लिए होगा , या केवल "अन्य" से लिखित अनुमति को हटाने के लिए होगा। यह तब भी हो सकता है 077जब आप विशेष रूप से गोपनीयता के बारे में चिंतित हों और "समूह" और "अन्य" दोनों से पढ़ने, लिखने और अनुमति को हटाने की इच्छा रखते हों।


1 Git के शुरुआती-शुरुआती संस्करणों ने समूह अनुमतियों को सहेजा, ताकि कुछ रिपॉजिटरी में ट्री एंट्रीज़ हों 664। आधुनिक गिट नहीं करता है, लेकिन चूंकि किसी भी वस्तु का कोई भी हिस्सा कभी भी नहीं बदला जा सकता है, उन पुराने अनुमतियों के बिट अभी भी पुराने पेड़ की वस्तुओं में बने रहते हैं।

केवल ०६४४ या ०5५५ स्टोर करने का परिवर्तन प्रतिबद्ध ४ ९ 70४४ee०६ ईबी ५ store५२ में हुआ था , जो कि Git v0.99 से पहले है और दिनांक १६ अप्रैल २००५।


"Git के शुरुआती संस्करण" किसी भी विचार जो सटीक संस्करण इससे प्रभावित होते हैं?
user5359531

2
@ user5359531 संस्करण प्रतिबद्ध होने से पहले e44794706eeb57f2ee38ed1604821aa38b8ad9d2, यानी, Git संस्करण 0.99 से पहले।
मार्के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.