কীভাবে সমস্ত গিট শাখা আনতে হয়


1506

আমি একটি গিট সংগ্রহস্থল ক্লোন করেছি, যার প্রায় পাঁচটি শাখা রয়েছে। যাইহোক, আমি যখন করি তখন আমি git branchকেবল তাদের মধ্যে একটি দেখতে পাই:

$ git branch
* master

আমি জানি যে আমি সমস্ত শাখা git branch -aদেখতে পারি , তবে আমি কীভাবে সমস্ত শাখা স্থানীয়ভাবে টানবো যখন আমি এটি করি , এটি নীচেরটি দেখায়?git branch

$ git branch
* master
* staging
* etc...

1
এছাড়াও এ বিষয়ে আলোচনা stackoverflow.com/questions/67699/...
gliptak

2
এই প্রশ্নের দেখায় কিভাবে ব্যবহার করে পরে সব শাখা পেতে --single-branchসেটিং যখন ক্লোনিং: stackoverflow.com/questions/17714159/... ( git fetch --allআপনি যদি শুধুমাত্র একটি শাখা নিদিষ্ট হবে না কাজ যদি করে থাকেন!)
ম্যাথু Wilcoxson

2
আপনি কখনই সেই আউটপুট দেখতে পাবেন না কারণ নক্ষত্রটি বর্তমানে যে শাখাকে চেকআউট করছে তা উপস্থাপন করে। যেহেতু আপনি একবারে কেবল একটি শাখা পরীক্ষা করে দেখতে পারেন তাই আপনার শাখার তালিকার বামে কেবল একটি নক্ষত্র থাকতে পারে।
রবিনো

5
আমি প্রচুর উত্তর দেখেছি কিন্তু তাদের মধ্যে কেউই আমার কাছে git clone --bare <repo url> .git যা বলেছে তা করার সম্ভবত সম্ভবত সবচেয়ে সহজ উপায় বলে উল্লেখ করেছেন: "বেয়ার" রেপো), তারপরে git config --bool core.bare false("বেয়ার" পতাকাটিকে মিথ্যাতে সেট করে), তারপরে git reset --hard(রেপোতে হেডকে বর্তমান হেডে স্থানান্তরিত করে)। এখন যদি git branchআপনার ক্লোন করা রেপোর সমস্ত শাখা দেখতে পাওয়া যায়।
গ্যাব্রিয়েল ফেরাজ

4
@ গ্যাব্রিয়েলফেরাজ তারপর আপনি স্ট্যাক ওভারফ্লোতে মন্তব্য কার্যকারিতা গালাগাল করছেন। ব্যবহারকারীরা আপনার মন্তব্যকে উজ্জীবিত করতে পারে তবে ডাউনটোট নয়।
পাইপ

উত্তর:


2049

আপনি এর মতো সমস্ত রিমোট থেকে সমস্ত শাখা আনতে পারেন:

git fetch --all

এটি মূলত একটি শক্তি পদক্ষেপ

fetchআপডেট দূরবর্তী শাখা স্থানীয় অনুলিপি তাই এই সবসময় আপনার স্থানীয় শাখা জন্য নিরাপদ কিন্তু :

  1. fetchস্থানীয় শাখাগুলি আপডেট করবে না (যা প্রত্যন্ত শাখাগুলি ট্র্যাক করে ); আপনি যদি নিজের স্থানীয় শাখাগুলি আপডেট করতে চান তবে আপনাকে প্রতিটি শাখা টানতে হবে।

  2. fetchস্থানীয় শাখা তৈরি করবে না (যা প্রত্যন্ত শাখাগুলি ট্র্যাক করে ), আপনাকে এটি ম্যানুয়ালি করতে হবে। আপনি যদি সমস্ত প্রত্যন্ত শাখা তালিকাভুক্ত করতে চান: git branch -a

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

git pull --all

তবে এটি এখনও অপর্যাপ্ত হতে পারে। এটি কেবলমাত্র আপনার স্থানীয় শাখাগুলির জন্য কাজ করবে যা প্রত্যন্ত শাখাগুলি ট্র্যাক করে। সমস্ত দূরবর্তী শাখাগুলি ট্র্যাক করতে আগে এই অননীলকে কার্যকর করুন git pull --all:

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

টিএল; ডিআর সংস্করণ

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

(এটি দেখে মনে হচ্ছে যে টানা সমস্ত দুরত্ব থেকে সমস্ত শাখাগুলি এনেছে, তবে আমি নিশ্চিত হওয়ার জন্য সর্বদা প্রথম আছি।)

সার্ভারে দূরবর্তী শাখাগুলি রয়েছে যা আপনার স্থানীয় শাখাগুলি দ্বারা অনুসরণ করা হয় না কেবল তখনই প্রথম কমান্ডটি চালান।

পিএস আফাইক git fetch --allএবং git remote updateসমতুল্য।



কামিল জাজোটের মন্তব্য , যা লোকেরা দরকারী বলে মনে করেছে।

আমাকে ব্যবহার করতে হয়েছিল:

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

কারণ আপনার কোডটি স্থানীয় শাখাগুলির নাম তৈরি করেছে origin/branchnameএবং আমি যখনই উল্লেখ করেছি তখন "পুনর্নামকরণ 'উত্স / শাখা নাম ' অস্পষ্ট।


41
দুঃখিত। আমি ভাবতে পারি না যে ওপি আসলে এটি চায়। 'টানুন' কমান্ডটি হ'ল "আনুন + একত্রিত করুন" এবং মার্জ অংশটি একে অপরের উপরে সমস্ত শাখা ওভারলে করে দেবে - এতে একটি বিশাল জগাখিচুড়ি ছেড়ে যায়।
GoZoner

10
এই git checkout -b localname remotename/remotebranch
সংগ্রহটি

125
আমাকে ব্যবহার করতে হয়েছিল for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done কারণ আপনার কোডটি স্থানীয় / শাখার নাম হিসাবে স্থানীয় শাখা তৈরি করেছিল এবং যখনই আমি উল্লেখ করেছি "পুনর্নবীকরণ 'উত্স / শাখা নাম' অস্পষ্ট।
কামিল জাজোট

22
আমি জানি না আমি জিআইটির ভিন্ন সংস্করণ ব্যবহার করছি কিনা তবে আমাকে স্ক্রিপ্টটি সংশোধন করতে হয়েছিল git pull --all; for remote in `git branch -r | grep -v \>`; do git branch --track ${remote#origin/} $remote; done। পরিবর্তনটি প্রধানকে ছাড়ায়।
kim3er

16
উইন্ডোজ লোকেদের জন্য:for /F %remote in ('git branch -r') do ( git branch --track %remote) && git fetch --all && git pull --all
সর্বোচ্চ

717

দূরবর্তী শাখা তালিকাবদ্ধ করতে:
git branch -r

আপনি স্থানীয় শাখা হিসাবে এগুলি পরীক্ষা করে দেখতে পারেন:
git checkout -b LocalName origin/remotebranchname


88
আমি উপরের প্রশ্নটি পেয়েছিলাম ঠিক তখনই আমি এটির সন্ধান করছিলাম। আমি সন্দেহ করি যে অনেক লোক কীভাবে একটি দূরবর্তী শাখা টানাবেন তা সন্ধান করে স্পষ্টভাবে তাদের বর্তমান কার্যকরী কপির সাথে শাখাটি মার্জ করতে চান না, তবে তারা দূরবর্তী শাখার মতো একটি স্থানীয় শাখা চায়।
ফ্রিগ

11
এমনকি স্থানীয়ভাবে শাখাটি দৃশ্যমান না হলেও, আমি এটি করতে পারি git checkout remotebranchnameএবং এটি কাজ করে। আপনার সমাধানের সাথে পার্থক্য কী?
ফ্রান্সোইস রোমেন

12
এটির ডিফল্ট আচরণ এখন। পুরানো গিট সংস্করণ ক্ষেত্রে ছিল না। রিমোটব্র্যাঙ্কনেম নামকরণ করা হয়েছে git checkout remotebranchnameএমন একটি নতুন সম্পর্কিত নয় এমন শাখা তৈরি করতে ব্যবহার করে ।
লিরাথ 2

12
গৃহীত উত্তর মৌলিক কিছু পৃথক করে এবং প্রকৃতপক্ষে বলতে গেলে আমি কেন তার গৃহীত উত্তরটি বুঝতে পারছি না
লেরাথ 2

8
ওপি সব শাখা চেয়েছে। এই উত্তরটি কেবল একটি করে।
টেড বিগহাম

193

দূরবর্তী শাখাগুলি ট্র্যাক করে আপনার স্থানীয় শাখা তৈরি করতে হবে।

ধরে নিই যে আপনার কাছে কেবলমাত্র একটি রিমোট কল রয়েছে origin, এই স্নিপেট সমস্ত দূরবর্তী ট্র্যাকিংয়ের জন্য স্থানীয় শাখা তৈরি করবে:

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

এর পরে, git fetch --allদূরবর্তী শাখাগুলির সমস্ত স্থানীয় অনুলিপি আপডেট করবে।

এছাড়াও, git pull --allআপনার স্থানীয় ট্র্যাকিং শাখাগুলি আপডেট করবে, তবে আপনার স্থানীয় প্রতিশ্রুতিগুলির উপর এবং 'মার্জ' কনফিগার বিকল্পটি কীভাবে সেট করা হয়েছে তার উপর নির্ভর করে এটি একটি মার্জ কমিট তৈরি করতে পারে, দ্রুত-সামনের বা ব্যর্থ।


5
এটি শেল মেটাচার্যাক্টরযুক্ত শাখার নামগুলির বিপরীতে সমাধানটির সমাধান করে (অন্য উত্তরটির বিষয়ে পিনকিনের মন্তব্য অনুসারে), এবং উদ্দীপনাজনিত ত্রুটি আউটপুট এড়িয়ে চলে: গিট শাখা -আর | grep -v - '->' | রিমোট পড়ার সময়; কি গিট শাখা - ট্র্যাক "$ {দূরবর্তী # উত্স /}" "$ দূরবর্তী" 2> & 1 | grep -v 'ইতিমধ্যে বিদ্যমান'; সম্পন্ন
দাইরা হপউড

6
আপনি কি নিশ্চিত যে এটি git pull --allস্থানীয় স্থানীয় ট্র্যাকিং শাখাগুলি আপডেট করবে? যতদূর আমি এটি বলতে পারি সমস্ত রিমোটগুলি থেকে কেবল বর্তমান শাখাকে আপডেট করে।
অ্যান্ডি

3
এটা করেছে. দূরবর্তী শাখাগুলির সাথে মেলে স্থানীয় শাখা তৈরি করা হয়নি। গিট কমান্ডটি কী বলে যা সহজেই বলে "সমস্ত দূরবর্তী শাখাগুলি যদি সেগুলি বিদ্যমান না থাকে তবে তাদের টানুন?"
জোসেফকে

@ জোসেফকে সম্ভবত আপনার রিমোট বলা হয় না origin? এই উত্তরটি দেখুন যা সমস্ত প্রত্যন্ত নামে কাজ করবে।
টম হেল

@ টমহেল এটি "উত্স", তবে আপনার উত্তরের জন্য ধন্যবাদ - যদিও ক্রেজি যে একটি বা সম্ভবত দুটি পতাকা হওয়া উচিত তা করার জন্য অনেক কিছুই প্রয়োজন। আমি এখন গিটলেস চেষ্টা করছি, গিটারের কিছু দিকের উন্মাদনা এড়াতে চেষ্টা করব।
জোসেফকে

116

যদি তুমি করো:

git fetch origin

তারপরে তারা স্থানীয়ভাবে সেখানে থাকবে। আপনি যদি তারপর সঞ্চালন:

git branch -a

আপনি এগুলি প্রত্যন্ত / উত্স / শাখা-নাম হিসাবে তালিকাভুক্ত দেখতে পাবেন। স্থানীয়ভাবে তারা সেখানে থাকার কারণে আপনি তাদের সাথে যা খুশি তাই করতে পারেন। উদাহরণ স্বরূপ:

git diff origin/branch-name 

অথবা

git merge origin/branch-name

অথবা

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

5
গুগলে এই পৃষ্ঠাটি সবেমাত্র পাওয়া গেছে ... এটি ছিল আসল ধরণের উত্তর যা আমি চাইছিলাম। আমি প্রথম কমান্ডটি চেষ্টা করেছিলাম তবে একটি ত্রুটি পেয়েছি: [it গিট ফেচ - সমস্ত উত্সই মারাত্মক: আনতে হবে - সমস্ত সংগ্রহস্থল যুক্তি গ্রহণ করে না] --- "গিট ফেচ - সমস্ত" ব্যবহার করা কৌশলটি মনে করে। সীসা জন্য ধন্যবাদ!
লংড্ডা

1
স্থির (নির্মূল --all)
GoZoner

12
git fetch -allসমস্ত রিমোটগুলির সমস্ত শাখা নিয়ে আসে। git fetch originরিমোটের সমস্ত শাখা নিয়ে আসে origin। পরে ওপি কী জিজ্ঞাসা করছিল।
GoZoner

3
--allএর অর্থ "সমস্ত দূরবর্তী", "প্রদত্ত প্রত্যন্তের সমস্ত শাখা" নয়। পরেরটি কোনও রিমোট থেকে যে কোনও আনয়ন দ্বারা বোঝানো হয়।
স্পেসডিভার

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

69
$ git remote update
$ git pull --all

এটি ধরে নিয়েছে যে সমস্ত শাখাকে ট্র্যাক করা হয়েছে।

যদি তারা না হয় তবে আপনি এটি বাশকে গুলি চালাতে পারেন:

for remote in `git branch -r `; do git branch --track $remote; done

তারপরে কমান্ডটি চালান।


3
যখন আমি চেষ্টা করি যে আমি এখনও উপরের মতো একই ফলাফল পেয়েছি।
ডেভিড542

4
@ জ্যাকবলাউ হিসাবে একই, আমি ত্রুটি পেয়েছি, তবে এটি যেভাবেই কাজ করেছে; 'মারাত্মক:' উত্স / মাস্টার 'নামে একটি শাখা ইতিমধ্যে বিদ্যমান' '
অ্যান দি অ্যাজিল

এটি কুৎসিত কারণ এটি একটি শাখা তৈরির চেষ্টা করবে ->যার জন্য সম্ভবত git branch -r`উত্স / হেড -> উত্স / মাস্টার the হিসাবে উপস্থিত থাকবে
টম হেল

তদুপরি, এটি কাজ করে না। আমি আউটপুট পাই: Branch 'origin/quote-filenames' set up to track local branch 'master'. কাঙ্ক্ষিত আউটপুটটি: Branch 'quote-filenames' set up to track remote branch 'quote-filenames' from 'origin'. এটি পিছনের দিকে , দূরবর্তীটিকে ট্র্যাক করতে উত্সটি সেট করে। ঠিক করার জন্য এই উত্তরটি দেখুন ।
টম হেল

ঠিক যেটা আমার দরকার ছিল. যেহেতু আমি ম্যাকস পরিবর্তন করেছি, আমি রেপো ক্লোন করার পরেও আমি অন্যান্য দূরবর্তী শাখাগুলি চেকআউট করতে সক্ষম হইনি এবং git fetchকাজ করব না would সুতরাং এখানে পাঠটি হ'ল আপনাকে দূরবর্তী শাখাগুলি ট্র্যাক করতে হবে। এবং Gracias!
ভিক্টর রামোস

58

বাশ forলুপটি আমার পক্ষে কাজ করছিল না, তবে এটি আমি যা চেয়েছিলাম ঠিক তা করেছে। আমার উত্স থেকে সমস্ত শাখা স্থানীয়ভাবে একই নাম হিসাবে মিরর করা।

git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'

দেখুন মাইক DuPont তার 's এর নিচে মন্তব্য নেই। আমি মনে করি আমি জেনকিন্স সার্ভারে এটি করার চেষ্টা করছিলাম যা এটিকে বিচ্ছিন্ন হেড মোডে ফেলে।


6
এটি fatal: Refusing to fetch into current branch refs/heads/master of non-bare repositoryএকটি সাধারণ ক্লোনার পরে উত্পাদন করে । প্রথমে মাথা বিচ্ছিন্ন করতে হবে। আমি এটি দিয়েছিলামgit checkout <SHA>
ব্র্যানারচিনিস

6
আমার সমাধান এটি ব্যবহার করে git checkout --detach # detach the headএবং তারপরেgit fetch origin \'+refs/heads/*:refs/heads/*
মাইক ডুপন্ট

1
এইটি আমার জন্য কাজ করেছে, আমি - ট্যাগগুলি প্যারামিটার ব্যবহার না করেই। আমার ইচ্ছা হ'ল গিটের জন্য কোনও স্ট্যান্ডার্ড, সহজ ফ্রন্ট এন্ড, গিটের সাধারণ জিনিসের সংখ্যা যা 10-প্লাস স্ট্যাক ওভারফ্লো উত্তরগুলির প্রয়োজন হাস্যকর!
ক্রিস্টিয়ানপ

1
@ ক্রিশ্চিয়ানপ আপনি কি ইউনিট বা গিটক্রেন চেক আউট করেছেন?
ড্রাগন 788

@ ড্রাগন 8৮৮ আমি গিট জিইআইয়ের জন্য সোর্স ট্রি ব্যবহার করছি, তবে আমি সত্যিই স্ক্রিপ্টিং কার্যগুলির জন্য একটি সহজ কমান্ড-লাইন সম্পর্কে কথা বলছিলাম।
ক্রিশ্চিয়ানপ

51

ব্যবহার git fetch && git checkout RemoteBranchName

এটা আমার জন্য খুব ভাল কাজ করে...


6
এটি নতুন সেরা উত্তর, আপনি সব। আমি জানি না যে এটি আগে সম্ভব ছিল না কিনা তবে গিটের সাম্প্রতিক সংস্করণগুলি লক্ষ্য করবে যে আপনি একটি দূরবর্তী শাখা চেকআউট করার চেষ্টা করছেন এবং স্বয়ংক্রিয়ভাবে আপনার জন্য স্থানীয় ট্র্যাকিং শাখা স্থাপন করবেন (এবং আপনার প্রয়োজন নেই নির্দিষ্ট করা origin/branch; এটি কেবল বলা যথেষ্ট branch)।
নিল ট্রাফ্ট

9
এটি মূল প্রশ্নের উত্তর দেয় না: "আমি কীভাবে স্থানীয়ভাবে সমস্ত শাখা টানবো?" এটি তাদের একের পর এক টানছে, যা স্কেলযোগ্য নয়।
ingyhere

এটিই ছিল একমাত্র উত্তর যা আমাকে প্রতিটি পরিস্থিতিতে দুর্গম শাখা টানতে দেয়
এমমানুয়েল বকশি

38

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

$ git branch -a

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

$ git checkout -b branchname origin/branchname

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


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

  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" কমান্ড দিয়ে দেখতে পাচ্ছেন।

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

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

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

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

    $ git reset --hard
    

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

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


1
লুকানো শাখাগুলির উল্লেখের জন্য উত্সাহিত আমাকে স্থানীয় শাখা ট্র্যাকিংয়ের প্রচুর পরিমাণে বুঝতে সহায়তা করেছে।
mburke05

এটি একটি ভাল উত্তর, কিন্তু প্রশ্নটি প্রতিদিন ব্যবহারের জন্য কিছু বোঝায়। প্রতিবার সংগ্রহশালার ক্লোন করা এটি ব্যবহারিক নয়।
জেড খুল্লা

কেন রিসেট স্থানীয়ভাবে সমস্ত শাখা তৈরি করে?
জেড খুল্লা

@ জেড.খুল্লাহ এটি রিসেট নয় যা সমস্ত শাখা তৈরি করে, তবে ক্লোন - এমিরর। দুর্ভাগ্যক্রমে আমাদের জন্য, এটি একটি খালি রেপোও তৈরি করে, যা 2 এবং 3 পদক্ষেপকে পরিবর্তন করে।
স্কটজে

29

আপনি এর দ্বারা সমস্ত শাখা আনতে পারেন:

git fetch --all

বা:

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

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


সমস্ত শাখা টানতে, ব্যবহার করুন:

git pull --all

যদি উপরের কাজ না করে তবে উপরের কমান্ডটি এর আগে দিন:

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

যেহেতু remote.origin.fetchআনার সময় কেবলমাত্র একটি নির্দিষ্ট শাখা সমর্থন করতে পারে, বিশেষত যখন আপনি আপনার রেপো ক্লোন করে দিয়েছিলেন --single-branch। এই চেক করুন: git config remote.origin.fetch

এর পরে আপনার যে কোনও শাখা চেকআউট করতে সক্ষম হওয়া উচিত।

আরো দেখুন:


রিমোটে সমস্ত শাখা চাপতে, ব্যবহার করুন:

git push --all

অবশেষে --mirrorসমস্ত রেফারেন্স আয়না।


যদি আপনার লক্ষ্য কোনও সংগ্রহের সদৃশ হয় তবে দেখুন: গিটহাবের একটি সংগ্রহস্থল নিবন্ধ নকল করা


1
দুর্দান্ত ... আমি এই পৃষ্ঠায় আপনার সমাধানের আগে অন্য সমস্ত কিছুর চেষ্টা করেছি। অনেক ধন্যবাদ!
সুজয়

2
আমি অগভীর ক্লোনিং ব্যবহার করেছি ( depth=1) এবং কনফিগারেশনের জন্য একটি নির্দিষ্ট শাখাও নির্দিষ্ট করা হয়েছিল fetch- depth=1000প্যারামিটারটি হ'ল ফিক্স যা আমাকে একটি নির্দিষ্ট দূরবর্তী শাখা চেক আউট করতে সহায়তা করেছিল
সান্দ্রা

2
pull --allসমস্ত শাখা
টানছে

কনফিগারেশনের সাথে দুর্দান্ত কৌশল! এগুলি সব সময় আনা হবে
জেড খোলা

আপনার লেখা হিসাবে আমি কনফিগারটি পরীক্ষা করেছিলাম, এখনও কেবল বর্তমান শাখায় কাজ করে। দেখে মনে হচ্ছে এখানে সমস্ত উত্তর আমার পক্ষে কাজ করে না ...
আলেক্সি মার্টিয়ানভ

25

আমি সাধারণত কমান্ড ব্যতীত অন্য কিছুই ব্যবহার করি না:

git fetch origin
git checkout --track origin/remote-branch

একটু সংক্ষিপ্ত সংস্করণ:

git fetch origin
git checkout -t origin/remote-branch

17

আমি বিশ্বাস করি আপনি এই সংগ্রহস্থলটিকে ক্লোন করেছেন:

git clone https://github.com/pathOfrepository

এখন সিডি ব্যবহার করে সেই ফোল্ডারে যান:

cd pathOfrepository

আপনি টাইপ করলে git statusআপনি সমস্ত দেখতে পাবেন:

   On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

সমস্ত লুকানো শাখার প্রকারগুলি দেখতে:

 git branch -a

এটি সমস্ত দূরবর্তী শাখা তালিকাভুক্ত করবে।

এখন আপনি যদি কোনও নির্দিষ্ট শাখায় চেকআউট করতে চান তবে কেবল টাইপ করুন:

git checkout -b localBranchName origin/RemteBranchName

16

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

git clone <ORIGINAL_ORIGIN>
git branch -r | awk -F'origin/' '!/HEAD|master/{print $2 " " $1"origin/"$2}' | xargs -L 1 git branch -f --track 
git fetch --all --prune --tags
git pull --all

git remote set-url origin <NEW_ORIGIN>
git pull
<resolve_any_merge_conflicts>
git push --all
git push --tags
<check_NEW_ORIGIN_to_ensure_it_matches_ORIGINAL_ORIGIN>

3
খুব উপকারী; ঠিক আমার যা দরকার ছিল আমাকে কেবল দ্বিতীয় লাইনে পরিবর্তন করতে হয়েছিল, 'হেড' এবং 'মাস্টার' এর আশেপাশে একক উদ্ধৃতি যুক্ত করা হয়েছে; সম্ভবত আমি zsh ব্যবহার করছি কারণ। ধন্যবাদ!
সকমনক

এটি মূলত নিম্নলিখিতগুলি করছে: (1) প্রত্যন্ত শাখার প্রকৃত নামগুলি [প্রধান নয়, কর্তা নয়]; (২) পুরোপুরি গিটকে তাদের ট্র্যাক করতে বলছে [সমস্ত সমাধান এটি করে না]; (৩) এই শাখাগুলি থেকে [ট্যাগ সহ] সমস্ত কিছুই আনা এবং টানানো; (৪) একটি নতুন উত্স নির্ধারণ করা এবং একেবারে সবকিছুকে ধাক্কা দিয়ে হাঁটা। আবার, অন্যান্য সমাধানগুলির বেশিরভাগই সমস্ত টুকরো স্থানান্তর করতে ব্যর্থ। এটি সব করে।
ingyhere

1
আমি চলমান গ্রেপ এর অ্যান্টিপ্যাটার্নটি সরিয়ে ফেললাম তারপর awk এবং গ্রেপ কমান্ডগুলিকে awk কমান্ডে কনডেন্স করেছি। থ্রিপলি ধন্যবাদ !
ingehere

এটি পড়ুন এবং কখনও git fetch git pull স্ট্যাকওভারফ্লো.com
সবুজ

Git pullপ্রকৃতপক্ষে একটি কাজ করে fetchপ্রথম কিন্তু এটা যদি সমস্যা থেকে বলতে সহজ fetchঅংশ pullবা পরবর্তী mergeঅংশ pullযখন fetchস্বাধীনভাবে মৃত্যুদন্ড কার্যকর করা হয়।
ingyhere

12

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

git fetch && git checkout <branchname>

1
সহজ। এবং দূরবর্তী উত্স থেকে একটি শাখা পেতে কাজ করেছেন
sirvon

3
এটি মূল প্রশ্নের উত্তর দেয় না: "আমি কীভাবে স্থানীয়ভাবে সমস্ত শাখা টানবো?" এটি তাদের একের পর এক টানছে, যা স্কেলযোগ্য নয়। 100 টি শাখার ক্ষেত্রে বিবেচনা করুন।
ingyhere

10

নিশ্চিত করুন যে সমস্ত দূরবর্তী শাখাগুলি .git/configফাইলে সংগ্রহযোগ্য ।

এই উদাহরণে, কেবল origin/productionশাখাটি সংগ্রহযোগ্য, আপনি কিছু git fetch --allনা করার চেষ্টা করলেও productionশাখাটি আনার কারণ হবে :

[origin]
fetch = +refs/heads/production:refs/remotes/origin/production

এই লাইনটি প্রতিস্থাপন করা উচিত:

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

তারপরে চালান git fetchইত্যাদি ...


3
পরিদর্শন করতে: git config --get remote.origin.fetchএবং তারপরে (ধ্বংসাত্মকভাবে) সেট করুন:git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
qneill

বা .git ডিরেক্টরিতে কনফিগার পাঠ্য ফাইলটি পরিবর্তন করুন, আমার জন্য কাজ করেছেন
এফডিআইএম

9

লুপিং আমার পক্ষে কাজ করে না বলে মনে হয়েছে এবং আমি উত্স / মাস্টারকে উপেক্ষা করতে চাইছিলাম। আমার জন্য কি কাজ করেছে তা এখানে।

git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track

তারপর:

git fetch --all
git pull --all

1
এর ভিন্নতা হ'ল সঠিক উত্তর, তবে এটি সমস্ত প্রান্তের ক্ষেত্রে কাজ করে না। এছাড়াও, শাখার নামগুলি মজার হতে পারে। তাই আমি নিম্নলিখিতগুলি করেছি: গিট শাখা-আর | গ্রেপ-ভি হেড | grep –v মাস্টার | awk -F'origin / '' {মুদ্রণ $ 2 "" $ 1 "উত্স /" $ 2} '| xargs -L 1 গিট শাখা -f - ট্র্যাক; গিট ফেচ - সমস্ত; গিট টান - সমস্ত; আর সেই ট্রিকটি কি!
ingyhere

3
grep | awk অ্যান্টিপ্যাটার্ন এড়ানোর জন্য একটি স্টাইলিস্টিক উন্নতি : git branch -r | awk -F 'origin/' '!/HEAD|master/{...
ট্রিপলি

7

এই তিনটি কমান্ড সমস্ত শাখা পাবেন:

git clone --mirror repo.git  .git     (gets just .git  - bare repository)

git config --bool core.bare false

git reset --hard

এটি আসলে ওপি-র সমস্যার মূল। যদি সঠিকভাবে ক্লোন করা থাকে তবে তার একটি করার দরকার পড়বে না pull --all। তবে যদি এখনও প্রয়োজন হয়, তবে @ জন্নো নোলার দ্বারা, উত্তরটি আরও উত্তর দেওয়া হবে যে, সমস্ত শাখা ট্র্যাক করা হয়েছে, এই উত্তরটির সাথে মিশ্রিত হবে, যাবার উপায়।
ডাঃ বেকো

7

কেন নুন ছেলেদের প্রশ্নের উত্তর দিচ্ছে এবং কী ঘটছে তা ব্যাখ্যা করছে?

  1. নিশ্চিত করুন যে আপনি প্রত্যন্ত শাখাগুলির সমস্ত ট্র্যাক করছেন (বা আপনি যেগুলি ট্র্যাক করতে চান)
  2. দূরবর্তী শাখা প্রতিবিম্বিত করতে আপনার স্থানীয় শাখা আপডেট করুন।

সমস্ত দূরবর্তী শাখা ট্র্যাক করুন:

দূরবর্তী রেপোতে বিদ্যমান সমস্ত শাখা ট্র্যাক করুন।

ম্যানুয়ালি এটি করুন:

আপনি <branch>আউটপুট থেকে প্রদর্শিত হয় যে একটি শাখা প্রতিস্থাপন করবে git branch -r

git branch -r
git branch --track <branch>

এটি একটি বাশ স্ক্রিপ্ট দিয়ে করুন

for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done

আপনার স্থানীয় কম্পিউটারে রিমোট শাখাগুলি সম্পর্কে তথ্য আপডেট করুন:

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

git fetch --all

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

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

git pull --all

4

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

আপনি এখানে সর্বশেষতম সংস্করণটি খুঁজে পেতে পারেন :

#!/bin/bash

# Clones as usual but creates local tracking branches for all remote branches.
# To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)

clone_output=$((git clone "$@" ) 2>&1)
retval=$?
echo $clone_output
if [[ $retval != 0 ]] ; then
    exit 1
fi
pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
this_branch=$(git branch | sed 's/^..//')
for i in $(git branch -r | grep -v HEAD); do
  branch=$(echo $i | perl -pe 's/^.*?\///')
  # this doesn't have to be done for each branch, but that's how I did it.
  remote=$(echo $i | sed 's/\/.*//')
  if [[ "$this_branch" != "$branch" ]]; then
      git branch -t $branch $remote/$branch
  fi
done
popd > /dev/null 2>&1

এটি ব্যবহার করতে, কেবল C:\Program Files (x86)\Git\bin\git-cloneallকমান্ড লাইনে এটি আপনার গিট বিন ডিরেক্টরিতে (আমার জন্য, এটি) অনুলিপি করুন:

git cloneall [standard-clone-options] <url>

এটি যথারীতি ক্লোন করে তবে সমস্ত দূরবর্তী শাখার জন্য স্থানীয় ট্র্যাকিং শাখা তৈরি করে।


4

কীভাবে সমস্ত গিট শাখাগুলি ট্র্যাকিং সিঙ্গল রিমোট পেতে।

এটি পরীক্ষা করা হয়েছে এবং উইন্ডোজ 10-এ রেড হ্যাট এবং গিট বাশ-এ কাজ করে।


TLDR:

for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;

ব্যাখ্যা:

এক লাইনার চেক আউট করে এবং তারপরে হেড ব্যতীত সমস্ত শাখা নিয়ে আসে।

রিমোট-ট্র্যাকিং শাখাগুলি তালিকাবদ্ধ করুন।

git branch -r

মাথা উপেক্ষা করুন।

grep -v ' -> '

প্রত্যন্ত (গুলি) এর শাখার নাম নিন।

cut -d"/" -f2

একটি শাখা দূরবর্তী ট্র্যাক করে সমস্ত শাখা চেকআউট করুন।

git checkout $branch

চেক আউট শাখার জন্য আনুন।

git fetch

প্রযুক্তিগতভাবে নতুন স্থানীয় শাখার জন্য আনার প্রয়োজন হয় না।

এটি হয় ব্যবহার করা যেতে পারে fetchবা pullশাখা উভয় নতুন এবং দূরবর্তী (গুলি) তে পরিবর্তন আছে।

কেবল নিশ্চিত হয়ে নিন যে আপনি একত্রীকরণের জন্য প্রস্তুত থাকলে আপনি কেবল টানবেন।


পরীক্ষা সেটআপ

এসএসএইচ ইউআরএল সহ একটি সংগ্রহস্থল দেখুন।

git clone git@repository.git

আগে

স্থানীয় শাখা পরীক্ষা করুন।

$ git branch
* master

কমান্ডগুলি কার্যকর করুন

ওয়ান লাইনার কার্যকর করুন।

for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;

পরে

স্থানীয় শাখাগুলিতে দূরবর্তী (গুলি) শাখা অন্তর্ভুক্ত রয়েছে তা পরীক্ষা করুন।

$ git branch
  cicd
  master
* preprod

4

উইন্ডোজ ব্যবহারকারীদের পাওয়ারশেল ব্যবহার করার জন্য:

git branch -r | ForEach-Object {
    # Skip default branch, this script assumes
    # you already checked-out that branch when cloned the repo
    if (-not ($_ -match " -> ")) {
        $localBranch = ($_ -replace "^.*?/", "")
        $remoteBranch = $_.Trim()
        git branch --track "$localBranch" "$remoteBranch"
    }
}
git fetch --all
git pull --all

এটি নামের সাথে / সাথে শাখাগুলি নিয়ে কাজ করে: git branch -r | ForEach-Object { # Skip default branch, this script assumes # you already checked-out that branch when cloned the repo if (-not ($_ -match " -> ")) { $localBranch = ($_ -replace "^.*?/", "") $remoteBranch = $_.Trim() git branch --track "$localBranch" "$remoteBranch" } }
মার্কাস

3

আমি দৃ something় বিবেচনা করব এমন কিছু এখানে:

  • বিদ্যমান শাখাগুলির জন্য দূরবর্তী ট্র্যাকিং আপডেট করে না
  • HEADট্র্যাক আপডেট করার চেষ্টা করবেন নাorigin/HEAD
  • বাদে অন্য নামযুক্ত রিমোটগুলি অনুমতি দেয় origin
  • সঠিকভাবে শেল উদ্ধৃত
for b in $(git branch -r --format='%(refname:short)'); do
  [[ "${b#*/}" = HEAD ]] && continue
  git show-ref -q --heads "${b#*/}" || git branch --track "${b#*/}" "$b";
done
git pull --all

এটা তোলে জরুরি নয় git fetch --allক্ষণস্থায়ী যেমন -allকরতে git pullপাস অভ্যন্তরীণ করার জন্য এই বিকল্পটি fetch

এই উত্তরের কৃতিত্ব ।


2

স্বীকৃত উত্তরে প্রদত্ত ওয়ান-লাইনারের পার্ল সংস্করণ এখানে রয়েছে:

git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file

আপনি চাইলে আউটপুট ফাইলটি শেল স্ক্রিপ্ট হিসাবে চালাতে পারেন।

আমরা দুর্ঘটনাক্রমে আমাদের স্ট্যাশ প্রকল্পের সংগ্রহস্থলটি মুছে ফেলেছি। ভাগ্যক্রমে দুর্ঘটনার ক্ষতির আগেই কেউ কাঁটাচামচ তৈরি করেছিল। আমি আমার লোকালটির কাছে কাঁটাচামড়া ক্লোন করেছি (আমি কীভাবে করেছি তার বিশদটি বাদ দেবে)। একবার আমার লোকালটিতে পুরোপুরি কাঁটাচামচ পরে, আমি ওয়ান-লাইনার চালিত। আমরা যে টার্গেটের সংগ্রহস্থলটি পুনরুদ্ধার করছি তার দিকে ইঙ্গিত করার জন্য আমি রিমোটের ইউআরএল (আমার ক্ষেত্রে মূল) সংশোধন করেছি:

git remote set-url origin <remote-url>

এবং অবশেষে সমস্ত শাখাকে এর মতো উত্সে ঠেলে দিয়েছে:

git push --all origin

এবং আমরা ব্যবসায় ফিরে এসেছি।


1

আমরা সমস্ত শাখা বা ট্যাগের নামগুলি একটি অস্থায়ী ফাইলে রাখতে পারি, তারপরে প্রতিটি নাম / ট্যাগের জন্য গিট টান করতে পারি:

git branch -r | grep origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
git tag -l >> /tmp/all.txt
for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull origin $tag_or_branch; done

1

আপনার যদি সমস্যা হয় fetch --allতবে আপনার দূরবর্তী শাখাটি ট্র্যাক করুন:

git checkout --track origin/%branchname%

1

'মারাত্মক: ত্রুটি বার্তাটি এড়ানোর জন্য' উত্স / মাস্টার 'নামে একটি শাখা ইতিমধ্যে বিদ্যমান', আপনার এটি দরকার:

git branch -r | grep -v '\->'  | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track "${remote#origin/}" "$remote"; done

0

লিরাথ 2-এর উত্তরের ভিত্তিতে তৈরি করা ডিরেক্টরিটি করার git clone [...]এবং করানোর পরে আমি যা করেছি তা এখানে cd:

git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b

আমার জন্য কাজ করেছেন তবে আমি জানি না এটি আপনার পক্ষে কাজ করবে। সাবধান হও.


0
git remote add origin https://yourBitbucketLink

git fetch origin

git checkout -b yourNewLocalBranchName origin/requiredRemoteBranch (use tab :D)

এখন স্থানীয়ভাবে আপনার yourNewLocalBranchNameহয় requiredRemoteBranch


0

ভিজ্যুয়াল স্টুডিও ব্যবহারকারীদের জন্য, প্যাকেজ ম্যানেজার কনসোলে:

গিট শাখা | % {গিট আপ স্ট্রিম এনেছে; গিট একত্রে প্রবাহিত / মাস্টার merge



0

উপন্যাস সেট করুন: (শীর্ষ উত্তরের উপর ভিত্তি করে)

git config --global alias.track-all-branches '!git fetch --all && for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done && git fetch --all'

এখন সমস্ত শাখা ট্র্যাক করতে:

git track-all-branches

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