दूरस्थ शाखाओं को ट्रैक करने के लिए मौजूदा गिट शाखाएं प्राप्त करना


81

Git के साथ काम करते समय मेरा सामान्य वर्कफ़्लो, कुछ इस तरह है:

  1. एक स्थानीय भंडार बनाएँ
  2. उस रिपॉजिटरी में कुछ काम करें, फाइलें जोड़ें / बदलें आदि।
  3. तय करें कि मुझे भंडार के लिए एक केंद्रीय दूरस्थ स्थान चाहिए, और एक बनाएं
  4. मेरे स्थानीय रिपॉजिटरी से इस नए रिमोट रिपॉजिटरी के सभी कमिट्स को धक्का दें

अब, हालांकि, मैं इस दूरस्थ भंडार से सक्षम होना चाहता हूं pushऔर pullयह निर्दिष्ट किए बिना कि मैं कहां से धक्का दे रहा हूं या कहां से खींच रहा हूं; मैं चाहता हूं कि मेरा स्थानीय मास्टर रिमोट मास्टर को ट्रैक करे।

ऐसा करने का उचित तरीका मेरे लिए स्पष्ट नहीं है, और मैं इसे दस्तावेज़ से निर्धारित करने में असमर्थ रहा हूँ, भले ही यह वास्तव में एक से अधिक कमांड नहीं होना चाहिए।

क्योंकि यह ऐसा कुछ है जो केवल एक बार रिपॉजिटरी के अनुसार किया जाता है, मैंने आमतौर पर दो सरल, लेकिन हैकी, समाधानों में से एक को नियोजित किया है:

  1. git cloneएक नया स्थानीय भंडार बनाने के लिए उपयोग किया जाता है, और पुराने को हटा दिया जाता है। जीआईटी क्लोनिंग के बाद, मूल को ट्रैक करने के लिए नया रिपॉजिटरी सेटअप है।
  2. मास्टर ट्रैक को मूल बनाने के लिए मैन्युअल रूप से संपादित .git / config।

मुझे लगता है कि मुझे एक कमांड चलाने में सक्षम होना चाहिए, शायद किसी git remoteमौजूदा रिपॉजिटरी को सेटअप करने के लिए किसी प्रकार का एक मास्टर मास्टर ट्रैक करना होगा। क्या कोई मुझे बता सकता है कि कमान क्या है?


वास्तव में पता चला है कि इससे पहले एक समान सवाल पूछा गया है: stackoverflow.com/questions/312055/…
SpoonMeiser

Git वर्जन> = 1.7.0.0 के लिए आप इसे एक कमांड में कर सकते हैं, इसे यहाँ समझाया गया है
KiRPiCH

4
यह वास्तव में डुप्लिकेट है: stackoverflow.com/questions/520650/…
takeshin

जवाबों:


156

सेट-अपस्ट्रीम arg का उपयोग करें:

git branch --set-upstream local-branch-name origin/remote-branch-name

उपरोक्त कमांड चलाने से आपकी .it / config फाइल सही ढंग से अपडेट हो जाती है और यहां तक ​​कि इस आउटपुट के साथ पुष्टि भी हो जाती है:

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

EDIT: जैसा कि मार्टिज़न ने कहा: "संस्करण Git v1.8.0 में, --सेट-अपस्ट्रीम को हटा दिया गया है। इसके बजाय --सेट -अपस्ट्रीम का उपयोग करें।"

git branch --set-upstream-to local-branch-name origin/remote-branch-name

अधिक जानकारी के लिए इसे देखें ।


18
Git v1.8.0 संस्करण में, --set-upstreamपदावनत किया जाता है। --set-upstream-toइसके बजाय उपयोग करें ।
मार्टिज़न

1
git remote show <remote>यह देखने के लिए उपयोग करें कि आपकी स्थानीय शाखाओं द्वारा कौन-सी शाखाएँ ट्रैक की जाती हैं
naitsirch

1
सुझाए गए संपादन को अनुमोदित नहीं किया जाना चाहिए था, इसने मूल रूप से उत्तर को बदल दिया (और इसे एक गलत स्थिति में छोड़ दिया, क्योंकि नए विकल्प के तर्क उलट हैं)। मूल पोस्टर को यह तय करने दें कि वह अपने उत्तर को अपडेट करना चाहता है या नहीं।

1
आप शाखा को फिर से धक्का दे सकते हैंgit push -u
मैट्र-

set upstreamवास्तव में किसी भी कोड को धक्का दिए बिना मैपिंग सेट नहीं करता है ? धक्का कोड बनाने के लिए आपको धक्का देने के लिए मजबूर करता है। शायद आपके पास अभी तक कोई कोड नहीं है, लेकिन मैपिंग स्थापित करना चाहते हैं?
user20358

19

git help remoteआपको वह दिखाना चाहिए जो आपको जानना चाहिए। मुझे लगता है कि तुम क्या चाहते हो

git remote add [remote-name] [remote-url]

# Set a local branch to follow the remote
git config branch.[branch-name].remote [remote-name]

# Set it to automatically merge with a specific remote branch when you pull
git config branch.[branch-name].merge [remote-master]

आप इन्हें सेट करने के लिए .git / config को मैन्युअल रूप से संपादित भी कर सकते हैं।


दूसरा विकल्प यह है कि आप अपनी केंद्रीय रिपॉजिटरी बना लें, फिर अपनी वर्किंग डायरेक्टरी को हटा दें और सेंट्रल रिपॉजिटरी से क्लोनिंग करके इसे दोबारा बनाएं। संपादन .it / config अधिक जानकारीपूर्ण होगा, हालाँकि।
विलियम पर्ससेल

केंद्रीय रिपॉजिटरी और संपादन को क्लोन करना .it / config दो विकल्प हैं जो मैंने अपने प्रश्न में पहले ही उल्लेख किए हैं।
स्पूनमाइजर

8

यदि आप दूरस्थ शाखा को ट्रैक करने के लिए एक नई स्थानीय शाखा बनाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

या इससे भी बेहतर:

git checkout -t origin/branch_name

git checkout - tra -b branchname origin branchname fatal: git checkout: स्विचिंग शाखाओं के साथ पथ अद्यतन करना असंगत है। क्या आपने 'मूल / शाखा' की जाँच करने का इरादा किया था जिसे कमिट नहीं किया जा सकता है?
edebill

6

गिट के नए संस्करणों पर आप उपयोग कर सकते हैं

git branch --track origin/branch_name

4
इस पोस्ट को स्वचालित रूप से निम्न गुणवत्ता के रूप में चिह्नित किया जा रहा है क्योंकि यह इतना छोटा / केवल कोड है। क्या आप यह समझने के लिए कुछ पाठ जोड़कर इसका विस्तार करेंगे कि यह समस्या को हल कैसे करता है?
गंग -

यह सबसे सटीक उत्तर है! उपरोक्त सभी गलत नहीं हैं या अब समर्थित नहीं हैंgit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
GTodorov


1

तेजी से आगे तीन साल (देखें कि मैंने वहां क्या किया :-)), मैंने गिट बैश और प्राप्त का उपयोग करके एक अनट्रैक शाखा को खींचने की कोशिश की

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop

निम्नलिखित से मुझे क्या हासिल हुआ:

$ git branch --set-upstream-to=origin/develop develop Branch 'develop' set up to track remote branch 'develop' from 'origin'.


-1

इस कमांड का उपयोग करें:

git clone [<options>] [--] <repo> [<dir>]

नमस्ते, आप प्रश्न को फिर से पढ़ना चाह सकते हैं - इसमें फिर से रिपॉजिटरी का क्लोन बनाने का उल्लेख है, लेकिन यह सवाल तब है जब स्थानीय रिपॉजिटरी को पहले बनाया गया था और शुरू में रिमोट ट्रैक नहीं किया था।
स्पूनमाइजर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.