গিটের সমস্ত দূরবর্তী শাখা কীভাবে ক্লোন করবেন?


4129

আমার একটি masterএবং একটি developmentশাখা আছে, উভয়ই গিটহাবে ঠেলাঠেলি করে । আমি cloneডি, pullএডি, এবং fetchএডি করেছি, তবে আমি masterশাখা ফিরে ছাড়া অন্য কিছু পেতে অক্ষম রয়েছি।

আমি নিশ্চিত যে আমি স্পষ্ট কিছু মিস করছি, তবে আমি ম্যানুয়ালটি পড়েছি এবং আমি মোটেও আনন্দ পাচ্ছি না।


133
এখানে গৃহীত উত্তরটি ( git branch -a) আপনাকে রিমোটের শাখাগুলি দেখায়, তবে আপনি যদি তাদের বাইরে থেকে কোনওটি পরীক্ষা করার চেষ্টা করেন তবে আপনি একটি 'বিচ্ছিন্ন হেড' অবস্থায় থাকবেন। পরের উত্তরটি নীচে (দ্বিতীয় সর্বাধিক উন্নতিগুলি) একটি পৃথক প্রশ্নের উত্তর দেয় (বুদ্ধিমানভাবে: কীভাবে সমস্ত শাখা টানতে হবে এবং আবারও, এটি কেবলমাত্র আপনি স্থানীয়ভাবে সন্ধান করছেন তাদের জন্য কাজ করে)। বেশ কয়েকটি মন্তব্য নির্দেশ করে যে আপনি git branch -aফলাফলগুলি শেল স্ক্রিপ্টের সাহায্যে পার্স করতে পারেন যা স্থানীয়ভাবে সমস্ত দূরবর্তী শাখাগুলি ট্র্যাক করে। সংক্ষিপ্তসার: আপনি যা চান তা করার কোনও গিট দেশীয় উপায় নেই এবং এটি যাইহোক এই সমস্ত দুর্দান্ত ধারণা নাও হতে পারে।
ডে ডেভিস ওয়াটারবারি

5
সম্ভবত পুরো ফোল্ডারটি পুরানো ফ্যাশন পদ্ধতিতে অনুলিপি করবেন? scp some_user@example.com:/home/some_user/project_folder ~নিশ্চিত না যে সমাধানটি যদিও
গিথুবের

19
"আমি ক্লোন করেছি, টেনেছি এবং এনেছি" বলার চেয়ে আপনি যে কার্যকর আদেশগুলি কার্যকর করেছেন তা আমাদের দেখানো আরও ভাল ।
বব গিলমোর

57
"ক্লোন" সঠিক অনুলিপিটির অর্থে কেন তা সর্বদা আমাকে বিচলিত করে। যদি এটি একটি সঠিক ক্লোন হয়, সমস্ত শাখা স্থানীয় ভান্ডারগুলির অংশ হওয়া উচিত নয়? আমি বলতে চাচ্ছি যে বিতরণ করা বিন্দু এক? সুতরাং যখন কোনও সংগ্রহস্থল চলে যায় তখন আপনার কাছে সমস্ত কিছুর একটি সম্পূর্ণ অনুলিপি থাকে। নাকি এটি তথাকথিত "রিমোট" ইতিমধ্যে স্থানীয় ভাণ্ডারের অংশ?
হুগি

21
সমস্ত উত্স, উত্তর, উত্তরের মন্তব্য এবং মন-দুরূহ সংখ্যক দর্শন দেখে আমার মনে হয় এটি সময় গিট এটি করার জন্য একটি আদেশ যোগ করেছে। এবং ঠিক আপনি @ হুগি, আমার ধারণা ঠিক exactly
Sнаđошƒаӽ

উত্তর:


4557

প্রথমে একটি দূরবর্তী গিট সংগ্রহস্থলটি ক্লোন করুন এবং এতে সিডি করুন :

$ git clone git://example.com/myproject
$ cd myproject

এরপরে, আপনার সংগ্রহস্থলের স্থানীয় শাখাগুলি দেখুন:

$ git branch
* master

কিন্তু আপনার ভান্ডারে লুকিয়ে থাকা অন্যান্য শাখা রয়েছে! আপনি -aপতাকাটি ব্যবহার করে দেখতে পারেন :

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

আপনি যদি কেবল একটি উজানের শাখায় দ্রুত উঁকি মারতে চান তবে আপনি সরাসরি এটি পরীক্ষা করে দেখতে পারেন:

$ git checkout origin/experimental

তবে আপনি যদি সেই শাখায় কাজ করতে চান তবে আপনাকে একটি স্থানীয় ট্র্যাকিং শাখা তৈরি করতে হবে যা স্বয়ংক্রিয়ভাবে সম্পন্ন হবে:

$ git checkout experimental

এবং আপনি দেখতে পাবেন

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

এই শেষ লাইনে কিছু লোককে ছুড়ে ফেলেছে: "নতুন শাখা" - হাহ? এর সত্যিকারের অর্থ হ'ল শাখাটি সূচক থেকে নেওয়া হয়েছে এবং আপনার জন্য স্থানীয়ভাবে তৈরি করা হয়েছে। পূর্ববর্তী লাইন আসলে আরো তথ্যপূর্ণ হিসাবে এটি আপনাকে বলে যে শাখা দূরবর্তী শাখা, যা সাধারণত উৎপত্তি / branch_name শাখা মানে ট্র্যাক করতে সেট আপ হচ্ছে

এখন, আপনি যদি আপনার স্থানীয় শাখাগুলি দেখে থাকেন তবে এটি আপনি দেখতে পাবেন:

$ git branch
* experimental
  master

আপনি প্রকৃতপক্ষে একাধিক রিমোট রেপোজিটরি ব্যবহার করে ট্র্যাক করতে পারেন git remote

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

এই মুহুর্তে, জিনিসগুলি বেশ পাগল হয়ে উঠছে, তাই কী চলছে gitkতা দেখার জন্য চালান :

$ gitk --all &

119
কীভাবে কেউ স্বয়ংক্রিয়ভাবে সমস্ত দূরবর্তী শাখা তৈরি করতে পারে, যেমন উত্স / পরীক্ষামূলক জন্য পরীক্ষামূলক?
ক্রিশ্চিয়ান সিপিতু

54
ক্রিস্টিয়ান: আমি সবসময় প্রতিটি শাখার 'উত্স / ফু' জন্য একটি শাখা 'ফু' তৈরি করতাম, তবে এর ফলে দুটি সমস্যার মুখোমুখি হয়েছিল: (১) আমি অনেকগুলি সত্যিকারের বাসি ট্র্যাকিং শাখাগুলি দিয়ে আহত করেছিলাম যা সংশ্লিষ্ট দূরবর্তী শাখার পিছনে অনেক কমিট ছিল , এবং (2) গিটের পুরানো সংস্করণগুলিতে, 'গিট পুশ' চালানো আমার সমস্ত স্থানীয় শাখাগুলিকে একটি রিমোটে ঠেলে দেওয়ার চেষ্টা করবে, এমনকি সেই শাখাগুলি বাসি ছিল। সুতরাং এখন আমি কেবল সেই বিষয়গুলির জন্য স্থানীয় শাখা রাখি যা আমি সক্রিয়ভাবে বিকাশ করছি এবং মূল / * শাখাগুলি সম্পর্কে আমার যদি তথ্য প্রয়োজন হয় তবে সরাসরি অ্যাক্সেস করি। (এটি বলেছিল, আপনি 'গিট ব্রাঞ্চ -a' পার্স করার জন্য একটি শেল স্ক্রিপ্ট ব্যবহার করতে পারেন))
ইম্ক

49
"গিট ফেচ <origin-name> <ব্র্যাঞ্চ-নাম>" আপনার জন্য স্থানীয়ভাবে শাখাটি নীচে নিয়ে আসে।

137
ভাল উত্তর, তবে কিন্ডা প্রশ্নটি মিস করে। আমি সমস্ত দূরবর্তী শাখাগুলি চেকআউট করার জন্য একটি লাইনার সন্ধান করছিলাম।
সে.এম.সিগিন্টি

32
প্রশ্নটি ছিল সমস্ত প্রত্যন্ত শাখাগুলি ক্লোন করার বিষয়ে, সেগুলি পরীক্ষা করে দেখেনি। এবং, যেমনটি আমি উপরে উল্লেখ করেছি, আপনি সত্যিই প্রয়োজনের চেয়ে বেশি স্থানীয় ট্র্যাকিং শাখা তৈরি করতে চান না, কারণ যখন তারা সত্যিকার অর্থে বাসি হয়ে যায়, তখন তারা মাথা ব্যথার কারণ হতে পারে।
এমএম

821

আপনার যদি এমন অনেক দূরবর্তী শাখা থাকে যা আপনি একবারে আনতে চান তবে করুন:

$ git pull --all

দূরবর্তী সংগ্রহস্থলটিকে আঘাত না করে এখন আপনি যে কোনও শাখাকে আপনার প্রয়োজন অনুসারে চেকআউট করতে পারেন।


12
আমি যদি গিট ক্লোন করি তবে আমার স্থানীয়ভাবে মাস্টার শাখা এবং 10 টি শাখা "দূরবর্তী" রয়েছে। সুতরাং গ্যাবের এই উত্তরটি খুব সহায়ক ছিল এবং প্রশ্নের উত্তর দিয়েছে।
বাসজিরো

38
এটি কেবলমাত্র দূরবর্তী শাখাগুলি
এনেছে যেগুলি

33
প্রথম কমান্ড অপ্রয়োজনীয়। কেবল git pull --allএকই কাজ করবে - এটি কেবল দুইবার আনবে না। এবং infosec812 ঠিক যে এটি যাইহোক প্রশ্নের উত্তর দেয় না। আমি ভাবছি কীভাবে এটি এত উপার্জন পেল?
সোভেন মারনাচ

6
আমি করার পরে git remote update, তারপর চেষ্টা করার পরে git branch, আমি কেবল স্থানীয় শাখা দেখতে পাই। তবে আমি যদি করি তবে আমি git branch -aএখন প্রত্যন্ত শাখাগুলি দেখতে পাচ্ছি এবং আমি git pull <branchname>যে শাখাটি চাই তা পেতে একটি করতে পারি । - আমি গুগল অনুসন্ধান থেকে এই প্রশ্নটিতে পৌঁছেছি এবং এই উত্তরটি আমার সমস্যা সমাধান করে।
ডাব্লুএনরোজেনবার্গ

38
এটি মোটেই সহায়ক নয়, বিদ্যমান বিদ্যমান ব্যতীত অন্য কোনও দূরবর্তী শাখা টানবেন না।
অবিনাশ আর

446

এই বাশ স্ক্রিপ্টটি আমাকে সাহায্য করেছে:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

এটি মাস্টার ব্যতীত সমস্ত দূরবর্তী শাখার জন্য ট্র্যাকিং শাখা তৈরি করবে (যা সম্ভবত আপনি মূল ক্লোন কমান্ড থেকে পেয়েছেন)। আমার মনে হয় আপনার এখনও একটি করার প্রয়োজন হতে পারে

git fetch --all
git pull --all

নিশ্চিত হতে হবে.

একটি লাইনার : git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
যথারীতি: আমরা জানি যেভাবে rm -rf মহাবিশ্বের অনুলিপি করার আগে আপনার সেটআপে পরীক্ষা করুন

ওয়ান-লাইনারের ক্রেডিট ব্যবহারকারী সিফাইতে যান to


19
এটি নিখুঁত সমাধান হওয়ার খুব কাছাকাছি..এই কার্যকারিতাটি যদি গিটে একটি বিকল্প হিসাবে অন্তর্নির্মিত হয় তবে এটি আরও ভাল করতে পারে।
ডেভেন ফিলিপস

51
"একটি লাইনার": git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs যথারীতি: অনুলিপি করার আগে আপনার সেটআপে পরীক্ষা করুনrm -rf universe as we know it
সিএফআই

4
এই কমান্ডটি দূরবর্তী থেকে সাধারণ শাখা হিসাবে বৈশিষ্ট্যযুক্ত শাখাগুলি তৈরি করে (বৈশিষ্ট্য শাখা নয়) - এটি কীভাবে ঠিক করবেন?
অ্যালেক্স 2 পিএফ

4
আপনি যদি শাখার নামগুলিতে "/" নিয়ে সমস্যাগুলি চালাচ্ছেন তবে গিট ওভার ব্যবহার করে নীচে একটি সমাধান রয়েছে। "কারও নয়" দ্বারা উত্তর দেখুন "মে 15 '13 এ 11:02"
ওয়েমু

8
আমি কেবল remotes/origin/নেমস্পেসগুলি সংরক্ষণ করার জন্য ছাঁটাই করছি :for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
কেজিডেক

347

--mirrorবিকল্পটি ব্যবহার করে মনে হচ্ছে remoteট্র্যাকিং শাখাগুলি যথাযথভাবে অনুলিপি করা হয়েছে । যাইহোক, এটি খালি সংগ্রহস্থল হিসাবে সংগ্রহস্থল সেট আপ করে, তাই আপনাকে পরে এটি পুনরায় একটি সাধারণ সংগ্রহস্থলে পরিণত করতে হবে।

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

তথ্যসূত্র: গিট এফএকিউ: আমি দূরবর্তী অবস্থান থেকে ট্র্যাক করা সমস্ত শাখাগুলি দিয়ে কীভাবে একটি সংগ্রহস্থল ক্লোন করব?


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

27
গিট পুশ - এমিররের সাথে মিলিত এটি হ'ল গিথুব.কম থেকে গিথুব এন্টারপ্রাইজ ইনস্টলে যাওয়ার সময় দূরবর্তী গিট রেপোর হুবহু নকল তৈরি করার জন্য আমার যা দরকার ছিল তা হ'ল। ধন্যবাদ!
জ্যাকব ফিকে

3
@ ডেভ: ক্লোন করা রেপোতে git checkoutঅবশেষে বর্তমান শাখার প্রধানকে চেকআউট করার জন্য শেষ কমান্ড হিসাবে একটি ফাইনাল যুক্ত করুন । এটি একটি দুর্দান্ত উত্তর, এখন পর্যন্ত সেরা। সাহসী হোন, অবশেষে আমরা আপনাকে শীর্ষে নিয়ে যাব :-)
সিএফআই

3
@ ডেভ: এইচএম আমার দ্বিতীয় চিন্তা আছে: - এমিরর ট্র্যাকিং হিসাবে সমস্ত শাখা স্থাপনের চেয়ে আরও বেশি কিছু করে। এটি উত্স থেকে সমস্ত রেফারিকে অনুলিপি করে এবং পরবর্তীকালে git remote updateএটি আবার করবে। টান পরিবর্তন আচরণ। আমি সম্পূর্ণ অনুলিপি বিশ্বাস করতে ফিরে এসেছি একটি এক-লাইন স্ক্রিপ্ট প্রয়োজন।
সিএফআই

5
git clone --mirrorআপনার গিট সংগ্রহস্থলগুলি ব্যাক আপ করার জন্য খুব ভাল ^ _ ^
ত্রিনিট্রনএক্স

220

আপনি অভিনব "গিট চেকআউট-বি কারও ব্রাঞ্চ উত্স / সামান্য ফ্রেঞ্চ" সিনট্যাক্স ব্যবহার না করে সহজেই একটি শাখায় স্যুইচ করতে পারেন। আপনি ঠিক করতে পারেন:

git checkout somebranch

গিট স্বয়ংক্রিয়ভাবে সঠিক কাজ করবে:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

গিট একই নামের একটি শাখা ঠিক একটি দূরবর্তীতে উপস্থিত কিনা তা যাচাই করবে এবং যদি তা হয় তবে এটি সেটিকে একইভাবে ট্র্যাক করবে যেমন আপনি স্পষ্টভাবে উল্লেখ করেছেন যে এটি একটি দূরবর্তী শাখা। গিট 1.8.2.1 এর গিট-চেকআউট ম্যান পৃষ্ঠা থেকে:

যদি <ব্র্যাঞ্চ> পাওয়া না যায় তবে একটি মিলের নামের সাথে ঠিক একটি দূরবর্তীতে ট্র্যাকিং শাখা উপস্থিত থাকে (একে কল করুন <রেডিও>), সমান হিসাবে বিবেচনা করুন

$ git checkout -b <branch> --track <remote>/<branch>

1
সুতরাং, যদি শাখার নামটি আপনি checkoutদূরবর্তী শাখার নামের সাথে সমান হয়, "/" এর পরে সমস্ত কিছু হয়, তবে গিট একই নামের একটি শাখা তৈরি করবে, "/", "ট্র্যাকিং" এর পরে সমস্ত দূরবর্তী ? এবং ট্র্যাকিং মাধ্যমে আমরা কি বলতে চান: git push, git pull, ইত্যাদি যে রিমোটের করা হবে? যদি এটি সঠিক হয়, তবে আপনার উত্তরটি আরও তথ্যের সাথে প্রসারিত করুন, কারণ আমি @ ড্যানিয়েলের সাথে একমত, এই উত্তরটি আরও খ্যাতির দাবিদার।
জেরার্ড রোচে

5
@ বুলফ্রাগব্লুজগুলি, আপনার সমস্ত প্রশ্নের উত্তর হ্যাঁ উপস্থিত হবে (আমি গিট ভি 1.7.7.4 ব্যবহার করছি)। আমি সম্মত হই যে এই আচরণটি আরও ভালভাবে জানা উচিত। (গিটের এই সংস্করণটির জন্য এটি ম্যানুয়ালটিতে নেই)) আমি আসলে এই আচরণটি পছন্দ করি না, আমি বরং একটি ত্রুটি পেয়েছি এবং git checkout --track origin/somebranchস্পষ্টভাবে বলতে চাই ।
সন্দেহভাজনজিম

3
@ সন্দেহজনক জিম: আসলে, এটি ম্যানুয়ালটিতে রয়েছে। গিট-চেকআউট (১) বলেছেন: "যদি <ব্র্যাঞ্চ> পাওয়া না যায় তবে একটি মিলের নামের সাথে ঠিক একটি দূরবর্তীতে (এটি <ফ্রেম> কল করুন) একটি ট্র্যাকিং শাখা উপস্থিত থাকে, তবে 'গিট চেকআউট-বি <শাখার সমতুল্য আচরণ করুন > - ট্র্যাক </ b> </ ফ্রেঞ্চ> '"(গিট ভি .১.৮.১.১.১)।
sleske

আমাদের যা দরকার তা হ'ল গিট টান * <রিমোট> / * - যেখানে "*" একটি ওয়াইল্ডকার্ড, তাই এটি স্থানীয় সিস্টেমে এখনও নেই এমনগুলি সহ সমস্ত শাখা টান করে। এই কিভাবে করবেন? কেবলমাত্র আমাদের স্থানীয় সিস্টেমে কোডটি টানতে আমাদের প্রতিটি শাখা চেকআউট / টানতে হবে?
জোসেফকে

98

সংক্রান্ত,

it গিট চেকআউট-বি পরীক্ষামূলক উত্স / পরীক্ষামূলক

ব্যবহার

$ git checkout -t origin/experimental

বা আরও ভার্বোজ কিন্তু মনে রাখা সহজ

$ git checkout --track origin/experimental

রিমোট রিপোজিটরি ট্র্যাক করার ক্ষেত্রে আরও ভাল হতে পারে।


সুতরাং আপনি বোঝাচ্ছেন যে দ্বিতীয় ফর্মটি মনে রাখা কেবল সহজ এবং অন্য কোনও পার্থক্য নেই?
অ্যাডারচক্স

79

আপনি যে আনতেছেন তা দূরবর্তী সমস্ত শাখা পাওয়া উচিত, তবে এটি তাদের জন্য স্থানীয় শাখা তৈরি করে না। আপনি যদি গিটক ব্যবহার করেন, আপনার "রিমোটস / উত্স / দেব" বা এর অনুরূপ কিছু হিসাবে বর্ণিত দূরবর্তী শাখা দেখতে হবে।

দূরবর্তী শাখার উপর ভিত্তি করে একটি স্থানীয় শাখা তৈরি করতে, এর মতো কিছু করুন:

গিট চেকআউট-বি দেব রেফস / রিমোটস / উত্স / দেব

যা এমন কিছু ফিরিয়ে আনবে:

রিমোট শাখা রেফস / রিমোটস / উত্স / দেব ট্র্যাক করতে শাখা দেব সেট আপ করা হয়েছে।
একটি নতুন শাখা "দেব" এ স্যুইচ করা হয়েছে

এখন, আপনি যখন দেব শাখায় থাকবেন তখন "গিট টান" আপনার স্থানীয় দেবকে দূরবর্তী দেব শাখার মতো একই জায়গায় আপডেট করবে। দ্রষ্টব্য যে এটি সমস্ত শাখা আনবে, তবে কেবলমাত্র গাছের শীর্ষে টানুন।


14
আপনার এখানে রেফ / রিমোটের দরকার নেই। গিট চেকআউট-বি দেব উত্স / দেব ভাল কাজ করবে।
এমএম

3
এই সবসময় কাজ করবে: git checkout -b newlocaldev --track origin/dev। যদি আপনি চান স্থানীয় শাখার দূরবর্তীটির মতো একই নাম রয়েছে, এবং রিমোটটির একটি ছদ্ম নাম নেই, আপনি এটি বাদ দিতে পারেন -b newlocaldev। ডিফল্ট branch.autosetupmergeকনফিগারেশন সেটিংস সহ এবং ধরে নেওয়া আপনার স্থানীয় একটি শাখা নেই বলে ধরে নেওয়া dev, এই দুটি কমান্ড একই জিনিস করতে পারে: git checkout -b dev origin/devএবং কেবল সাধারণ git checkout dev। শেষ পর্যন্ত, git checkout origin/devএকটি নতুন শাখা তৈরি করে না, তবে আপনাকে কেবল আলাদা হেড অবস্থায় রাখবে।
সন্দেহভাজনজিম

যখন রিমোটটি আর বিদ্যমান না থাকে তবে গিটটি মুছে ফেলা হয়েছে তা স্বীকার করার জন্য খুব বোকা কি হয়? এটি আপনাকে আপডেট git branch -aহিসাবে ধরে নিয়েছে এবং এটিকে একটি দূরবর্তী শাখা হিসাবে তালিকাভুক্ত করে।
jww

এবং আমরা কয়েক ডজন শাখার জন্য এটি করি?
জোসেফ

59

আপনি যখন "গিট ক্লোন গিট: // অবস্থান" করেন, সমস্ত শাখা এবং ট্যাগগুলি আনা হয়।

একটি নির্দিষ্ট দূরবর্তী শাখার উপরে কাজ করার জন্য, ধরে নিই এটির মূলটি দূরবর্তী:

git checkout -b branch origin/branchname

2
আমি আপনার নোটটির প্রশংসা করি "সমস্ত শাখা এবং ট্যাগ আনা হয়েছে"। আমি আপনার উত্তরটি ভুল বলে মন্তব্য করতে যাচ্ছিলাম, কিন্তু তারপরে আমি এটি যাচাই করে দেখলাম, আপনি একেবারে ঠিক। সুতরাং একটি উপায়ে আপনি সংক্ষিপ্ত উত্তর সরবরাহ করেছেন - আপনি যদি ক্লোন করে থাকেন তবে আপনার কাছে ইতিমধ্যে তা রয়েছে। খুশী হলাম। কেউ যুক্ত করার চেষ্টা করতে পারে: $ git branch -aশিখতে চেষ্টা করুন , দূরবর্তী শাখাগুলি ইতিমধ্যে উপলব্ধ।
জান Vlcinsky

আমি পোস্ট করা উত্তরটি একবার দেখুন। আপনি যদি জানেন যে আপনি দূরবর্তী অনেক শাখায় স্থানীয়ভাবে কাজ করতে চান এবং সেগুলি একে একে পরীক্ষা করে দেখতে না চান তবে এটি সহায়ক হতে পারে।
lacostenycoder

আপনি পার্থক্য মধ্যে কি আমাকে ব্যাখ্যা করতে পারবেন git checkout -b master origin/masterএবং git checkout --track origin/masterদয়া করে?
অ্যাডারচক্স

1
@ অ্যাডারচক্স আজকাল, আমি কিছুই মনে করি না।
elmarco

58

এলিয়াস ব্যবহার করুন। যদিও কোনও নেটিভ গিট ওয়ান-লাইনার নেই, আপনি নিজের হিসাবে সংজ্ঞা দিতে পারেন

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

এবং তারপরে এটি ব্যবহার করুন

git clone-branches

ধন্যবাদ। এটি অন্যান্য উত্তরগুলির তুলনায় সম্পূর্ণ প্রত্যন্ত শাখাগুলির ক্লোন করে
নির্ভয়হায়না

50

কেন আপনি কেবল "মাস্টার" দেখেন

git cloneসমস্ত দূরবর্তী শাখাগুলি ডাউনলোড করে তবে ফাইলগুলি আপনার নতুন ভান্ডারে থাকা সত্ত্বেও এগুলি "দূরবর্তী" হিসাবে বিবেচনা করে। এর একটি ব্যতিক্রম আছে, এটি হ'ল ক্লোনিং প্রক্রিয়া দূরবর্তী শাখা থেকে "মাস্টার" নামে একটি স্থানীয় শাখা তৈরি করে branch ডিফল্টরূপে, git branchকেবল স্থানীয় শাখা দেখায়, এজন্য আপনি কেবলমাত্র "মাস্টার" দেখেন।

git branch -aপ্রত্যন্ত শাখা সহ সমস্ত শাখা দেখায় ।


কিভাবে স্থানীয় শাখা পেতে

আপনি যদি প্রকৃতপক্ষে কোনও শাখায় কাজ করতে চান তবে আপনি সম্ভবত এটির একটি "স্থানীয়" সংস্করণ চাইবেন। কেবল প্রত্যন্ত শাখাগুলি থেকে স্থানীয় শাখাগুলি তৈরি করতে (সেগুলি পরীক্ষা করে না দেখে এবং এর ফলে আপনার কার্যকরী ডিরেক্টরিগুলির বিষয়বস্তু পরিবর্তন না করে) , আপনি এটির মতো এটি করতে পারেন:

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

এই উদাহরণে, branchoneআপনি তৈরি করছেন এমন একটি স্থানীয় শাখার নাম origin/branchone; আপনি যদি পরিবর্তে বিভিন্ন নামের সাথে স্থানীয় শাখা তৈরি করতে চান তবে আপনি এটি করতে পারেন:

git branch localbranchname origin/branchone

একবার আপনি একটি স্থানীয় শাখা তৈরি করার পরে আপনি এটি দেখতে পাবেন git branch(মনে রাখবেন, আপনাকে -aস্থানীয় শাখা দেখার দরকার নেই )।


যদি origin/branchoneউপস্থিত থাকে তবে আপনি কেবল git checkout branchoneএকই নামের সাথে একটি স্থানীয় শাখা তৈরি করতে এবং এটি দূরবর্তী ট্র্যাক করতে সেট করতে পারেন।
ইভান

47

এটি খুব জটিল নয়, খুব সহজ এবং সোজা এগিয়ে ধাপগুলি নীচে রয়েছে;

git fetch origin এটি আপনার স্থানীয় সমস্ত দূরবর্তী শাখা নিয়ে আসবে।

git branch -a এটি আপনাকে সমস্ত দূরবর্তী শাখা দেখিয়ে দেবে।

git checkout --track origin/<branch you want to checkout>

আপনি নিম্নলিখিত কমান্ড দ্বারা পছন্দসই শাখায় আছেন কিনা তা যাচাই করুন;

git branch

আউটপুট এটি পছন্দ করবে;

*your current branch 
some branch2
some branch3 

* চিহ্নটি লক্ষ্য করুন যা বর্তমান শাখাকে বোঝায়।


1
ধন্যবাদ সুরজ। কারণ এটির বেশি ভোট হয়নি। এবং উত্তরগুলি প্রশ্নকর্তা গ্রহণ করেন না।
স্যাম

"গিট ফ্যাচ উত্স" আমার স্থানীয় কোনও দূরবর্তী শাখা আনেনি - বা সেগুলি কোথাও লুকিয়ে আছে? উপরের সমস্ত উত্তর পড়ে আমার মাথা ব্যথা হয়েছে। আমরা "গিট স্থানীয়ভাবে সমস্ত শাখা আনতে" খুঁজছি। এটি করার জন্য বাশ-স্ক্রিপ্টগুলি বাদ দিয়ে অবশ্যই একটি উপায় থাকতে হবে।
জোসেফকে

1
আপনি "গিট সংগ্রহের উত্স" চালনার ঠিক পরে, এটি আপনার টার্মিনালে এই জাতীয় আউটপুট প্রদর্শন করবে - "* [নতুন শাখা] শাখা_নাম -> উত্স / শাখা_নাম", তবে আপনি যখন "গিট শাখা" চালাবেন এটি আপনাকে কেবল আপনার স্থানীয় দেখায় পরিবর্তে শাখাগুলি, যাতে আপনি সমস্ত শাখা দেখতে "গিট শাখা -a" করতে পারেন এবং তারপরে দূরবর্তী শাখায় স্যুইচ করতে আপনার "গিট চেকআউট - ট্র্যাক উত্স / <শাখা আপনি চেকআউট করতে চান" চালাতে হবে " আশাকরি এটা সাহায্য করবে. :-)
স্যাম

4
সুরজ, কারণ প্রশ্নটি ছিল, কীভাবে "সমস্ত দূরবর্তী শাখাগুলি ক্লোন করুন" - কীভাবে একবারে ম্যানুয়ালি আপডেট করা যায় তা নয়। এটি প্রকৃত প্রশ্নের কোনও উত্তর নেই বলে মনে হয় - আপনার যদি অনেকগুলি শাখা থাকে তবে পুরো টাইপিংয়ের উপায়।
জোসেফকে

47

আগের চেয়ে ভাল দেরি না করা তবে এটি করার সর্বোত্তম উপায় এখানে:

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

এই মুহুর্তে আপনার কাছে এর সমস্ত শাখা সহ রিমোট রেপোর একটি সম্পূর্ণ অনুলিপি রয়েছে (এর সাথে যাচাই করুন git branch)। আপনার রিমোট রেপোর নিজস্ব রিমোটগুলি থাকলে আপনি তার --mirrorপরিবর্তে ব্যবহার করতে পারেন --bare


এখানে সম্পাদনার সময় কিছু ভুল হয়েছে। এখন এই উত্তরটি বোঝায় না। --bareশেষ বাক্যে উল্লিখিত " " প্রদত্ত কমান্ড তালিকায় উপস্থিত নেই।
সেররান

নীচে ডেভ এর উত্তর থেকে গ্রহণ। 'গিট কনফিগারেশন -বুল কোর.বেয়ার মিথ্যা' ব্যবহার না করে 'গিট কনফিগারেশন আনসেট কোর.বারে' এর পরিবর্তে কাজটি মনে হচ্ছে।
বিভ্রান্ত ভোরলন

আমি error: key does not contain a section: unsetডেভ এর উত্তর ভালোভাবে কাজ করে।
অলিবরে

এটি git config --unset core.bareআসলে ... আমার কাছে, এটি এখানে উত্তরের মধ্যে উপস্থাপিত সকলের সবচেয়ে পরিষ্কার সমাধান বলে মনে হচ্ছে। দুঃখের বিষয় এটির কয়েকটি সংখ্যক উন্নতি হয়েছে ...
ডার্ক হিলব্র্যাচট

1
ধন্যবাদ @ ক্রিসিসিম আমি এর জন্য সম্মত git config --bool core.bare false। এজন্য আমি ডেভের উত্তরটির পরিবর্তে প্রস্তাব দিই । ডেভের উত্তর সম্পর্কে আপনি কী ভাবেন ? চিয়ার্স
অলিব্রে

39

শুধু এটি করুন:

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

আপনি দেখতে পাচ্ছেন, 'গিট ক্লোন গিট: //example.com / মাইক্রোজেট' সবকিছু এনেছে, এমনকি শাখাগুলিও, আপনাকে কেবল তাদের চেকআউট করতে হবে, তারপরে আপনার স্থানীয় শাখা তৈরি হবে।


25

সমস্ত শাখা পেতে আপনাকে কেবল "গিট ক্লোন" ব্যবহার করতে হবে।

git clone <your_http_url>

আপনি কেবলমাত্র মাস্টার শাখা দেখলেও, সমস্ত শাখা দেখতে আপনি "গিট শাখা -a" ব্যবহার করতে পারেন।

git branch -a

এবং আপনি যে কোনও শাখায় ইতিমধ্যে থাকা স্যুইচ করতে পারেন।

git checkout <your_branch_name>

চিন্তা করবেন না যে আপনি "গিট ক্লোন" করার পরে, আপনাকে রিমোট রেপোর সাথে সংযুক্ত করার দরকার নেই, আপনি যখন আপনার ওয়াইফাইটি বন্ধ করেন তখন "গিট শাখা -a" এবং "গিট চেকআউট" সফলভাবে চালানো যেতে পারে। সুতরাং এটি প্রমাণিত হয় যে আপনি যখন "গিট ক্লোন" করেন, এটি ইতিমধ্যে দূরবর্তী রেপো থেকে সমস্ত শাখা অনুলিপি করেছে। এর পরে, আপনার রিমোট রেপোর দরকার নেই, আপনার লোকালটিতে ইতিমধ্যে সমস্ত শাখার কোড রয়েছে।


এখানে খুব স্পষ্ট প্রতিক্রিয়া। এই বিষয়টি সম্পর্কে অনেক লোক বিভ্রান্ত।
এক্সএমএএন

আমি আপনার বিবৃতিটি দ্বিতীয় স্থানে রাখতে চাই "যখন আপনি আপনার ওয়াইফাইটি বন্ধ করবেন তখন সফলভাবে চালানো যেতে পারে"। "গিট ক্লোন" সত্যই সমস্ত শাখাগুলি সহ একটি রেপোর ফলাফল দেয়।
bvgheluwe

একটি দুর্দান্ত স্পষ্ট উত্তর।
আমর

24

git cloneপুরো সংগ্রহশালাটি অনুলিপি করার কথা। এটি ক্লোনিং করার চেষ্টা করুন, এবং তারপরে চালান git branch -a। এটি সমস্ত শাখা তালিকাভুক্ত করা উচিত। যদি আপনি "মাস্টার" এর পরিবর্তে "foo" শাখায় স্যুইচ করতে চান তবে ব্যবহার করুন git checkout foo


1
আপনি হাইফেনের সাথে বা ছাড়া গিট কমান্ডগুলি চালাতে পারেন। "গিট-ব্রাঞ্চ" এবং "গিট শাখা" উভয়ই কাজ করবে।
পিটার বুটন

21
সম্ভবত এই উত্তরটি অনেক দিন আগে দেওয়া হয়েছিল যখন গিটটি ভিন্নভাবে কাজ করেছিল তবে আমি মনে করি এটি আজ বিভ্রান্তিকর। git cloneসমস্ত দূরবর্তী শাখাগুলি ডাউনলোড করে তবে এটি কেবলমাত্র স্থানীয় একটি শাখা তৈরি করে। যেহেতু git branchকেবল স্থানীয় শাখা দেখায় তাই আপনাকে git branch -aদূরবর্তী শাখাও দেখতে হবে।
সেররান

ধন্যবাদ. এটি এক ধরণের অদ্ভুত ডিফল্ট আচরণ আইএমও। আমি এটি আরও ক্রিপ্টিক সাক্ষী পর্যন্ত খড়ি করব। যদি এটি শাখাগুলি ডাউনলোড হয় তবে গিট শাখা কল করার সময় এটি কেন এগুলি লুকিয়ে রাখবে?
অ্যাডাম হিউজ

1
@ কেরান, ধন্যবাদ; আমি আমার উত্তর অনুসারে আপডেট করেছি।
ম্যাটক্সব্যাকম্যান

"সমস্ত দূরবর্তী শাখাগুলি ডাউনলোড করে তবে এটি কেবলমাত্র স্থানীয় একটি শাখা তৈরি করে"। এটি বুঝতে আমার সহায়তা দরকার। মনে হচ্ছে গিট ক্লোনটি মাস্টার ব্যতীত অন্য কোনও শাখার ক্লোন করে না, যেমন আপনি "গিট শাখা -a" করবেন তখন এটি দেখায় যে "বিকাশ" শাখা কেবল "রিমোট / উত্স / বিকাশ" এ রয়েছে। এটি অবশ্যই বলছেন যে আপনার স্থানীয়ভাবে কোথাও এই শাখা নেই it
জন লিটল

19

আমার সরঞ্জাম git_remote_branch ব্যবহার করুন (আপনার মেশিনে রুবি ইনস্টল করা দরকার)। এটি বিশেষত রিমোট শাখার ম্যানিপুলেশনকে মরা সহজ করার জন্য নির্মিত।

প্রতিবার এটি আপনার পক্ষ থেকে কোনও অপারেশন করে, কনসোলে এটি লাল রঙে মুদ্রণ করে। সময়ের সাথে সাথে তারা শেষ পর্যন্ত আপনার মস্তিষ্কে আটকে থাকে :-)

আপনি যদি নিজের পক্ষ থেকে কমান্ড চালানোর জন্য grb না চান তবে কেবল 'ব্যাখ্যা করুন' বৈশিষ্ট্যটি ব্যবহার করুন। কমান্ডগুলি আপনার জন্য মৃত্যুদন্ড কার্যকর করার পরিবর্তে আপনার কনসোলে মুদ্রিত হবে।

পরিশেষে, মুখস্তকরণকে আরও সহজ করার জন্য সমস্ত কমান্ডের উপাধি রয়েছে।

মনে রাখবেন এটি আলফা সফটওয়্যার ;-)

আপনি যখন grb সহায়তা চালান তখন এখানে সহায়তা:

গিট_রেমোট_ব্রাঞ্চ সংস্করণ ০.২.

  ব্যবহার:

  গ্রাবি শাখা_নাম তৈরি করুন [উত্সাহ_সার্ভার] 

  গ্রাবি প্রকাশিত শাখা_নাম [মূল_সার্ভার] 

  গ্রাবের নাম পরিবর্তন করে শাখা_নাম [মূল_সার্ভার] 

  grb শাখার নামটি [উত্সাহিত_সার্ভার] মুছুন 

  জিআরবি ট্র্যাক শাখা_নাম [মূল_সার্ভার] 



  মন্তব্য:
  - অরিজিন_সার্ভার নির্দিষ্ট না করা থাকলে, নাম 'উত্স' ধরে নেওয়া হবে 
    (গিটের ডিফল্ট)
  - নামকরণ কার্যকারিতা বর্তমান শাখার নাম পরিবর্তন করে

  মেটা-কমান্ডটি ব্যাখ্যা করুন: আপনি যে কোনও কমান্ডটি পূর্বেও যুক্ত করতে পারেন 
কীওয়ার্ড 'ব্যাখ্যা'। কমান্ডটি কার্যকর করার পরিবর্তে, গিট_মোট_ব্রঞ্চ
কমান্ডগুলির তালিকাটি সম্পাদন করার জন্য আপনাকে চালাতে হবে কেবলমাত্র আউটপুট 
যে লক্ষ্য।

  উদাহরণ: 
    গ্রাব ব্যাখ্যা করুন
    grb আমার_ব্রাঞ্চ গিথুব ব্যাখ্যা করুন

  সমস্ত কমান্ডেরও উপাধি রয়েছে:
  create: create, new
  মুছুন: মোছা, ধ্বংস, হত্যা, অপসারণ, আরএম
  প্রকাশ করুন: প্রকাশ, অপসারণ
  পুনঃনামকরণ: পুনঃনামকরণ, আরএন, এমভি, সরানো
  ট্র্যাক: ট্র্যাক, অনুসরণ, দখল, আনা

6
বুদ্ধিমানদের উদ্দেশ্যে শব্দ: দেখে মনে হচ্ছে এই উত্তরটি পোস্ট হওয়ার সময়েই এই প্রকল্পটি বাতিল ছিল was ২০০৮-এর পরে আমি কোনও আপডেট খুঁজে পাচ্ছি না C যদি আমি ভুল হয়ে থাকি তবে আমি আশা করি যে কেউ সম্পাদনা করবে এবং একটি বর্তমান পয়েন্টার সরবরাহ করবে, কারণ আমি এই হাতের মতো একটি সরঞ্জাম পেতে চাই।
bradheintz

: @bradheintz এই উত্তরটি পরীক্ষা, এটি একটি Git ওরফে সেট আপ stackoverflow.com/a/16563327/151841
user151841

19

আমি এখানে যে সমস্ত উত্তর দেখেছি সেগুলি বৈধ তবে এখানে একটি সংগ্রহস্থল ক্লোন করার এবং সমস্ত শাখা একবারে টানানোর জন্য আরও অনেক পরিষ্কার উপায় রয়েছে।

আপনি যখন কোনও সংগ্রহশালা ক্লোন করেন তখন শাখাগুলির সমস্ত তথ্য আসলে ডাউনলোড হয় তবে শাখাগুলি গোপন থাকে hidden কমান্ড দিয়ে

$ git branch -a

আপনি সংগ্রহস্থলের সমস্ত শাখা এবং কমান্ডের সাহায্যে প্রদর্শন করতে পারেন

$ git checkout -b branchname origin/branchname

তারপরে আপনি একবারে এগুলিকে ম্যানুয়ালি "ডাউনলোড" করতে পারেন।


যাইহোক, যখন আপনি প্রচুর শাখাগুলির সাথে একটি রেপো ক্লোন করতে চান তখন উপরে বর্ণিত সমস্ত উপায় দীর্ঘ এবং ক্লান্তিকর যেটি আমি প্রদর্শন করতে চলেছি তার তুলনায় দীর্ঘ এবং ক্লান্তিকর, যদিও এটি কিছুটা জটিল। এটি সম্পাদন করার জন্য আপনার তিনটি পদক্ষেপ দরকার:

  1. প্রথম ধাপ

আপনার মেশিনে একটি নতুন ফাঁকা ফোল্ডার তৈরি করুন এবং সংগ্রহস্থল থেকে .git ফোল্ডারের একটি মিরর অনুলিপি ক্লোন করুন:

$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git

my_repo_folder ফোল্ডারের ভিতরে স্থানীয় সংগ্রহস্থলটি এখনও খালি আছে, এখন কেবল একটি লুকানো .git ফোল্ডার রয়েছে যা আপনি টার্মিনাল থেকে একটি "ls -alt" কমান্ড দিয়ে দেখতে পাচ্ছেন।

  1. দ্বিতীয় ধাপ

গিট কনফিগারেশনের বুলিয়ান মান "নগ্ন" মিথ্যাতে স্যুইচ করে একটি খালি (খালি) সংগ্রহশালা থেকে এই সংগ্রহস্থলটি একটি নিয়মিত সংগ্রহস্থলে স্যুইচ করুন:

$ git config --bool core.bare false
  1. তৃতীয় পদক্ষেপ

বর্তমান ফোল্ডারের ভিতরে থাকা সমস্ত জিনিসকে দখল করুন এবং স্থানীয় মেশিনে সমস্ত শাখা তৈরি করুন, অতএব এটিকে একটি সাধারণ রেপো তৈরি করুন।

$ git reset --hard

সুতরাং এখন আপনি "গিট ব্রাঞ্চ" কমান্ডটি টাইপ করতে পারেন এবং আপনি দেখতে পাবেন যে সমস্ত শাখা ডাউনলোড করা আছে।

এটি সেই দ্রুত উপায় যার মাধ্যমে আপনি সমস্ত শাখাগুলির সাথে একবারে গিট সংগ্রহস্থলটি ক্লোন করতে পারেন তবে প্রতিটি প্রকল্পের জন্য আপনি এইভাবে কিছু করতে চান এমন কিছু নয়।


আপনার "ডাউনলোড" ইন ... "ডাউনলোড" শব্দটি একবারে একবারে ম্যানুয়ালি ব্যবহার করা আপনার পছন্দ হয় না । সমস্ত তথ্য প্রকৃতপক্ষে, রেপো ক্লোন করার পরে ইতিমধ্যে ডাউনলোড করা হয়েছে। কেবলমাত্র একমাত্র স্থানীয় ট্র্যাকিং শাখা তৈরি করা (যা অফলাইনে থাকা অবস্থায়ও সম্ভব, যা প্রমাণ করে যে সমস্ত তথ্য রেপোতে রয়েছে)।
bvgheluwe

@bvgheluwe এই কারণেই এটি উদ্ধৃতিতে রয়েছে।
ফেডেরিকো

15

স্থানীয় রেপো থেকে ক্লোনিং গিট ক্লোন এবং গিট আনার সাথে কাজ করবে না: প্রচুর শাখা / ট্যাগ খালি থাকবে।

সমস্ত শাখা এবং ট্যাগ সহ একটি ক্লোন পেতে।

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

সমস্ত শাখা এবং ট্যাগের সাথে একটি ওয়ার্কিং অনুলিপি সহ একটি ক্লোন পেতে:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master

13

ঠিক আছে, আপনি যখন আপনার রেপো ক্লোন করেন তখন আপনার সমস্ত শাখা থাকে ...

আপনি যদি কেবল এটি করেন git branchতবে এগুলি এক ধরণের গোপন ...

সুতরাং আপনি যদি সমস্ত শাখার নাম দেখতে চান তবে কেবল --allএই জাতীয় পতাকা যুক্ত করুন :

git branch --all অথবা git branch -a

আপনি যদি কেবল শাখায় চেকআউট করেন তবে আপনার প্রয়োজনীয় সমস্ত জিনিস আপনি পাবেন।

তবে কীভাবে যদি আপনি ক্লোন করার পরে অন্য কারও দ্বারা নির্মিত শাখাটি?

এই ক্ষেত্রে, কেবল করুন:

git fetch

এবং সমস্ত শাখা আবার পরীক্ষা করুন ...

আপনি যদি একই সময়ে আনা এবং চেকআউট করতে চান তবে আপনি এটি করতে পারেন:

git fetch && git checkout your_branch_name

আমি যা বলেছিলাম তা সহজ করার জন্য নীচের চিত্রটিও তৈরি করেছে:

গিট শাখা - সমস্ত শাখা পেতে


3
"আপনার এটি আছে" এবং "আপনি এটি দেখতে পান" এর মধ্যে পার্থক্য রয়েছে। গিট শাখা-সমস্ত আপনি রিমোট রিপোজিটরি সরিয়ে ফেললে দূরবর্তী শাখাগুলির আর কোনও তালিকা দেবে না।
গুস্তাভে

12

প্রশ্নের উত্তরগুলির দিকে তাকিয়ে আমি লক্ষ্য করেছি যে এটি সংক্ষিপ্ত করা সম্ভব:

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

তবে সাবধান, দূরবর্তী শাখাগুলির মধ্যে একটি যদি উদাহরণস্বরূপ অ্যাডমিন_মাস্টার হিসাবে নামকরণ করা হয় তবে এটি ডাউনলোড হবে না!

মূল ধারণা জন্য বিগফিশ ধন্যবাদ


grepমিথ্যা ধনাত্মকতা এড়াতে আপনি ফিল্টারটি উন্নত করতে আপনি রেজেক্সটিকে উন্নত করতে পারেন বা এর পরিবর্তে অ্যাওক ব্যবহার করতে পারেন ।
ট্রিপলি

সমস্ত শাখা 'উত্স \ আমার_ ব্র্যাঞ্চ_নাম', যা অবশ্যই আমি চাই তা নয়।
Sнаđошƒаӽ

আমি এর আগে # {শাখা ## * / the কনস্ট্রাক্টটি দেখিনি - সত্যিই দরকারী দেখাচ্ছে - এমন কোনও ধারণা যেখানে আমি এর থেকে আরও জানতে পারি? কোথাও ব্যাশের অধীনে খুঁজে পাওয়া যাচ্ছে না। ধন্যবাদ.
সামিনওজ


10

কমান্ড লাইনে কপি-পেস্ট করার জন্য:

git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

আরও পাঠযোগ্যতার জন্য:

git checkout master ;
remote=origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master


এটা হবে:

  1. মাস্টার পরীক্ষা করে দেখুন (যাতে আমরা যে শাখাটি চালু করছি তা মুছে ফেলতে পারি)
  2. চেকআউট করতে রিমোট নির্বাচন করুন (আপনার কাছে যা দূরবর্তী রয়েছে তা এটি পরিবর্তন করুন)
  3. মাস্টার এবং হেড বাদে দূরবর্তী সমস্ত শাখায় লুপ করুন
    1. স্থানীয় শাখা মুছুন (যাতে আমরা জোর করে আপডেট হওয়া শাখাগুলি পরীক্ষা করতে পারি)
    2. দূরবর্তী থেকে শাখা পরীক্ষা
  4. মাস্টার পরীক্ষা করুন (এর জন্য)

উপর ভিত্তি করে উত্তর এর VonC


10

আমি এই ছোট পাওয়ারশেল ফাংশনগুলি আমার সমস্ত গিট শাখাগুলি, যা মূল রিমোটে রয়েছে তা চেকআউট করতে সক্ষম হতে লিখেছি ।

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
}

আরও গিট ফাংশন আমার গিট সেটিংস রেপোতে পাওয়া যাবে


9

এখানে একটি উত্তর যা অজানা ব্যবহার করে। একটি নতুন রেপো ব্যবহার করা হলে এই পদ্ধতিটি যথেষ্ট ice

git branch -r | awk -F/ '{ system("git checkout " $NF) }'

বিদ্যমান শাখাগুলি কেবলমাত্র চেক আউট করা হবে, বা এর মধ্যে ইতিমধ্যে ঘোষণা করা হয়েছে, তবে বিরোধগুলি এড়াতে ফিল্টারগুলি যুক্ত করা যেতে পারে।

এটিও পরিবর্তন করা যেতে পারে তাই এটি একটি স্পষ্ট নির্দেশকে কল করে git checkout -b <branch> -t <remote>/<branch>

এই উত্তরটি নিকোস সি এর ধারণা অনুসরণ করে ।


বিকল্পভাবে আমরা এর পরিবর্তে দূরবর্তী শাখাটি নির্দিষ্ট করতে পারি। এই উপর ভিত্তি করে তৈরি murphytalk এর উত্তর

git branch -r | awk '{ system("git checkout -t " $NF) }'

এটি দ্বন্দ্বগুলিতে মারাত্মক ত্রুটি বার্তা নিক্ষেপ করে তবে আমি সেগুলি নিরীহ দেখতে পাচ্ছি।


উভয় কমান্ডের বিকল্প দেওয়া যেতে পারে।

ব্যবহার কেউ কিছু 'র উত্তর রেফারেন্স হিসেবে, আমরা alias লেখা তৈরি করার জন্য নিম্নোক্ত কমান্ড হতে পারে

git config --global alias.clone-branches '! git branch -r | awk -F/ "{ system(\"git checkout \" \$NF) }"'
git config --global alias.clone-branches '! git branch -r | awk "{ system(\"git checkout -t \" \$NF) }"'

ব্যক্তিগতভাবে আমি track-allবা ব্যবহার করব track-all-branches


শুধু আপনাকে ধন্যবাদ দিতে চেয়েছিলেন। এই পুরোপুরি কাজ এবং এটি ইত্যাদির পরিবর্তন যেমন কিছু টান আচরণ হিসাবে একটি খালি রেপো ক্লোনিং এর সাথে সম্পর্কিত বিভিন্ন সমস্যার ভোগা না
mahonya

8

আমার ঠিক একই কাজ করা দরকার ছিল। এই আমার রুবি লিপি।

#!/usr/bin/env ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /origin\//.match(line)
     remote[line.gsub(/origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]

এই স্ক্রিপ্টটি মোটেও চালাতে না পেরে আমি আরও নীচে পোস্ট করা উত্তর দেখুন।
lacostenycoder

8

এই উত্তরগুলির কোনওটিই এটি কাটেনি, ব্যবহারকারী ব্যতীত কেউ সঠিক পথে নেই।

একটি সার্ভার / সিস্টেম থেকে অন্য সার্ভারে রেপো সরানোতে আমার সমস্যা হয়েছিল। যখন আমি রেপো ক্লোন করেছিলাম তখন এটি কেবলমাত্র মাস্টারের জন্য একটি স্থানীয় শাখা তৈরি করেছিল তাই যখন আমি নতুন রিমোটে চাপলাম, কেবলমাত্র মাস্টার শাখাটি পুশ করা হয়েছিল।

সুতরাং আমি এই দুটি পদ্ধতি খুব দরকারী খুঁজে পেয়েছি। আশা করি তারা অন্য কাউকে সাহায্য করবে।

পদ্ধতি 1:

git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo

পদ্ধতি 2:

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo


7

গিট সাধারণত (যখন নির্দিষ্ট না থাকে) সমস্ত git ls-refsইতিহাস এবং / অথবা ট্যাগগুলি ইতিহাসের সম্পূর্ণ করার জন্য প্রয়োজনীয় অবজেক্টগুলির সাথে এক বা একাধিক অন্যান্য সংগ্রহস্থল থেকে আনে। অন্য কথায় এটি ইতিমধ্যে ডাউনলোড করা বস্তুগুলির দ্বারা অ্যাক্সেসযোগ্য এমন বস্তুগুলি নিয়ে আসে। দেখুন: কী git fetchসত্যিই কি?

কখনও কখনও আপনার শাখা / ট্যাগ থাকতে পারে যা সরাসরি বর্তমানের সাথে সংযুক্ত নয়, সুতরাং git pull --all/ git fetch --allসেই ক্ষেত্রে সহায়তা করবে না, তবে আপনি সেগুলি তালিকাভুক্ত করতে পারেন:

git ls-remote -h -t origin

এবং রেফের নামগুলি জেনে ম্যানুয়ালি এনে দিন।

সুতরাং তাদের সমস্ত আনতে চেষ্টা করুন:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

--depth=10000প্যারামিটার আপনি সংগ্রহস্থলের অভিগ্রস্ত থাকেন সাহায্য করতে পারে।

তারপরে আপনার সমস্ত শাখা আবার পরীক্ষা করুন:

git branch -avv

উপরেরটি যদি সহায়তা না করে তবে আপনাকে ট্র্যাকড তালিকায় ম্যানুয়ালি অনুপস্থিত শাখা যুক্ত করতে হবে (যেহেতু তারা কোনওরকম হারিয়ে গেছে):

$ git remote -v show origin
...
  Remote branches:
    master      tracked

git remote set-branchesমত দ্বারা :

git remote set-branches --add origin missing_branch

সুতরাং এটি remotes/originআনার পরে প্রদর্শিত হতে পারে :

$ git remote -v show origin
...
  Remote branches:
    missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> origin/missing_branch

সমস্যা সমাধান

আপনি এখনও যদি মাস্টার শাখা ব্যতীত অন্য কিছু না পান তবে নিম্নলিখিতগুলি দেখুন:

  • আপনার রিমোটগুলি ( git remote -v) যেমন দুবার পরীক্ষা করুন
    • যাচাই যে git config branch.master.remoteহয় origin
    • এর originমাধ্যমে সঠিক ইউআরএলে পয়েন্ট রয়েছে কিনা তা পরীক্ষা করুন: git remote show origin(এই পোস্টটি দেখুন )।

7

2017 এর প্রথমদিকে, এই মন্তব্যের উত্তরটি কাজ করে:

git fetch <origin-name> <branch-name>আপনার জন্য শাখা নামিয়ে আনে। যদিও এটি একবারে সমস্ত শাখা টানছে না, আপনি এককভাবে এই প্রতি-শাখাকে সম্পাদন করতে পারেন।


এর জন্য আপনাকে একবারে প্রতিটি শাখা আনতে হবে। আপনার অনেক শাখা থাকলে খুব ভাল হয় না।
lacostenycoder

6

এখানে আরও একটি শর্ট ওয়ান-লাইনার কমান্ড রয়েছে যা সমস্ত দূরবর্তী শাখার জন্য স্থানীয় শাখা তৈরি করে:

(git branch -r | sed -n '/->/!s#^  origin/##p' && echo master) | xargs -L1 git checkout

স্থানীয় শাখাগুলি ইতিমধ্যে তৈরি করা থাকলে এটি সঠিকভাবে কাজ করে। আপনি প্রথম git cloneবা যেকোন সময় পরে এটি কল করতে পারেন ।

masterক্লোনিংয়ের পরে যদি আপনার শাখাটি পরীক্ষা করার প্রয়োজন না হয় তবে ব্যবহার করুন use

git branch -r | sed -n '/->/!s#^  origin/##p'| xargs -L1 git checkout
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.