গিটে আমি কীভাবে একটি একক শাখা ক্লোন করব?


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বিকল্প ছাড়াই )
ভোনসি

3
আমি মনে করি আপনি সেখানে যা করার চেষ্টা করছেন তা একটি খারাপ ধারণা। বিভিন্ন প্রকল্পের জন্য বিভিন্ন সংগ্রহস্থল ব্যবহার করুন। শাখাগুলি সম্পূর্ণ আলাদা কিছু something
innaM

@ মান্নি, আমি এমন ভাবনা ভেবেছিলাম যেহেতু গিটারটি আমি যা করছি তা পছন্দ করে না। কেন আপনি ব্যাখ্যা করতে পারেন? শাখাগুলি দীর্ঘায়িত হওয়া উচিত নয় বলে?
কেসী রোডারমোর

1
@rodarmor আমি মনে করি আপনি যা করতে চেষ্টা করছেন সেখানে একটি ভাল ধারণা আছে এবং আমার ঠিক এই প্রশ্নটি ছিল।
পল ডু বোইস

উত্তর:


862

দ্রষ্টব্য: git1.7.10 (এপ্রিল ২০১২) আসলে আপনাকে কেবল একটি শাখা ক্লোন করতে দেয় :

# 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 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 config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  

গিট 2.26 (কিউ 12020) সহ, " git clone --recurse-submodules --single-branch" সাবমডিয়ুলগুলি ক্লোনিং করার সময় এখন একই একই শাখা বিকল্পটি ব্যবহার করে

প্রতিশ্রুতিবদ্ধ 132f600 দেখুন , এমিলি শেফারের (21 ফেব্রুয়ারী 2020) প্রতিশ্রুতিবদ্ধ 4731957 (21 ফেব্রুয়ারী )(দ্বারা একীভূত junio সি Hamano - - মধ্যে b22db26 কমিট , 05 মার্চ 2020)nasamuffin
gitster

clone: --recurse-submodules সময় --single- শাখা পাস

সাইন-অফ-বাই: এমিলি শেফার
একিড-বাই: জেফ কিং

পূর্বে, " git clone --recurse-submodules --single-branch" সঞ্চালনের ফলে সাব-মডিউলগুলি সমস্ত শাখাগুলিকে ক্লোন করে ফেলত যদিও সুপারপ্রজেক্টটি কেবল একটি শাখা ক্লোন করে।

--single-branchসাবমডিউল সহায়ক কাঠামোর মাধ্যমে পাইপ এটি cloneপরে ' ' এ তৈরি করতে।


80
git clone <url> --branch <branch> --single-branch <folder>একটি যাদুমন্ত্র মত কাজ করে.
আলেকজান্ডার 16

1
হ্যাঁ, আমি মনে করি এটি গৃহীত উত্তর আপডেট করার সময় এসেছে :) এটি "
মনোমুগ্ধকর

5
এছাড়াও, অগভীর ক্লোন করার সময় এটি জড়িত। এটি clone --depth 1ব্যান্ডউইথকে বাঁচানোর সবচেয়ে সহজ উপায় করে।
তোবু

1
@ টবু এবং ভনসি --depth 1ব্যবহারকারীর পক্ষে অনিরাপদ কারণ তারা সম্ভবত নতুন ক্লোনটি দিয়ে ধাক্কা দিতে / টানতে চাইতে পারে।
এনএমআর

2
শুধু পূর্ণ পিটার Cordes 'সংশোধন বানান হয়, বিপরীত শাখা অনুপস্থিত পাবার জন্য যাদু লাইন --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আপনার পছন্দের শাখাটি কোথায় এবং "/ আপনার / ফোল্ডার" সেই শাখার গন্তব্য ফোল্ডার। এটি সত্য যে এটি অন্যান্য শাখাগুলি আপনাকে সামনে এবং পিছনে মার্জ করার সুযোগ দেয় to

হালনাগাদ

এখন, গিট 1.7.10 দিয়ে শুরু করে আপনি এখন এটি করতে পারেন

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

36
এটি কাজ করে, তবে এটি সমস্ত শাখা নিয়ে আসে। নীচে @ ফ্রেরিচ = রাবের উত্তর দেখুন।
cdunn2001

3
আপনাকে ধন্যবাদ. আমার ক্ষেত্রে কেবল "-বি ব্রাঞ্চ_নাম" যুক্ত করুন। এটি আমার অনেক সময় বাঁচিয়েছিল।
ফ্যাটএইচভি

হ্যাঁ এটি পুরোপুরি কাজ করে ...! আমি টিএফএসের আরও একজন এবং আমার ব্যক্তিগত প্রকল্পগুলির জন্য গিট ব্যবহার করা হচ্ছে। রাইট গিট ব্রাঞ্চিং, আমি আগে এটি ভুল উপায়ে করছিলাম এবং এই সহজ পদ্ধতিটি জেনে ভাল এবং এটি নিখুঁত বলে মনে হচ্ছে! আবার ধন্যবাদ! ইতিমধ্যে +1, সম্ভব হলে আমি দিতে হবে +100 :)
k25

11
আপনি --single-branchএই শাখার সাথে সম্পর্কিত সমস্ত ইতিহাস এবং ইতিহাসের ট্যাগগুলির পরিবর্তে কেবলমাত্র এই শাখার সাথে সম্পর্কিত ইতিহাস আনতে যোগ করতে পারেন ।
flawyte

1
@ অ্যালেক্সনোলাস্কো আপনি কি কিছু / ফোল্ডার / ফোল্ডারটি বলে উত্তরটি সম্পাদনা করতে পারেন ? আপনাকে ধন্যবাদ
নবীন

112

গিট সংস্করণ ১..3.৩.১ (উইন্ডোজে) ব্যবহার করে আমি এখানে যা করছি ( $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শো হিসাবে দেয় as আমার স্ক্রিপ্ট সহ, আপনি কেবল একটি একক রেফার পাবেন।
ফ্রেরিচ রাবাবে

1
আমি যখন উপরেরটি চেষ্টা করি ($ ব্রাঞ্চ = "নিক" দিয়ে বলি), আমি 'মারাত্মক: দূরবর্তী রেফ / রেফ / হেড / নিক' খুঁজে পাইনি। আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না ...
নিক

3
নোট করুন যে -t $BRANCHএমনকি ছাড়াই কাজ করে -fযা অবিলম্বে আনতে পারে। তারপরে, git fetch originআনতে হবে, এবং git checkout $BRANCHস্থানীয় শাখা এবং চেকআউট স্থাপন করবে। আনার আগে আপনাকে যখন রিমোটটি কনফিগার করতে হবে তখন এটি কার্যকর git config remote.origin.uploadpack=/bin/upload-pack
cdunn2001

1
আমি একটি "পুরানো" কর্পোরেট গিট হিসাবে থাকি (1.6.0.2) আমি উপরের সমাধানে আবদ্ধ। @ নিকের মতো আমারও একই সমস্যা ছিল। এক্সিকিউটিং গিট branch -aদেখানো হয়েছে origin/$BRANCH। করছেন এটি git 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 branch -r?
jkp

@jkp, আসলে git branch -rকোনও আউটপুট দেয় না।
কেসি রডর্মার

@ আরডারমোর: আমি উদাহরণটি সংশোধন করেছি এবং এটি অবশ্যই কার্যকর (পরীক্ষিত)। এইচটিএইচ (আপনি এটি নিজের পছন্দ মতো একবার পরীক্ষা করে গ্রহণ করতে পারেন;))
জেপিপি

-বি সুইচ তুলনামূলকভাবে নতুন। গতবার আমি এটি একটি ডেবিয়ান স্কিজে চালিয়েছিলাম এটি উপলব্ধ ছিল না, আইআইআরসি
গতবার স্কিজে চালিয়েছিলাম


17

থেকে Git-ক্লোন man পৃষ্ঠা :

--single-branchক্লোন চলাকালীন আপনার বন্ধুটি কি ব্যবহারের সাথে মনে রাখবেন --branch <branch name>বা কেবল দূরবর্তী প্রাথমিক হেডই ক্লোন করা হবে (ডিফল্টরূপে মাস্টার)

সর্বদা তাজা উত্স পড়তে Ctrl+ F5করতে ভুলবেন না , ক্যাশে থেকে একটি নয় :-) (আমি দীর্ঘকাল ধরে এই বিকল্পটি সম্পর্কে জানতাম না))


1
Git ক্লোন <URL> --branch <শাখা> --single-শাখা <ফোল্ডারের>
shridutt কোঠারি


8

শুধুমাত্র একটি শাখা ক্লোন করুন। এই সবচেয়ে সহজ উপায়:

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

4

নির্দিষ্ট শাখা ক্লোন করার জন্য আপনি এটি করতে পারেন:

git clone --branch yourBranchName git@yourRepository.git


3

গিটের একটি শাখা ক্লোন করার জন্য আপনার কাছে সর্বজনীন কী নেই, এটি ব্যবহার করুন:

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

2

সেমিডি খুলুন।

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 কমান্ড স্যুইচ সহ শাখার নাম নির্দিষ্ট করতে হবে। নির্দিষ্ট গিট শাখা ক্লোন করতে কমান্ডটির বাক্য গঠন এখানে রয়েছে is

git clone -b <BRANCH_NAME> <GIT_REMOTE_URL>

উদাহরণ: গিট ক্লোন-বি তাহির https://github.com/Repository/Project.git

নিম্নলিখিত কমান্ডটি গিট সংগ্রহস্থল থেকে শাখা তাহিরকে ক্লোন করবে above উপরের কমান্ডটি কেবলমাত্র নির্দিষ্ট শাখাটিকে ক্লোন করে তবে অন্যান্য শাখাগুলির বিবরণ নিয়ে আসে। আপনি কমান্ডের সাথে সমস্ত শাখার বিবরণ দেখতে পারেন। git branch -a

  1. নীচের মতো অন্যান্য শাখাগুলির বিবরণ আনতে প্রতিরোধ করতে আপনি '--single- শাখা' পতাকা ব্যবহার করতে পারেন :

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

উদাহরণ: গিট ক্লোন-বি তাহির - ইউনিয়ন-শাখা https://github.com/Repository/Project.git

এখন আপনি যদি একটি git branch -a এটি করেন তবে এটি কেবলমাত্র আপনার বর্তমান একক শাখাটি প্রদর্শন করবে যা আপনি ক্লোন করেছেন এবং সমস্ত শাখা নয় o সুতরাং এটি কীভাবে আপনি চান তা আপনার উপর নির্ভর করে।

আশা করি এটি কোনও দিন কাউকে সাহায্য করবে !! ...


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.