2012-03-07 15 views
34

एक बैश स्क्रिप्ट के भीतर, यह सत्यापित करने का सबसे आसान तरीका क्या होगा कि एक गिट यूआरएल मान्य गिट रेपो को इंगित करता है और स्क्रिप्ट के पास इसे पढ़ने के लिए उपयोग है?रिमोट गिट रिपॉजिटरी यूआरएल की वैधता की जांच कैसे करें?

समर्थित प्रोटोकॉल [email protected], https://, और git:// हैं। कर्ल git:// प्रोटोकॉल पर विफल रहता है।

[email protected]:UserName/Example.git 
https://[email protected]/UserName/Example.git 
git://github.com/UserName/Example.git 

नोट: मैं अगर एक यूआरएल वाक्य रचना सही है देखने के लिए जाँच करने के लिए नहीं कह रहा हूँ, मैं सत्यापित करें कि एक रेपो URL स्थान एक bash स्क्रिप्ट के भीतर से प्रवेश किया पर मौजूद है की जरूरत है।

उत्तर

28

जैसा कि this issue में देखा गया है, आप अपने पते का परीक्षण करने के लिए git ls-remote का उपयोग कर सकते हैं।

यदि आपको गिट कॉल set GIT_TRACE=1 डीबग करने की आवश्यकता है। उदाहरण के लिए:

env GIT_PROXY_COMMAND=myproxy.sh GIT_TRACE=1 git ls-remote https://... 

"git ls-remote" तेज तरीका मैं वास्तव में यह क्लोनिंग के बिना एक दूरदराज के भंडार के साथ संचार का परीक्षण करने को पता है। इसलिए इस मुद्दे के लिए एक परीक्षण के रूप में इसकी उपयोगिता।

आप इसे "git ls-remote returns 128 on any repo" में पता समस्या का पता लगाने के लिए उपयोग कर सकते हैं।

git ls-remote, इस शीर्षक है, भंडार के बारे में जानकारी वापस आ जाएगी डिफ़ॉल्ट रूप से, सभी शाखाओं और टैग प्रत्येक प्रविष्टि के लिए प्रतिबद्ध आईडी के साथ:

28

हालांकि VonC के जवाब सही है, यहाँ है कि मैं क्या का उपयोग कर समाप्त हो गया है। उदा .:

$ git ls-remote git://github.com/user/repo.git 
<commit id> HEAD 
<commit id> refs/heads/example_branch 
<commit id> refs/heads/master 
<commit id> refs/tags/v1.0.2 
<commit id> refs/tags/v1.0.0 

git ls-remote रिटर्न सफलता पर कोड 0, विफलता पर त्रुटि कोड 128।

तो रेपो पहुंच योग्य नहीं है, उदाहरण के लिए, यदि आप रिपोजिटरी को देखने की अनुमति नहीं है, या यदि भंडार उस स्थान पर मौजूद नहीं है, git ls-remote वापस आ जाएगी:

fatal: The remote end hung up unexpectedly 

उपयोग करने के लिए यह एक bash लिपि में, निम्नलिखित काम करेंगे ...

git ls-remote "$SITE_REPO_URL" &>- 
if [ "$?" -ne 0 ]; then 
    echo "[ERROR] Unable to read from '$SITE_REPO_URL'" 
    exit 1; 
fi 

(नोट:&>- मौन stderr और stdout, इसलिए आदेश उत्पादन के लिए कुछ भी नहीं होगा)

+2

बहुत अच्छी प्रतिक्रिया। +1 – VonC

+3

मैं पोर्टेबल स्क्रिप्ट के लिए '&> -' का उपयोग करने के खिलाफ सलाह दूंगा, क्योंकि यह एक बैश एक्सटेंशन प्रतीत होता है। अन्य गोले में, यह वाक्यविन्यास अपेक्षित के रूप में काम नहीं करेगा। यद्यपि एक समान वाक्यविन्यास ('> & - 2> & -') है, लेकिन कार्यक्षमता बराबर नहीं है - यह चुपचाप उन्हें पुनर्निर्देशित करने के बजाय फ़ाइल वर्णनकर्ताओं को बंद कर देगी, जिससे कई कार्यक्रमों में त्रुटियां आती हैं। आप इसके बजाए '>/dev/null 2> और 1' का उपयोग कर सकते हैं। – nyuszika7h

+0

मैंने खराब यूआरएल पर उपयोगकर्ता नाम/पासवर्ड के लिए संकेत मिलने से रोकने के लिए GIT_ASKPASS = true जोड़ा। – codeDr

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