git - एक मौजूदा गिट शाखा को रिमोट शाखा ट्रैक करें?
branch git-branch (13)
'--Track' विकल्प का प्रयोग करें
एक
git pull
बाद:git checkout --track <remote-branch-name>
या:
git fetch && git checkout <branch-name>
मुझे पता है कि रिमोट शाखाओं को ट्रैक करने वाली एक नई शाखा कैसे बनाई जाए, लेकिन मैं एक मौजूदा शाखा को रिमोट शाखा कैसे ट्रैक करूं?
मुझे पता है कि मैं सिर्फ .git/config
फ़ाइल को संपादित कर सकता हूं, लेकिन ऐसा लगता है कि एक आसान तरीका होना चाहिए।
1- अपने स्थानीय मेटा-डेटा का उपयोग करके अद्यतन करें: गिट fetch --all
2- अपनी रिमोट और स्थानीय शाखाओं का उपयोग करके: गिट शाखा-ए , निम्नलिखित स्क्रीनशॉट देखें
3- लक्षित शाखा पर स्विच करें, जिसे आप रिमोट से जोड़ना चाहते हैं: का उपयोग कर
गिट चेकआउट शाखा नाम
उदाहरण :
4- अपनी स्थानीय शाखा को रिमोट शाखा से लिंक करके:
गिट शाखा - सेट-अपस्ट्रीम-टू नाम ओफ्रेमोट ब्रंच
एनबी: nameOfRemoteBranch : चरण 2 "गिट शाखा -r" के आउटपुट से कॉपी करने के लिए
उपयोग का उदाहरण:
असल में काम के स्वीकृत उत्तर के लिए:
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
आप निम्नलिखित कर सकते हैं (माना जाता है कि आप मास्टर पर चेक आउट हैं और रिमोट ब्रांच मास्टर को धक्का देना चाहते हैं):
यदि आपके पास पहले से नहीं है तो 'रिमोट' सेट अप करें
git remote add origin ssh://...
अब ट्रैक करने के लिए मास्टर को कॉन्फ़िगर करें:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
और धक्का:
git push origin master
एक शाखा foo
और रिमोट upstream
को देखते हुए:
गिट 1.8.0 के रूप में:
git branch -u upstream/foo
या, यदि स्थानीय शाखा foo
वर्तमान शाखा नहीं है:
git branch -u upstream/foo foo
या, यदि आप लंबे आदेश टाइप करना चाहते हैं, तो ये उपर्युक्त दो के बराबर हैं:
git branch --set-upstream-to=upstream/foo
git branch --set-upstream-to=upstream/foo foo
गिट 1.7.0 के रूप में:
git branch --set-upstream foo upstream/foo
टिप्पणियाँ:
उपर्युक्त सभी आदेश रिमोट upstream
से दूरस्थ शाखा foo
को ट्रैक करने के लिए स्थानीय शाखा foo
का कारण upstream
। पुराने (1.7.एक्स) वाक्यविन्यास को नए (1.8+) वाक्यविन्यास के पक्ष में बहिष्कृत किया गया है। नया वाक्यविन्यास अधिक सहज और याद रखने में आसान होना है।
यह भी देखें: मुझे हर समय 'सेट-अपस्ट्रीम' क्यों करने की ज़रूरत है?
कुछ हद तक संबंधित तरीके से मैं एक मौजूदा शाखा में रिमोट ट्रैकिंग शाखा जोड़ने की कोशिश कर रहा था, लेकिन उस सिस्टम पर उस रिमोट रिपोजिटरी तक पहुंच नहीं थी, जहां मैं उस रिमोट ट्रैकिंग शाखा को जोड़ना चाहता था (क्योंकि मैं अक्सर इसकी एक प्रति निर्यात करता हूं स्नीकनेट के माध्यम से किसी अन्य सिस्टम में रेपो करें जिसमें उस रिमोट को धक्का देने की पहुंच है)। मैंने पाया कि स्थानीय पर रिमोट शाखा जोड़ने को मजबूर करने का कोई तरीका नहीं था जिसे अभी तक नहीं मिला था (इसलिए स्थानीय को पता नहीं था कि शाखा रिमोट पर मौजूद थी और मुझे त्रुटि मिल जाएगी: the requested upstream branch 'origin/remotebranchname' does not exist
)।
अंत में मैं .git/refs/remotes/origin/remotebranchname
पर एक नई हेड फ़ाइल जोड़कर नई, पहले अज्ञात रिमोट शाखा (बिना लाने के) जोड़ने में .git/refs/remotes/origin/remotebranchname
और फिर रेफरी की प्रतिलिपि बना रहा ( .git/refs/remotes/origin/remotebranchname
तेज थी, जैसा कि लंगड़ा था; -) वर्कस्टेशन के मूल रेपो तक पहुंच के साथ सिस्टम से (स्थानीय रिपो के साथ जहां मैं रिमोट शाखा जोड़ रहा था)।
एक बार ऐसा करने के बाद, मैं git branch --set-upstream-to=origin/remotebranchname
उपयोग कर सकता था
बहुत कम में
git branch --set-upstream yourLocalBranchName origin/develop
यह आपके yourLocalBranchName
नामक दूरस्थ शाखा को ट्रैक करेगा।
मेरा मानना है कि गिट 1.5.x के आरंभ में आप एक स्थानीय शाखा $BRANCH
दूरस्थ शाखा origin/$BRANCH
शाखा ट्रैक कर सकते हैं।
यह देखते हुए कि $BRANCH
और origin/$BRANCH
मौजूद है, और आपने वर्तमान में $BRANCH
जांच नहीं की है (यदि आपके पास है तो स्विच करें), करें:
git branch -f --track $BRANCH origin/$BRANCH
यह एक ट्रैकिंग शाखा के रूप में $BRANCH
पुन: प्रयास करता है। पहले से मौजूद $BRANCH
बावजूद सृजन को मजबूर करता है। --track
सामान्य डिफ़ॉल्ट डिफ़ॉल्ट होने पर --track
वैकल्पिक है (यानी, गिट-कॉन्फ़िगर पैरामीटर branch.autosetupmerge
सत्य है)।
नोट, यदि origin/$BRANCH
अभी तक मौजूद नहीं है, तो आप इसे अपने स्थानीय $BRANCH
को रिमोट रिपोजिटरी में दबाकर बना सकते हैं:
git push origin $BRANCH
स्थानीय शाखा को एक ट्रैकिंग शाखा में बढ़ावा देने के लिए पिछले आदेश का पालन किया गया।
मैं निम्नलिखित कमांड का उपयोग करता हूं (मान लीजिए कि आपका स्थानीय शाखा नाम "शाखा-नाम-स्थानीय" है और दूरस्थ शाखा का नाम "शाखा-नाम-रिमोट" है):
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
यदि स्थानीय और दूरस्थ दोनों शाखाओं का एक ही नाम है, तो बस निम्न कार्य करें:
$ git branch --set-upstream-to=origin/branch-name branch-name
यह इस सवाल का सीधा जवाब नहीं है, लेकिन मैं यहां किसी भी ऐसे व्यक्ति के लिए एक नोट छोड़ना चाहता हूं जो अपस्ट्रीम शाखा को कॉन्फ़िगर करने का प्रयास करते समय मेरे जैसा ही मुद्दा हो।
Push.default से सावधान रहें।
पुराने गिट संस्करणों के साथ, डिफ़ॉल्ट मिलान कर रहा था, जो आपके पास बहुत अवांछनीय व्यवहार का कारण बनता है, उदाहरण के लिए:
स्थानीय शाखा "मास्टर" मूल / मास्टर के लिए ट्रैकिंग
अपस्ट्रीम / मास्टर को रिमोट शाखा "अपस्ट्रीम" ट्रैकिंग
यदि आपने "अपस्ट्रीम" शाखा पर "गिट पुश" करने का प्रयास किया है, तो push.default मिलान करने वाला गिट स्वचालित रूप से स्थानीय शाखा "मास्टर" को "अपस्ट्रीम / मास्टर" में विलय करने का प्रयास करेगा, जिससे पूरी तरह अराजकता हो सकती है।
यह अधिक कामुक व्यवहार देता है:
गिट कॉन्फ़िगरेशन - ग्लोबल push.default अपस्ट्रीम
यहां, github
और git version 2.1.4
का उपयोग करके, बस करें:
$ git clone [email protected]:user/repo.git
और रिमोट इटेलसेफ द्वारा आते हैं, भले ही स्थानीय रूप से लिंक न हों:
$ git remote show origin
* remote origin
Fetch URL: [email protected]:user/repo.git
Push URL: [email protected]:user/repo.git
HEAD branch: master
Remote branches:
develop tracked <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
लेकिन बेशक, अभी भी कोई स्थानीय शाखा नहीं है:
$ git branch
* master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
देख? अब अगर आप सिर्फ डेवेलप चेकआउट करते हैं, तो यह स्वचालित रूप से जादू करेगा:
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
इतना आसान!
सारांश। बस यह 2 आदेश चलाएं:
$ git clone [email protected]:user/repo.git
$ git checkout develop
या बस द्वारा:
शाखा में स्विच करें यदि आप पहले से इसमें नहीं हैं:
[za]$ git checkout branch_name
रन
[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
और आप इसके लिए तैयार हैं:
[za]$ git push origin branch_name
आप यह देखकर कॉन्फ़िगरेशन फ़ाइल पर एक नज़र डाल सकते हैं कि क्या चल रहा है ट्रैकिंग:
[za]$ git config -e
यह जानना भी अच्छा है, यह दिखाता है कि किन शाखाओं को ट्रैक किया जाता है और कौन सा नहीं है। :
[za]$ git remote show origin
सुनिश्चित करें कि आप चलाते हैं:
git config push.default tracking
मुसीबत मुक्त करने में सक्षम होने के लिए