मैं Git में किसी एक शाखा का क्लोन कैसे बनाऊं?


799

मेरे पास स्थानीय कंठ भंडार है जिसे 'कंकाल' कहा जाता है जिसका उपयोग मैं परियोजना कंकाल के भंडारण के लिए करता हूं। विभिन्न प्रकार की परियोजनाओं के लिए इसकी कुछ शाखाएँ हैं:

casey@agave [~/Projects/skeleton] git branch
* master
  rails
  c
  c++

यदि मैं एक नई परियोजना के लिए मास्टर शाखा की जांच करना चाहता हूं, तो मैं कर सकता हूं

casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/

और सब कुछ है कि मैं यह कैसे चाहता हूं। विशेष रूप से, नया मास्टर शाखा कंकाल मास्टर शाखा को इंगित करता है, और मैं बुनियादी परियोजना सेटअप में परिवर्तन के लिए आगे बढ़ने के लिए धक्का और खींच सकता हूं।

हालांकि, अगर मैं दूसरी शाखा का क्लोन बनाना चाहता हूं, तो यह काम नहीं करता है। मैं इसे प्राप्त नहीं कर सकता ताकि मैं केवल उस शाखा को खींच सकूं जिसे मैं चाहता हूं, उदाहरण के लिए railsशाखा, और फिर नई रिपॉजिटरी में एक masterशाखा है जो कंकाल के रिपॉजिटरी की railsशाखा से डिफ़ॉल्ट रूप से धक्का देती है और खींचती है ।

क्या ऐसा करने का कोई अच्छा तरीका है? या, शायद यह वह तरीका नहीं है जो मुझे चीजों को संरचना करने के लिए चाहता है, और मैं निश्चित रूप से इसके लिए खुला हूं। शायद मेरे पास कई रिपॉजिटरी होनी चाहिए, रूबी ऑन रेल्स कंकाल रिपॉजिटरी के साथ मास्टर कंकाल रिपॉजिटरी को ट्रैक करना चाहिए? और किसी भी व्यक्तिगत परियोजना रूबी पर रेल कंकाल रिपॉजिटरी क्लोनिंग।


क्या git branch -aदिखाता है?
जकुब नारबस्की

3
चाहेंगे git checkout -b newbranch origin/branchiwantबेहतर काम करता है? ( --trackविकल्प के बिना )
VonC

3
मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं वह एक बुरा विचार है। विभिन्न परियोजनाओं के लिए विभिन्न रिपॉजिटरी का उपयोग करें। शाखाएं कुछ पूरी तरह से अलग हैं।
इन्नाएम

@ मन्नी, मैं इस तरह की सोच रहा था, क्योंकि मुझे यह पसंद नहीं था कि मैं क्या कर रहा हूँ। क्या आप व्यख्या कर सकते हैं? क्या यह इसलिए है क्योंकि शाखाओं को लंबे समय तक नहीं रहना चाहिए?
केसी रोडर्मर

1
@rodarmor मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं वह एक अच्छा विचार है, और मेरे पास यह सवाल था।
पॉल डू बोइस

जवाबों:


863

नोट: git1.7.10 (अप्रैल 2012) वास्तव में आपको केवल एक शाखा का क्लोन बनाने की अनुमति देता है :

# clone only the remote primary HEAD (default: origin/master)
git clone --single-branch

as in:
git clone <url> --branch <branch> --single-branch [<folder>]

आप इसे देख सकते हैं t5500-fetch-pack.sh:

test_expect_success 'single branch clone' '
  git clone --single-branch "file://$(pwd)/." singlebranch
'

टोबू टिप्पणी है कि:

यह उथले क्लोन करते समय निहित है।
यह git clone --depth 1बैंडविड्थ को बचाने का सबसे आसान तरीका है।

और Git 1.9.0 (फरवरी 2014) के बाद से, उथले क्लोन डेटा ट्रांसफर (पुश / पुल) का समर्थन करते हैं, इसलिए यह विकल्प अब और भी उपयोगी है।
" क्या git clone --depth 1(उथले क्लोन) से अधिक उपयोगी है जितना इसे बनाता है? "


"उथला" एक उथला क्लोन विस्तृत है " उथले क्लोन को पूर्ण क्लोन में बदलें " (गिट 1.8.3+)

# unshallow the current branch
git fetch --unshallow

# for getting back all the branches (see Peter Cordes' comment)
git config remote.origin.fetch refs/heads/*:refs/remotes/origin/*
git fetch --unshallow

क्रिस टिप्पणियों के रूप में :

गायब होने वाली शाखाओं को पलटने के लिए जादू की रेखा --single-branchहै (git v2.1.4):

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

Git 2.26 (Q1 2020) के साथ, " git clone --recurse-submodules --single-branch" अब सबमॉड्यूल का क्लोन करते समय उसी एकल-शाखा विकल्प का उपयोग करता है

देखें प्रतिबद्ध 132f600 , प्रतिबद्ध 4,731,957 (21 फ़र, 2020) द्वारा एमिली शैफर ( nasamuffin)
(द्वारा विलय Junio सी Hamano - gitster- में b22db26 प्रतिबद्ध , 05 मार्च 2020)

clone: पास -सिंघल-शाखा के दौरान --recurse-submodules

साइन-ऑफ-बाय: एमिली शफ़र
एकेड-बाय: जेफ़ किंग

पहले, " git clone --recurse-submodules --single-branch" प्रदर्शन करने के परिणामस्वरूप सबमॉड्यूल्स सभी शाखाओं का क्लोनिंग करते थे, भले ही सुपरप्रोजेक्ट केवल एक शाखा पर क्लोन करता था।

--single-branchसबमॉड्यूल हेल्पर ढांचे के माध्यम से पाइप cloneबाद में इसे ' ' ' ' बनाने के लिए ।


80
git clone <url> --branch <branch> --single-branch <folder>एक जादू की तरह काम करता है।
अलेक्जेंडर

1
हाँ, मुझे लगता है कि यह स्वीकृत उत्तर को अपडेट करने का समय है :) यह "एक आकर्षण की तरह काम करता है"
कुमारहर्ष

5
इसके अलावा, यह उथले क्लोन करते समय निहित है। यह clone --depth 1बैंडविड्थ को बचाने का सबसे आसान तरीका है।
तोबू

1
@ टोबू और वॉन --depth 1उपयोगकर्ता के लिए असुरक्षित है क्योंकि वे वास्तव में नए क्लोन के साथ धक्का / खींचना चाह सकते हैं।
एनएमआर

2
बस पीटर कॉर्डेस के सुधार को पूरा करने के लिए, लापता शाखाओं को उलटने के लिए जादू की रेखा --single-branchहै git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*और git fetch --unshallow(git v2.1.4)
क्रिस

670

एक तरीका निम्नलिखित को निष्पादित करना है।

git clone user@git-server:project_name.git -b branch_name /your/folder

branch_nameआपकी पसंद की शाखा कहां है और "/ आपका / फ़ोल्डर" उस शाखा का गंतव्य फ़ोल्डर है। यह सच है कि इससे आपको आगे और पीछे विलय करने का अवसर मिलेगा।

अपडेट करें

Git 1.7.10 से शुरू होकर अब आप ऐसा कर सकते हैं

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder

36
यह काम करता है, लेकिन यह सभी शाखाओं को प्राप्त करता है । नीचे देखें @ frerich = raabe का उत्तर।
cdunn2001

3
धन्यवाद। केवल मेरे मामले में "-b Branch_name" जोड़ें। इसने मुझे बहुत समय बचाया।
फतहवी

हाँ यह पूरी तरह से काम करता है ...! मैं एक टीएफएस व्यक्ति हूं और अपनी निजी परियोजनाओं के लिए जीआईटी का उपयोग कर रहा हूं। Writ git ब्रांचिंग, मैं इसे पहले से गलत तरीके से कर रहा था और इस आसान तरीके को जानकर अच्छा लगा! एक बार फिर धन्यवाद! पहले से ही + 1'd, यदि संभव हो तो मैं +100 :)
k25

11
आप --single-branchसभी इतिहास के बजाय केवल इस शाखा से जुड़े इतिहास को ही जोड़ सकते हैं और भंडार को टैग कर सकते हैं।
दोषपूर्ण

1
@AlexNolasco क्या आप यह कहते हुए उत्तर संपादित कर सकते हैं कि क्या / कुछ / फ़ोल्डर है ? धन्यवाद
Nabin

112

Git संस्करण 1.7.3.1 (विंडोज पर) का उपयोग करते हुए, यहां मैं क्या कर रहा हूं ( $BRANCHउस शाखा का नाम जिसे मैं चेकआउट करना चाहता हूं और $REMOTE_REPOदूरस्थ रिपॉजिटरी का URL है, जिससे मैं क्लोन करना चाहता हूं):

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

इस दृष्टिकोण का लाभ यह है कि बाद में git pull(या git fetch) कॉल भी केवल अनुरोधित शाखा को डाउनलोड करेंगे।


आपकी स्क्रिप्ट और इस लाइन के बीच क्या अंतर है? git clone -b $BRANCH $REMOTE_REPO $BRANCHक्या वे समान हैं?
इयान वॉन

12
@ इयान: एक अंतर यह है कि git clone -bआपको git branch -aशो के रूप में सभी रिमोट रिफ (सभी दूरस्थ शाखाएं और टैग) मिलते हैं । मेरी स्क्रिप्ट के साथ, आपको बस एक ही रेफरी मिलेगा।
Frerich Raabe

1
जब मैं ऊपर की कोशिश करता हूं ($ BRANCH = "निक" के साथ कहता हूं), तो मुझे 'घातक: दूरस्थ रेफरी / सिर / निक' नहीं मिल सकता है। मेरे लिए काम करने के लिए प्रतीत नहीं होता ...
निक

3
ध्यान दें कि -t $BRANCHबिना भी काम करता है -f, जो तुरंत प्राप्त होगा। फिर, git fetch originलाने होता है, और git checkout $BRANCHस्थानीय शाखा और चेकआउट स्थापित करेगा। यह उपयोगी है जब आपको दूरस्थ लाने से पहले कॉन्फ़िगर करने की आवश्यकता होती है, जैसे git config remote.origin.uploadpack=/bin/upload-pack
cdunn2001

1
जैसा कि मैं एक "पुराने" कॉर्पोरेट गिट पर हूं (1.6.0.2) मैं उपरोक्त समाधान के लिए बाध्य हूं। मुझे @Nick जैसी ही समस्या थी। एक्साइटिंग गिट branch -aदिखाया origin/$BRANCHgit checkout origin/$BRANCHयह तय कर रहा है।
डेरी जूल

30

आप लंबे समय से घुमावदार तरीके से कोशिश कर सकते हैं:

mkdir newrepo.git
cd newrepo.git
git init
git remote add origin file:///path/to/original
git fetch origin branchiwant:refs/remotes/origin/branchiwant
git checkout -b branchiwant --track origin/branchiwant

यह क्या है:

  • एक खाली गिट रिपॉजिटरी बनाएं और डालें।
  • मूल रिपॉजिटरी को मूल नामक रिमोट के रूप में जोड़ता है ।
  • केवल शाखा जिसे आपको रिमोट कहा जाता है, जिसे मूल कहा जाता है
  • एक नई शाखा बनाता है और जांचता है जिसे आपके द्वारा क्लोन किए गए स्रोत शाखा को ट्रैक करने के लिए स्थापित किया जाता है।

उम्मीद है कि आप के बाद जैसा होगा वैसा ही कुछ होगा।


रिमोट ऐड जोड़ने के तर्क की अदला-बदली की जाती है, लेकिन मैं तब काम करने के लिए चेकआउट नहीं कर सकता था। "git चेकआउट उत्पत्ति / रेल" ने मुझे "त्रुटि: pathspec 'मूल / रेल' git के लिए ज्ञात किसी भी फ़ाइल (s) से मेल नहीं खाया।" और विकल्प ने मुझे "घातक: गिट चेकआउट: अद्यतन पथ स्विचिंग शाखाओं के साथ असंगत है।"
केसी रोडरमोर

@rodarmor: git रिमोट कमांड को सही किया है, धन्यवाद। आप के उत्पादन पेस्ट कर सकते हैं git branch -r?
11

@jkp, वास्तव git branch -rमें कोई आउटपुट नहीं देता है।
केसी रोडरमोर

@rodarmor: मैंने उदाहरण को सही किया है और यह निश्चित रूप से काम करता है (परीक्षण)। HTH (आप इसे एक बार स्वीकार कर सकते हैं कि आप इसे पसंद करते हैं;))
jkp

-b स्विच अपेक्षाकृत नया है। पिछली बार मैंने इसे डेबियन निचोड़ पर चलाया था, यह उपलब्ध नहीं था, IIRC
sehe

23

आप इसे निम्न आदेश का उपयोग करके कर सकते हैं:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in

2
पूरी तरह से काम किया है, मैं वास्तव में स्रोत पेड़ में एक भी शाखा क्लोन करने के लिए समस्या थी, इस प्रकार यह मैन्युअल रूप से किया
azhar22k

17

से Git क्लोन आदमी पेज :

--single-branchक्लोन के दौरान आपके मित्र को --branch <branch name>केवल प्राथमिक हीड के साथ प्रयोग करना याद होगा या क्लोन किया जाएगा (डिफ़ॉल्ट रूप से मास्टर)

हमेशा याद रखने के लिए Ctrl+ F5ताजा स्रोत पढ़ने के लिए याद रखें , कैश से नहीं :-) (मुझे इस विकल्प के बारे में लंबे समय तक पता नहीं था।)


1
git clone <url> --branch <branch> --single-branch <folder>
श्रीदत्त कोठारी


8

क्लोन केवल एक शाखा। यह सबसे आसान तरीका है:

$ git clone -b BRANCH_NAME --single-branch git@bitbucket.org:___/PROJECTNAME.git

4

एक विशिष्ट शाखा के क्लोनिंग के लिए आप यह कर सकते हैं:

git clone --branch yourBranchName git@yourRepository.git


3

Git की एक शाखा की क्लोनिंग के लिए आपके पास सार्वजनिक कुंजी नहीं है, इसका उपयोग करें:

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>

2

Cmd खोलें।

cd folder_name (उस शाखा में प्रवेश करें जहाँ शाखा को क्लोन करना है)

सिर्फ एक आदेश:

git clone url_of_projecturltoclone -b branch_name

2

थोड़ी देर हो गई लेकिन मैं इस समस्या को हल करने के लिए इस्तेमाल किया गया समाधान जोड़ना चाहता था। मैं समाधान पाया यहाँ

वैसे भी, यह सवाल पूछा जा रहा है कि 'किसी अन्य रेपो की शाखा से एक नई परियोजना कैसे शुरू करें?'

इसके लिए, मैंने जो समाधान किया था, वह पहले गितुब में या जहां कभी भी एक नया रेपो बनाना होगा। यह आपके नए प्रोजेक्ट के रेपो के रूप में काम करेगा।

अपनी स्थानीय मशीन पर, उस परियोजना पर नेविगेट करें जिसमें वह शाखा है जिसे आप अपनी नई परियोजना के लिए टेम्पलेट के रूप में उपयोग करना चाहते हैं।

कमांड चलाएँ:

git push https://github.com/accountname/new-repo.git +old_branch:master

यह क्या करेगा पुराने_ब्रांच को नए-रेपो में धकेल देगा और इसे नए रेपो की मास्टर ब्रांच बना देगा।

फिर आपको बस नए रेपो को अपने नए प्रोजेक्ट के लोकल डायरेक्टरी में डाउन करना होगा और आपके पास पुराने ब्रांच में शुरू किया गया एक नया प्रोजेक्ट होगा।


2

आइए हम फ्लास्क रेपो का उदाहरण लेते हैं। गुरु के अतिरिक्त इसकी 3 शाखाएँ हैं। आइए हम 1.1.x दूरस्थ शाखा की जांच करें

क्लोन रेपो

git clone https://github.com/pallets/flask

रेपो में सीडी।

cd flask

दूरस्थ दूरस्थ शाखा 1.1.x

git fetch origin 1.1.x

शाखा की जाँच करें

git checkout 1.1.x

आप शाखा को 1.1.x पर स्विच करेंगे और यह दूरस्थ 1.1.x शाखा को ट्रैक करेगा।



0

यदि आप एक उथले क्लोन चाहते हैं, तो आप इसके साथ कर सकते हैं:

git clone -b mybranch --depth=1 https://example.com/myproject.git localname

--depth=1तात्पर्य है --single-branch


0

इसके लिए मुख्य रूप से 2 समाधान हैं:

  1. आपको -b कमांड स्विच के साथ शाखा का नाम निर्दिष्ट करना होगा। यहां विशिष्ट गिट शाखा को क्लोन करने के लिए कमांड का सिंटैक्स है।

git clone -b <BRANCH_NAME> <GIT_REMOTE_URL>

उदाहरण: git clone -b tahir https://github.com/Repository/Project.git

निम्न कमांड git रिपॉजिटरी से ब्रांच ताहिर को क्लोन करेगा। ऊपर कमांड क्लोन केवल विशिष्ट शाखा है, लेकिन अन्य शाखाओं का विवरण प्राप्त करता है। आप कमांड के साथ सभी शाखाओं का विवरण देख सकते हैं। git branch -a

  1. आप नीचे दिए गए अन्य शाखाओं के विवरण प्राप्त करने से रोकने के लिए '- सिंगल्स-शाखा' ध्वज का उपयोग कर सकते हैं :

git clone -b <BRANCH_NAME> --single-branch <GIT_REMOTE_URL>

उदाहरण: git क्लोन -b ताहिर - सिंघल-शाखा https://github.com/Repository/Project.it

अब यदि आप एक करते हैं git branch -a, तो यह केवल आपकी वर्तमान एकल शाखा को दिखाएगा कि आपने क्लोन किया है और सभी शाखाओं को नहीं। तो यह आप पर निर्भर करता है कि आप इसे कैसे चाहते हैं।

आशा है कि यह किसी दिन मदद करता है !! ...


0

आप इस कमांड का उपयोग सिंगल ब्रांच को करने के लिए कर सकते हैं और फ़ोल्डर का नाम बदल सकते हैं यदि आप ब्रंचयुक्त स्टैंड को अकेले रखना चाहते हैं

git clone -b [branch-name] --single-branch [url]  [folder_name]

उदाहरण

git clone -b mybranch --single-branch git://github/repository.git  project_mybranch


-1

2 चरणों में किया जा सकता है

  1. भंडार का क्लोन

    • git clone <http url>
  2. इच्छित शाखा की जाँच करें

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