"घातक: एक गिट रिपॉजिटरी नहीं: '' प्राप्त करना। पोस्ट-अपडेट हुक का उपयोग करते समय किसी अन्य रेपो पर 'गिट पुल' निष्पादित करने के लिए


90

अगर मैं यहां शब्दावली का दुरुपयोग करता हूं, तो मैं माफी चाहता हूं, इसलिए मैं माफी मांगता हूं (और मुझे सही करें), लेकिन मैं अपना सर्वश्रेष्ठ प्रदर्शन करूंगा।

मैं वेब सर्वर पर एक नंगे गिट रेपो (हब) और एक विकास साइट वर्किंग कॉपी (प्राइम) स्थापित करने की कोशिश कर रहा हूं। मैंने इस लेख के बाद इसे पैटर्न करने की कोशिश की है । मैं चाहता हूं कि जब भी हब रेपो को धकेल दिया जाए तो विकास कार्य की प्रति अपडेट हो जाए। मैं इस धारणा के अधीन हूं कि इसके लिए उचित हुक है post-update, जिसे मैंने इस तरह बनाया है:

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

अपडेट करें

जब मैं अपने स्थानीय रेपो से नंगे हब में बदलाव लाता हूं तो मुझे अपडेट के बाद की स्क्रिप्ट से निम्न आउटपुट मिलते हैं:

remote: sites
remote: fatal: Not a git repository: '.'

हालाँकि, अगर मैं सर्वर में 'साइट' के रूप में एसएसएच करता हूं और इस स्क्रिप्ट को मैन्युअल रूप से निष्पादित करता हूं तो यह बहुत अच्छा काम करता है कोई भी विचार इस हुक या स्क्रिप्ट के साथ क्या गलत हो सकता है?

जवाबों:


179

यहाँ वह स्क्रिप्ट है जो अंततः काम करती है। मुझे लगता है कि बिट मैं मूल रूप से गायब था जो इसे दूर से काम करने से रोकता थाunset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

18
मैं पुष्टि कर सकता हूं, परेशान GIT_DIRसमस्या को ठीक करता है।
jmtd

16
समझने के इच्छुक लोगों के लिए: यह इसलिए है क्योंकि git GIT_DIRइसके बजाय चर का उपयोग करता है PWDcd-ing PWDनहीं नहीं बदलता है GIT_DIR। पहले से उपलब्ध नहीं होने के GIT_DIRलिए जीआईटी में गिरावट PWDहोनी चाहिए।
zupa

सवाल यह है कि हुक स्क्रिप्ट के लिए ऐसा करने के लिए git को क्यों देखना आवश्यक है (GIT_DIR सेट करें ताकि स्क्रिप्ट भी 'cd' कहीं और हो 'git जो भी काम करेगा')? मैं व्यक्तिगत रूप से विकल्प चुनूंगा कि git इस तरह का जादू नहीं करता है।
स्टीवन हरियाणो

2
इसके पीछे कारण यह है कि Git आवेदन कर रहा है है कुछ वातावरण चर को सभी कोर Git आदेशों।
केसी

जब कोई मर्ज संघर्ष होता है, तब क्या होता है git pull?
लोलोलोलोल


0

इसके बावजूद कि परेशान GIT_DIR सिर्फ काम करता है।

समस्या तब होती है जब आप GIT_DIR को कहीं और गलत तरीके से सेट करते हैं।

आप इसके बजाय बस जोड़ सकते हैं: GIT_DIR = .git / यह काम करेगा


0

मेरे मामले में मैंने एक कार्यशील पेड़ निर्दिष्ट किया था, और यह कुछ आज्ञाओं पर टूटता है, जैसे pull(या अधिक सटीकfetch )।

कार्यशील पेड़ को परेशान करने के लिए यदि वह आपके git config में है

git config --unset core.worktree

(वर्क ट्री सेट करने के अन्य तरीके हैं)

नोट करने के लिए महत्वपूर्ण,

जब तक आप पहली बार एक कस्टम वर्कट्री का उपयोग करके अपने चारों ओर इस छेद को खोद नहीं लेते हैं, तब तक यह आपकी समस्या का कोई बदलाव नहीं है।

मजाक:

इसका तात्पर्य यह है कि गिट इंटर्नल .git/कुछ मामलों में वर्कट्री + के सापेक्ष पथ का उपयोग करते हैं । मेरे अनुभव में वर्कट्रीज़ को अच्छी तरह से समर्थित नहीं किया गया है, सिवाय गिट के सबसे बुनियादी हिस्सों को छोड़कर। मैंने पूरी तरह से प्रयोग नहीं किया है, Git शायद व्यवहार करेगा यदि मैं जो कुछ भी git डायरेक्टरी कॉन्फिग वेरिएबल को ठीक से सेट करता हूं, जिसे मैंने नहीं खेला है।


-1

आपके पास शायद एक अनुमति समस्या है। मुझे यकीन नहीं है कि आपने अपने नंगे गिट रेपो को कैसे सेट किया है, लेकिन अगर यह gitउपयोगकर्ता के अधीन चल रहा है , तो सुनिश्चित करें कि gitउपयोगकर्ता को प्रदर्शन करने की अनुमति हैgit pull आपकी परियोजना निर्देशिका में ।

हुक चलाने के दौरान उपयोगकर्ता यह जानने के लिए वैकल्पिक रूप से प्रयास करें कि:

echo `whoami`

अगर मैं git उपयोगकर्ता के रूप में सर्वर में ssh करता हूं, तो मैं बिना किसी समस्या के अपनी परियोजना निर्देशिका में git पुल का उपयोग करने में सक्षम हूं। मेरा मानना ​​है कि वह उपयोगकर्ता है जिसे स्क्रिप्ट को निष्पादित करना चाहिए। मैं स्क्रिप्ट में whoami लाइन जोड़ने की कोशिश कर सकता हूं, लेकिन उस स्क्रिप्ट से आउटपुट कहाँ जाता है जब इसे हुक के रूप में निष्पादित किया जाता है? शायद मुझे उस आउटपुट को गूंजने के बजाय लॉग फ़ाइल में भेजने की आवश्यकता है?
Ty W

क्या करता है echo `whoami` है जो whoamiनहीं करता है?
क्रिस्टोफर हम्मरस्ट्रॉम

एक हुक स्क्रिप्ट से स्टडआउट करने के लिए आउटपुट रिमोट को एक्शन करते हुए दिखाई देता है। या, दूसरे शब्दों में, यदि आप 'गिट पुश' कहते हैं, तो रिमोट पर एक हुक से आउटपुट आपके स्टडआउट में दिखाई देगा।
ईबेनेटर

हाँ, देखा कि जैसे मैं सामान के साथ खेल रहा था। बहुत सुविधाजनक :)
Ty W
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.