2016-04-08 5 views
6

मैं एक स्वचालित स्क्रिप्ट लिख रहा हूं।शैल: यदि समूह पहले से मौजूद है तो गिट क्लोन अगर विफल हो तो

किसी बिंदु पर, मैं git clone <repo> पर कॉल कर रहा हूं। लेकिन एक मौका है कि यह ऑपरेशन पहले ही हो चुका है।

मैं git clone --no-fail कैसे कॉल कर सकता हूं ताकि अगर भंडार मौजूद हो तो यह अनदेखा हो जाए?

धन्यवाद

उत्तर

8

सबसे स्थिर समाधान बस इसे विफल होने देना होगा।

आप की तरह कुछ कर सकते हैं:

if [ ! -d "$FOLDER" ] ; then 
    git clone "$URL" "$FOLDER" 
fi 

लेकिन यह है कि स्थिति दौड़ के लिए असुरक्षित हो जाएगा।

+1

मैं दौड़ की स्थिति के बारे में बहुत चिंतित नहीं हूं। लेकिन अगर मुझे वास्तविक गिट एक है (गिट रिमोट या कुछ देखकर) पर कोई जांच हो तो मुझे यह दिलचस्प लगेगा। एक 'mkdir -p' जैसा व्यवहार। आपके उत्तर –

+0

@AugustinRiedinger हाँ, मैं भी मैन पेज खोज रहा था, लेकिन ऐसा लगता है कि नहीं है .. – hek2mgl

0

आप हमें नहीं बताते कि यह पहले से ही क्यों हो सकता है, या कोई संदर्भ।

मैं बहुत तरह जोड़ना होगा एक [ -e $folder ] && rm -rf $foldergit clone से पहले (सुनिश्चित करें कि $folder समझदार है) क्योंकि मैं अपने सॉफ्टवेयर है जो सिर्फ वहाँ के आसपास में जो जो राज्य जानता है झूठ का क्या होता है किसी भी पुराने फ़ोल्डर का उपयोग नहीं करना चाहते ...

+0

'rm -rf' दृष्टिकोण दिलचस्प है। लेकिन आदर्श रूप में, फ़ोल्डर मौजूद होने पर क्लोन ऑपरेशन दोहराया नहीं जाएगा और वही है। –

+0

अच्छा, आप नहीं जानते कि फ़ोल्डर समान है या नहीं। क्या होगा अगर फ़ोल्डर वहां है लेकिन भंडार का एक पुराना संस्करण है? या गलत शाखा पर है? '123 का उपयोग कर – AnoE

1

git clone $url || trueset -e के साथ शेल रनिंग करेगा git clone विफल होने पर असफल रहा।

यदि यह नहीं है तो आप लक्ष्य निर्देशिका के लिए स्पष्ट परीक्षण के साथ सुझाए गए समाधानों को पहले से ही काम करना चाहिए।

उनके साथ एकमात्र समस्या यह है कि आपको इसका नाम जानने के लिए गिट के दृष्टिकोण को अनुकरण करने की आवश्यकता होगी।

कुछ इस तरह काम करना चाहिए: के साथ ## और %% हैं standard featues of the "parameter expansion" rules of POSIX shells

url=git://host/path/name.git 
last=${url##*/} 
bare=${last%%.git} 
test -e "$bare" || git clone "$url" 

उन "चाल"।

+0

सच 'वास्तव में एक अच्छी चाल है –

1

पार्टी के लिए थोड़ा देर हो चुकी है लेकिन मैं कुछ ऐसा कर रहा हूं लेकिन मैं यह सुनिश्चित करना चाहता हूं कि रेपो अद्यतित है यदि यह पहले से मौजूद है तो उपरोक्त उत्तर में विस्तार करने के लिए यदि रेपो पहले से अस्तित्व में है तो आप सुनिश्चित कर सकते हैं यह अद्यतित है।

if [ ! -d "$FOLDER" ] ; then 
    git clone "$URL" "$FOLDER" 
else 
    cd "$FOLDER" 
    git pull "$URL" 
fi 
संबंधित मुद्दे