एक गिट हुक में वर्तमान कार्यशील निर्देशिका गिट रिपॉजिटरी के भीतर होने की गारंटी है?


81

प्रायोगिक तौर पर ऐसा लगता है कि गिट हुक, रिपॉजिटरी की जड़ होने के लिए निर्धारित मौजूदा डायरेक्टरी के साथ चलते हैं। हालाँकि, मैं इस बारे में कोई गारंटी नहीं देख सकता कि git प्रलेखन में। क्या मुझे git रिपॉजिटरी का पता लगाने के लिए वर्तमान वर्किंग डायरेक्टरी पर निर्भर रहना चाहिए, या हुक से जुड़े git रिपॉजिटरी को वर्कआउट करने का एक बेहतर तरीका है?


4
निश्चित नहीं कि वह कितना संबंधित है। गिट 2.7.3 (-r1) गिट हुक के साथ एक जेंटो स्थिर बॉक्स पर न केवल निष्पादित किया जाता है, .gitबल्कि git reset --hardवास्तव में निर्देशिका के अंदर काम करने वाली निर्देशिका संरचना बनाता है .git, जो मेरी राय में पूरी तरह से गलत काम है!
पावेल Paमरदा

जवाबों:


45

यह पर्यावरण चर के लिए निर्धारित मूल्य पर आधारित है GIT_DIR। हुक के चलने पर यह रिपॉजिटरी की जड़ में सेट हो जाता है। कई हुक, विशेष रूप से जो एक अन्य रेपो, अनसेट (और रीसेट) से एक पुल बनाते हैं, इस पर्यावरण चर को आवश्यकतानुसार।


6
क्या $ GIT_DIR में एक अनुगामी स्लैश है?
PuercoPop

8
यह सही जवाब नहीं है। GIT_DIR हमेशा रेपो की जड़ में सेट नहीं होता है। इस ब्लॉग को देखें ।
घोप्पेर 21

2
@ Ghopper21 यह लेख पूरी तरह से सही नहीं है। यह कहता है कि पोस्ट-कम हुक के लिए, वर्तमान निर्देशिका कार्यशील पेड़ का शीर्ष स्तर है। हालाँकि, मेरी बहुत ही सरल पोस्ट-कमिट स्क्रिप्ट को वर्किंग ट्री के शीर्ष स्तर पर अन्य स्क्रिप्ट्स नहीं मिलीं। जैसे:.git/hooks/post-commit: 1: .git/hooks/post-commit: post-commit_push_gitweb.sh: not found
विंस

70

वर्तमान उत्तर पुराने प्रतीत होते हैं। 2.9.0 तक, डॉक्स निम्नलिखित बताता है:

इससे पहले कि Git एक हुक लगाता है, यह अपनी कार्यशील निर्देशिका को या तो गैर-नंगे भंडार में काम करने वाले पेड़ की जड़ में बदल देता है, या $ GIT_DIR को एक नंगे भंडार में।

https://git-scm.com/docs/githooks/2.9.0


12
बहुत बढ़िया जवाब। बाद के संशोधनों (2.13.0) में स्पष्टीकरण दिया गया था। "अपवाद एक पुश के दौरान ट्रिगर किए गए हुक हैं (पूर्व-प्राप्त, अद्यतन, पोस्ट-प्राप्त, पोस्ट-अपडेट, पुश-टू-चेकआउट) जो हमेशा $ GIT_DIR में निष्पादित होते हैं।"
नौसिखिया सी

2
उपरोक्त उद्धरण के लिए स्रोत / संदर्भ: git-scm.com/docs/githooks#_description
jmcker 5

1
सादे भाषा में: यह आपके भंडार का शीर्ष-स्तरीय निर्देशिका है। ("नंगे" अनिवार्य रूप से एक रिपॉजिटरी को संदर्भित करता है जिसमें केवल .gitडायरेक्टरी होती है, और बिना कोई फाइल चेक किए।)
बेन मार्स 19

4

आप पर्यावरण चर का उपयोग कर सकते हैं $GIT_DIR। निर्देशिका $GIT_DIRमें अंक .git


कितनी संभावना है कि यह $GIT_DIR/..रिपॉजिटरी रूट को इंगित करेगा?
डेविड लॉर्ड

यह मूर्खता नहीं है। उपयोग न करें $GIT_DIR/..। जब रेपो नंगे रेपो होगा तब टूट जाएगा। एक नंगे रेपो की कोई कार्यशील निर्देशिका नहीं है इसलिए कोई "रिपॉजिटरी रूट" नहीं है। इसके अलावा यह टूट जाएगा जब .it इसके बजाय एक लिंक है।
पवित्रजीत

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

3
यह सभी मामलों में सही नहीं है। इस ब्लॉग को देखें ।
घोप्पेर 21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.