git - सभी शाखाओं को खींचने और धक्का देने के लिए गिट सेट करें




version-control branch (6)

कॉन्फ़िगरेशन में हार्डकोडिंग origin बिना समाधान

अपने वैश्विक gitconfig में निम्नलिखित का प्रयोग करें

[remote]
    push = +refs/heads/*
    push = +refs/tags/*

यह सभी शाखाओं और सभी टैग धक्का देता है

आपको कॉन्फ़िगरेशन में origin हार्डक क्यों नहीं करना चाहिए?

यदि आप हार्डकोड करते हैं:

  1. आप origin रूप से सभी repos में रिमोट के रूप में खत्म हो जाएगा। तो आप मूल जोड़ने में सक्षम नहीं होंगे, लेकिन आपको set-url का उपयोग set-url आवश्यकता है।
  2. यदि कोई उपकरण एक अलग नाम के साथ रिमोट बनाता है तो सभी कॉन्फ़िगरेशन लागू नहीं होंगे। फिर आपको रिमोट का नाम बदलना होगा, लेकिन नाम बदलना नहीं होगा क्योंकि origin पहले से मौजूद है (बिंदु 1 से) याद रखें :)

लाने के लिए पहले से ही आधुनिक गिट की देखभाल की जाती है

Jakub Narębski के जवाब के अनुसार:

आधुनिक गिट के साथ आप हमेशा सभी शाखाएं (रिमोट-ट्रैकिंग शाखाओं को रेफरी / रिमोट / मूल / * नेमस्पेस में लाते हैं

मैं नए बनाए गए लोगों सहित डिफ़ॉल्ट रूप से सभी शाखाओं को धक्का देना और खींचना चाहता हूं।

क्या कोई ऐसी सेटिंग है जिसे मैं इसके लिए परिभाषित कर सकता हूं?

अन्यथा, जब मैं एक नई शाखा जोड़ता हूं, स्थानीय रूप से और मैं इसे सर्वर से खींचना चाहता हूं, तो ऐसा करने का सबसे आसान तरीका क्या है?

मैंने एक ही नाम के साथ एक नई शाखा बनाई और खींचने की कोशिश की लेकिन यह काम नहीं करता है। शाखा की सभी रिमोट कॉन्फ़िगरेशन के लिए मुझे बताता है। मैं इसे कैसे सेट करूं


आधुनिक गिट के साथ आप हमेशा सभी शाखाएं (रिमोट-ट्रैकिंग शाखाओं को refs/remotes/origin/* नेमस्पेस में, git branch -r या git remote show origin साथ दृश्यमान) के रूप में प्राप्त करते हैं।

डिफ़ॉल्ट रूप से ( push.default कॉन्फ़िगरेशन चर के दस्तावेज़ देखें) आप मिलान करने वाली शाखाओं को push.default हैं , जिसका अर्थ है कि पहले आपको git push origin branch को गिट के लिए हमेशा git push पर git push

यदि आप हमेशा सभी शाखाओं को धक्का देना चाहते हैं , तो आप पुश रेफस्पेक सेट अप कर सकते हैं। यह मानते हुए कि रिमोट को origin नाम दिया गया origin आप या तो गिट कॉन्फ़िगरेशन का उपयोग कर सकते हैं:

$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'

या सीधे निम्न की तरह कुछ करने के लिए .git/config फ़ाइल संपादित करें:

[remote "origin"]
        url = [email protected]:/srv/git/repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        fetch = +refs/tags/*:refs/tags/*
        push  = +refs/heads/*:refs/heads/*
        push  = +refs/tags/*:refs/tags/*

मैंने सभी शाखाओं को नए भंडार में माइग्रेट करने के लिए नीचे दिए गए आदेशों का उपयोग किया था।

~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror

नोट : मुझे CodeCommit Stash से एडब्ल्यूएस CodeCommit (रिक्त रेपो) में एक रेपो क्लोन करते समय दूसरा अंतिम (यानी पुश मास्टर पहले) कमांड का उपयोग करना पड़ा। मुझे यकीन नहीं है, लेकिन धक्का देने के बाद ( git push new-origin --mirror ) डिफ़ॉल्ट शाखा master की तुलना में किसी अन्य शाखा का जिक्र कर रही थी।


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

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

फिर अपना नया रिमोट रेपो जोड़ें:

git remote add bb <path-to-new-repo>

फिर आप इस आदेश का उपयोग कर सभी को धक्का दे सकते हैं:

git push -u bb --all

या आप अन्य प्रतिक्रियाओं में उल्लिखित गिट कॉन्फ़िगर कमांड का उपयोग करके रेपो को कॉन्फ़िगर कर सकते हैं यदि आप यह एक बार नहीं कर रहे हैं या केवल स्थानीय शाखाओं को स्थानांतरित करना चाहते हैं।

महत्वपूर्ण बिंदु, अन्य प्रतिक्रियाएं केवल सभी स्थानीय शाखाओं को धक्का देती हैं। यदि शाखाएं केवल वैकल्पिक रिमोट भंडार पर मौजूद हैं तो वे पहले उन्हें ट्रैक किए बिना आगे नहीं बढ़ेंगे। यहां प्रस्तुत लूप के लिए उसमें मदद मिलेगी।


सबसे आसान तरीका करना है:

git push --all origin

यह टैग और शाखाओं को धक्का देगा।


git branch -a का उपयोग करके बाहर की सभी शाखाओं को देखने के लिए git branch -a आपको निष्पादित करना चाहिए:

for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all

अब आप सभी शाखाएं देख सकते हैं:

git branch

सभी शाखाओं को धक्का देने के लिए प्रयास करें:

git push --all






push