मैं एक दूरस्थ गिट रिपॉजिटरी की केवल एक शाखा कैसे प्राप्त करूं?


247

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

संपादित करें: मुझे यह पता लगा, लेकिन स्टैकओवरफ़्लो ने मुझे उत्तर के रूप में उत्तर प्रदान करने से मना कर दिया, इसलिए मैं इसे प्रश्न के बजाय यहां रखूंगा।

आप रिमोट ऐड जोड़ने के लिए -t विकल्प का उपयोग करते हैं, जैसे:

git remote add -t remote-branch remote-name remote-url

आप -t branchकई शाखाओं को हथियाने के लिए कई " " विकल्पों का उपयोग कर सकते हैं ।


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

सुनिश्चित करें कि आप अपने प्रश्न का उत्तर दे सकते हैं, आप क्यों नहीं कर सकते?
चार्ल्सब

2
मुझे लगता है कि ओपी का मतलब था कि वह इसका जवाब नहीं दे सकता था। StackOverflow एक न्यूनतम समय निर्धारित करता है जिसे आपको अपने प्रश्न का उत्तर देने से पहले पास करना होगा।
लॉर्ड नॉर्डिन

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

3
आपका git रिमोट ऐड कमांड एक रिमोट ब्रांच जोड़ रहा है, जिसका ब्रांच लाने से कोई लेना-देना नहीं है!
क्रिस हैल्क्रो

जवाबों:


220
git fetch <remote_name> <branch_name>

मेरे लिए काम किया।


14
बस सीखा है कि भ्रूण की शाखा को FETCH_HEADलाने के बाद उपलब्ध है । धन्यवाद!
क्रिस्टोफ

4
फिर git checkout FETCH_HEADचेकआउट करने के लिए
d9k

सरल और आसान।
gsumk

कैसे प्राप्त करें <Remote_name>?
मृग्लोम

ज्यादातर मामलों में @mrloloom remote_nameहै origin। उदहारण:git fetch origin <branch_name>
Saahithyan Vigneswaran

67

एक तरीका निम्नलिखित है:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

हालांकि यह ट्रैकिंग सेट अप नहीं करता है।

अधिक जानकारी के लिए, git fetch का प्रलेखन देखें ।

EDIT : नीचे @ user1338062 नोट : यदि आपके पास पहले से रिपॉजिटरी का कोई स्थानीय क्लोन नहीं है, जहां आप नई शाखा जोड़ना चाहते हैं, लेकिन आप एक नया स्थानीय रिपॉजिटरी बनाना चाहते हैं, तो git clone --branch <branch_name> --single-branch <repo_url>एक छोटा समाधान प्रदान करता है।


1
धन्यवाद यह वही करता है जो ऑप ने पूछा है। ट्रैकिंग ब्रांच git चेकआउट -t <रिमोट ब्रांच> / <ब्रांच नाम> <ब्रांच नाम> बनाने के लिए
ken

7
यदि मैं बस करता git checkout <branchname>हूं, तो मैं देखता हूं कि git स्वचालित रूप से ट्रैकिंग शाखा स्थापित करता है, यदि उस नाम की एकमात्र शाखा दूरस्थ शाखा है।
1953 में bukzor

1
यह केवल एक चीज थी जो मेरे लिए काम करती थी। भले ही विन्यास एक एकल शाखा के लिए सिर्फ रेफरी लाने के लिए सेट किया गया था, फिर भी यह सभी शाखाओं को भ्रूण या पुल का उपयोग करके खींचता है। इस कमांड ने केवल वही शाखा खींची जो मैं चाहता था ताकि रेपो केवल 500kb नहीं 5mb था। धन्यवाद।
हर्स्टविस्ट

1
यह उत्तर शायद पुराना है। git cloneअब समर्थन --branchऔर --single-branchविकल्प, मैंने प्रदर्शन के साथ उत्तर पोस्ट किया
user1338062

3
@ user1338062 यह अभी भी मान्य है यदि आप क्लोनिंग के बाद केवल एक नई शाखा (git fetch का उपयोग नहीं करने वाली सभी शाखाएँ) प्राप्त करना चाहते हैं
rubyprince

35

मुझे पता है कि पहले से ही बहुत सारे उत्तर हैं, लेकिन ये मेरे लिए काम करने वाले कदम हैं:

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

ये @Abdulsattar मोहम्मद द्वारा दिए गए उत्तर पर आधारित हैं, उस उत्तर पर @Christoph द्वारा टिप्पणी, और ये अन्य स्टैक ओवरफ़्लो प्रश्न और उनके उत्तर:


1
यहाँ सबसे उपयोगी जवाब IMO
डैनियल होम्स

31

केवल विशिष्ट शाखाओं को ट्रैक करने के लिए मौजूदा रिमोट को अपडेट करने के लिए:

git remote set-branches <remote-name> <branch-name>

से git help remote:

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

1
कमाल है, मैं एक --single-branchभंडार में था और बाद में अतिरिक्त शाखाएं डाउनलोड नहीं कर सका। धन्यवाद!
यज्ञ

22

इसे करने का एक तरीका:

दूरस्थ प्रतिनिधि के लिए .it / config लाने के लिए किसी भी शाखा को लाने के लिए सेट किया जाना चाहिए:

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*

दूरस्थ शाखा लाने के लिए:

git fetch origin branch-name

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

git checkout -b branch-name origin/branch-name

सभी शाखाओं को सूचीबद्ध करने के लिए

git branch -a

16

लेखक के पद से नकल:

उदाहरण के -tलिए git remote add, विकल्प का उपयोग करें :

git remote add -t remote-branch remote-name remote-url

आप -t branchकई शाखाओं को हथियाने के लिए कई विकल्पों का उपयोग कर सकते हैं ।


10
डाउनवोट किया गया है, आप एक ही धागे में मौजूदा उत्तर के साथ क्यों जवाब देते हैं?
बोवेन

13

यदि आप "git pull" और "git fetch" के लिए केवल विशिष्ट शाखाओं को लाने के लिए डिफ़ॉल्ट बदलना चाहते हैं, तो आप .git / config को संपादित कर सकते हैं ताकि दूरस्थ कॉन्फ़िगरेशन जैसा दिखे।

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master

यह केवल डिफ़ॉल्ट रूप से मूल से मास्टर प्राप्त करेगा। अधिक जानकारी के लिए देखें: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

संपादित करें: बस एहसास हुआ कि यह वही है जो -t विकल्प गिट रिमोट ऐड के लिए करता है। यदि आप ओटी को रिमोट डिलीट नहीं करना चाहते हैं और इसे -t का उपयोग करके फिर से जोड़ना चाहते हैं तो कम से कम यह एक अच्छा तरीका है।


1
progit.org/book/ch9-5 लिंक git-scm.com/book/en/Git-Internals-The-Refspec पर स्थानांतरित हो गया है
यहाँ

8

पूर्णता की खातिर, यहाँ एक ताजा चेकआउट के लिए एक उदाहरण दिया गया है:

git clone --branch gh-pages --single-branch git://github.com/user/repo

जैसा कि अन्य उत्तरों में बताया गया है, यह remote.origin.fetchइस तरह सेट होता है:

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

5

git संस्करण: 2.74

यह मेरा इसे करने का तरीका है:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]

4

git संस्करण 2.16.1.windows.4

बस एक git लाने के लिए RemoteRepositoryName ब्रांचनाम (eg: git fetch origin my_local_branch) काफी है। फ़ेच किया जाएगा और उसी नाम से एक नई स्थानीय शाखा बनाई जाएगी और दूरस्थ शाखा में ट्रैकिंग स्थापित की जाएगी।

फिर git चेकआउट शाखा का नाम दें


1
git branchजब तक आप इसमें चेकआउट नहीं करते हैं, तब तक यह शाखा दिखाई नहीं देती है
19 आम

3

मेरे कामगार:

git fetch --depth=1
git checkout <branch_name>

यदि आपके पास कोई स्थानीय क्लोन नहीं है:

git clone --depth 1 -b <branch_name> <repo_url>

3
  1. वह कोई भी <remote_name>उपयोग करें जिसे आप उपयोग करना चाहते हैं ( origin चरण 1 का उपयोग करने और छोड़ने के लिए स्वतंत्र महसूस करें )
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. <your_local_branch_name>आप जो भी उपयोग करना चाहते हैं उसे चुनें । जैसा हो सकता है <branch>
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

उम्मीद है की वो मदद करदे!


2

जवाब वास्तव में आपके पास मौजूद ट्रैकिंग शाखाओं की वर्तमान सूची पर निर्भर करता है। आप किसी विशिष्ट शाखा को रिमोट से git fetch <remote_name> <branch_name> केवल तभी प्राप्त कर सकते हैं जब शाखा पहले से ही ट्रैकिंग शाखा की सूची में हो (आप इसे देख सकते हैं git branch -r)।

मान लें कि मैंने पहले रिमोट - सिंगल्स-ब्रांच विकल्प के साथ क्लोन किया है, और इस मामले में मेरे पास केवल एक ट्रैकिंग शाखा "क्लोन" है। मैं मैन्युअल रूप से और साथ ही git remote add <remote_name> <remote_url>कमांड टाइप करके git config को ट्वीक करने की सलाह देता हूं । जैसा कि "git Remote add" एक नया रिमोट सेट करता है, यह स्पष्ट रूप से मौजूदा रिमोट रिपॉजिटरी के साथ काम नहीं करता है; "-t शाखा" विकल्पों की आपूर्ति करने से मुझे मदद नहीं मिली।

यदि दूरस्थ मौजूद है, और जिस शाखा को आप लाना चाहते हैं, वह उस रिमोट में मौजूद है:

  1. जाँच करें git branch -rकि क्या आप इस शाखा को ट्रैकिंग शाखा के रूप में देख सकते हैं। यदि नहीं (जैसा कि एक एकल शाखा क्लोन के साथ मेरे मामले में) है, तो इस शाखा को --add विकल्प के साथ "git दूरस्थ सेट-शाखाओं" द्वारा ट्रैकिंग शाखा सूची में जोड़ें:

    • git remote set-branches --add <remote_name> <branch_name>
  2. अब आप एक विशिष्ट शाखा ला सकते हैं (यहां अन्य उत्तर दोहराएं):

    • git fetch <remote_name> <branch_name>
  3. और "चेकआउट - ट्रैक" के साथ एक नई स्थानीय शाखा बनाएं और चेकआउट करें, जिसे ट्रैकिंग शाखा के रूप में समान "शाखा_नाम" दिया जाएगा:

    • git checkout --track <remote_name>/<branch_name>

0

ऐसा करने का सबसे सरल तरीका

  git fetch origin <branch> && git checkout <branch>

उदाहरण: मैं उत शाखा को मूल से लाना चाहता हूं और इसे वर्तमान कार्य शाखा के रूप में बदल देता हूं।

   git fetch origin uat && git checkout uat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.