2011-09-27 17 views
8

Git पुल --helpसभी शाखाओं को आसानी से 'गिट खींच' कैसे करें?

वर्तमान शाखा में एक दूरस्थ रिपोजिटरी से परिवर्तन शामिल हैं।

मैं कोड के ऑफ़लाइन दृश्य के लिए गिट रिपोजिटरी खींचता हूं और विभिन्न शाखाओं के लिए अद्यतन कोड रखना चाहता हूं। मैन्युअल रूप से प्रत्येक शाखा के लिए खींचने के बिना मैं आसानी से सभी शाखाओं के लिए कोड कैसे खींचूं?

- सभी - सभी रिमोट प्राप्त करें।

- सभी मदद नहीं की।

+0

http: // stackoverflow।कॉम/प्रश्न/4318161/कैन-गिट-पुल-ऑल-अपडेट-ऑल-माय-लोकल-शाखाओं को – VonC

उत्तर

8

यदि स्थानीय भंडार का उपयोग केवल पढ़ने के लिए किया जाता है और कोई भी फाइल संशोधित नहीं होती है, तो नीचे दी गई स्क्रिप्ट चाल चलती है।

for i in $(git branch | sed 's/^.//'); do git checkout $i; git pull; done 

इसके लिए कोई गिट समकक्ष कमांड नहीं लगता है।

5

pull आपकी वर्तमान स्थानीय शाखा में रिमोट शाखाएं विलय करता है, इसलिए सभी दूरस्थ शाखाओं को खींचना शायद आप नहीं चाहते हैं।

0

आपको प्रत्येक शाखा को अलग-अलग मर्ज करना होगा। यदि आप कई शाखाओं में विलय कर चुके हैं और उनमें से एक से अधिक विवादों को विलय कर चुके हैं, तो आप एक ही समय में संभावित रूप से कैसे हल कर सकते हैं?

+0

गैरेथ की मदद करनी चाहिए - जैसा कि मैंने बताया है कि मैं ऑफ़लाइन दृश्य के लिए गिट का उपयोग करता हूं और कोई संघर्ष नहीं होगा। एक गिट कमांड या खोल स्क्रिप्ट मेरी आवश्यकताओं को पूरा कर सकता है। –

7

प्रवीण श्रीपति के उत्तर की तरह, लेकिन एक खोल समारोह के रूप में और यह आपको उस शाखा में वापस लाता है जिस पर आपने शुरुआत की थी।

बस अपने ~/.bash_aliases फ़ाइल में इस डाल:

function pull-all() { 
    START=$(git branch | grep '\*' | set 's/^.//'); 
    for i in $(git branch | sed 's/^.//'); do 
     git checkout $i; 
     git pull || break; 
    done; 
    git checkout $START; 
}; 
साथ

|| तोड़ना एक संतोषजनक काम करता है अगर कोई संघर्ष या पसंद हो तो चीजों को खराब नहीं करता है।

+0

काम पूरी तरह से, thx दोस्त! –

1

@cellofellow मैं मैक ओएस एक्स पर मेरी .profile को this जोड़ा से प्रेरित होकर:

function git-pull-all() { 
    START=$(git symbolic-ref --short -q HEAD); 
    for branch in $(git branch | sed 's/^.//'); do 
     git checkout $branch; 
     git pull ${1:-origin} $branch || break; 
    done; 
    git checkout $START; 
}; 

function git-push-all() { 
    git push --all ${1:-origin}; 
}; 

मुख्य अंतर हैं:

  1. मैं git branch | grep '\*' | set 's/^.//' बजाय git branch | grep '\*' | set 's/^.//' के साथ वर्तमान शाखा हो रही है।

  2. आप एक पैरामीटर के रूप में रिमोट की आपूर्ति कर सकते हैं उदा। git-pull-all origin। यदि आप पैरामीटर को छोड़ देते हैं, तो यह मूल पर डिफ़ॉल्ट होता है।

  3. सर्वर के पीछे कई शाखाओं को धक्का देने के लिए एक समान शॉर्टकट भी जोड़ा गया।

+0

अच्छी नौकरी। मुझे बदलने के विकल्प को पसंद करने के विकल्प को पसंद है। – cellofellow

1

यदि आपको केवल ऑफ़लाइन कार्यक्षमता की आवश्यकता है, तो आप सभी वर्तमान जानकारी प्राप्त करने के लिए git fetch -all पर कॉल कर सकते हैं। अब आपके पास अपनी डिस्क पर सभी जानकारी है और ऑफ़लाइन काम कर सकती है। उस शाखा को सरल मर्ज करें या चेकआउट करें जिस पर आप काम करना चाहते हैं। गिट पुल git fetch && git merge है।