मैं- a-lele- शाखा क्लोन को "पूर्ववत" कैसे करूं?


102

मैं का उपयोग कर एक रेपो क्लोन किया

git clone -b <branch name> --single-branch <github url> <target directory>

यह केवल इस शाखा का क्लोन करता है, लेकिन अब मैं मास्टर और अन्य शाखाओं में स्विच करना चाहता हूं। क्या कोई रास्ता नहीं है इसे साफ करने और रेपो के बाकी हिस्सों को क्लोन करने के लिए शुरू करने के अलावा जो मैं -सिंघल-शाखा वरीयता को पूर्ववत कर सकता हूं?

जवाबों:


147

आप Git को सभी शाखाओं को इस तरह खींचने के लिए कह सकते हैं:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

यदि आप देखते हैं .git/config, तो यह कुछ इस तरह दिखाई देगा:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false
[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

मैंने इसकी तुलना एक पूर्ण क्लोन से की, और देखा कि एकमात्र अंतर "भ्रूण" के तहत था [remote "origin"]

नोट: मैं Git संस्करण 1.8.2 चला रहा हूं। यदि आप Git का पुराना संस्करण चला रहे हैं तो कॉन्फ़िगरेशन विकल्प बदल सकते हैं। यदि मेरे आदेश काम नहीं करते हैं, तो मैं .git/configआपको यह देखने की सलाह दूंगा कि क्या आप कुछ इसी तरह देख सकते हैं।


2
बस आपको एक विशेष धन्यवाद की पेशकश करना चाहता था क्योंकि मैंने बहुत कुछ पढ़ने और गुगली करने की एक बिल्ली को किया था और इस तरह से कुछ भी करने में सक्षम नहीं था।
danieltalsky

2
मदद करने में खुशी। gitकमांड लाइन टूल, अविश्वसनीय रूप से शक्तिशाली (वास्तव में, आदेशों के अधिकांश अन्य आदेशों के मामले में लागू किया जाता है) है, तो आप इसके साथ सामान की एक पूरी बहुत कुछ कर सकते एक बार आप (समझ कैसे भंडार खर्च की गई थी मूल रूप से कैसे .gitफ़ोल्डर काम करता है )।
सरहहोडने

यह मेरे लिए काम नहीं किया - इन आदेशों को चलाने के बाद git show-ref tagsभी विफल रहता है।
felixfbecker

1
ध्यान दें कि यह समाधान भी काम करेगा यदि एक शाखा उथले सिंटैक्स का उपयोग करते हुए क्लोन किया गया था, जो कि ओपी द्वारा वर्णित एक ही कमी का अनुभव करता है:git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
डेनामैकेमिलन

1
वाह, यह सहज ज्ञान से दूर है! यह अजीब है Git आसानी से यह पूरा करने के लिए एक आदेश नहीं है। हाँ, मैं इसे काम कर रहा हूँ ... और अब मुझे पता है कि वह config फ़ाइल int के बारे में जानता है। उसकी निर्देशिका भी है!
काशीराज

61

यदि आप एकल शाखा जोड़ना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

जीआईटी संस्करण 1.9.1 के साथ काम करता है


1
मुझे आपसे प्यार है
user1760150

4
fetch =जब आप दूरस्थ पर दो शाखाओं के बीच स्विच करना चाहते हैं लेकिन अन्य शाखाओं का एक पूरा गुच्छा नहीं लाना चाहते हैं, तो यह .it / config करने के लिए कई पंक्तियों को जोड़ता है । धन्यवाद!
टेरी ब्राउन

4

अपने स्थानीय भंडार में एक और दूरस्थ शाखा जोड़ने के लिए जिसका उपयोग करके क्लोन किया गया था --single-branch, मेरे लिए निम्नलिखित कार्य करता है:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

आप भी [remote-branch]उदाहरण के लिए वाइल्डकार्ड का उपयोग कर सकते हैं

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

यह git संस्करण 2.21.1 का उपयोग करके काम करता है । अन्य जवाब देने का सुझाव देने से git fetch origin [remote-branch]:[local-branch]काम नहीं चला क्योंकि यह स्थानीय शाखा को एक अनियोजित स्थिति में बनाता है। git pullइसे चलाते समय पहली बार रिमोट शाखा के सभी आवागमन को एक बार फिर से मेरे स्थानीय में मिलाने का प्रयास किया गया।


2
दूसरी बार मैं इस जवाब पर लौटता हूं। बहुत उपयोगी। धन्यवाद!
Godbout

1
सबसे उपयोगी जवाब
डेनिस इटकोविच

1
तीसरी बार योग्य।
गोदाम

लगता है जैसे हमारे पास एक ही रिलीज़ चक्र है :)
Arno Fiva

1

बस मूल रेपो को एक नए रिमोट के रूप में जोड़ें, और वहां से काम करें?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

यदि आप चाहें तो आप अपने वर्तमान 'मूल' रिमोट को भी हटा सकते हैं और 'myNewOrigin' का नाम बदलकर 'मूल' कर सकते हैं।

वहां से आप खींच / मर्ज / रिबेस कर सकते हैं।


0

बस .git/configअपने स्थानीय रेपो की लाइन fetchको बदलें [remote origin] section

कुछ इस तरह से पहले

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master

इसके बाद ऐसा होगा

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

मैंने शुरू में डोमिनिक पावलक के उत्तर को लागू किया और इसने काम किया। लेकिन मैंने अपनी नई शाखा में अधिक कोड लागू करने के बाद कोई और बदलाव नहीं किया।

single-branchपूरी तरह से रीसेट करने का एक और तरीका है , जिसका उल्लेख यहां नहीं किया गया है:

git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

यह मूल के लिए सब कुछ रीसेट करता है।


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