সমস্ত শাখা টানতে এবং ধাক্কা দিতে গিট সেট আপ করুন


615

আমি সদ্য তৈরি হওয়া শাখাগুলি সহ ডিফল্টরূপে সমস্ত শাখা টিপতে এবং টানতে চাই।

এমন কোনও সেটিংস আছে যা আমি এর জন্য সংজ্ঞা দিতে পারি?

অন্যথায়, আমি যখন স্থানীয়ভাবে একটি নতুন শাখা যুক্ত করি এবং আমি এটি সার্ভার থেকে টানতে চাই, এটি করার সহজ উপায়টি কী?

আমি একই নামে একটি নতুন শাখা তৈরি করেছি এবং টানতে চেষ্টা করেছি তবে এটি কার্যকর হয় না। শাখার সমস্ত দূরবর্তী কনফিগারেশনের জন্য আমাকে জিজ্ঞাসা করুন। আমি কীভাবে সেট করব।


4
"এবং টানতে চেষ্টা করে কিন্তু কাজ করে না"। বিস্তারিত দয়া করে। আপনি কোন আদেশটি ব্যবহার করার চেষ্টা করেছিলেন তা আমাদের প্রদর্শন করুন।
জাকুব নারেবস্কি

উত্তর:


1297

সহজ উপায়টি হ'ল:

git push --all origin

এটি ট্যাগ এবং শাখাগুলিকে ধাক্কা দেবে।


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

174
এবং যদি আপনি -uএকবার যোগ করেন , যেমন git push --all origin -u, ট্র্যাকিং সেটআপ হয় এবং এর পরে আপনি কেবল ব্যবহার করতে পারেন git push
অ্যালেক

23
গিট সংস্করণে 1.7.12.3 এর জন্য আমাকে git push --tags originসমস্ত ট্যাগ ঠেকাতে ব্যবহার করতে হয়েছিল।
thisgeek

17
এই ধরণের আরও স্টাফ "
লোডা

21
সতর্কতা: আপনার কাছে এমন একসাথে লোকাল শাখা রয়েছে যা আপনি পরিষ্কার করেছেন না (বৈশিষ্ট্যগুলি, হটফিক্সগুলির) - বা সঠিকভাবে পরিষ্কার করা হয়নি (আমাকে), এটি আপনার দূরবর্তীকে প্লাবিত করবে। অভিশাপ। এবং আমরা কেবল ছাঁটাই করেছি। আমার স্থানীয় কেন এত বেশি শাখা রেখেছিল তা নিশ্চিত নয়।
জ্যাক 21: 15

147

আধুনিক গিটের সাহায্যে আপনি সর্বদা সমস্ত শাখা আনুন (রিমোট-ট্র্যাকিং শাখাগুলি refs/remotes/origin/*নেমস্পেসে, এর সাথে দৃশ্যমান git branch -rবা git remote show origin)।

ডিফল্টরূপে ( push.defaultকনফিগার ভেরিয়েবলের ডকুমেন্টেশন দেখুন ) আপনি মিলে যাওয়া শাখাগুলি পুশ করেন , যার অর্থ প্রথমে git push origin branchগিটটি সর্বদা চালিয়ে যাওয়ার জন্য আপনাকে করতে হবে git push

আপনি যদি সর্বদা সমস্ত শাখাকে ধাক্কা দিতে চান তবে আপনি পুশ রেসপেস্ক সেটআপ করতে পারেন। ধরে নিচ্ছি যে রিমোটটির নাম দেওয়া হয়েছে originআপনি হয় গিট কনফিগারেশন ব্যবহার করতে পারেন :

$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'

বা .git/configনিম্নলিখিতগুলির মতো কিছু পেতে সরাসরি ফাইল সম্পাদনা করুন:

[দূরবর্তী "উত্স"]
        url = user@example.com: /srv/git/repo.git
        আনুন = + রেফ / হেড / *: রেফার্স / রিমোটস / উত্স / *
        ফেচ = + রেফ / ট্যাগ / *: রেফ / ট্যাগ / *
        ধাক্কা = + রেফার্স / মাথা / *: রেফার্স / হেডস / *
        পুশ = + রেফার্স / ট্যাগ / *: রেফ / ট্যাগ / *

3
@ ম্যাকার: git push --all originসমস্ত শাখা এবং ট্যাগ প্রকাশের জন্য একসময় ভাল, যদিও বর্তমান সংস্করণ 'ম্যাচিং' শব্দার্থবিরোধী হওয়া পর্যন্ত ডিফল্ট হয়ে যাওয়ার অর্থ এই যে আপনি পরে সমস্ত শাখা ঠেলাবেন ... যদি আপনি নতুন শাখা বা ট্যাগ না যুক্ত করেন। সেটিং থেকে "পুশ [...] ডিফল্ট ভাবে সব শাখা" লেখা আছে হিসাবে।
জাকুব নারেবস্কি

আপনি এইভাবে গিটকে পুনরায় কনফিগার করার উপায় যুক্ত করতে উত্তরকে উন্নত করতে পারেন। এটি সাধারণ মোড সেট করার ব্যবহারকারীদের জন্য দরকারী।
ডেরিকসন

3
এটি গিট ২.০ থেকে পরিবর্তন হয়েছে। পুশ ডিফল্ট সহজ, আর কোনও মিলছে না।
মাইক 13

আমি এটি চেষ্টা করেছিলাম এবং ধাক্কা দেওয়ার ক্ষেত্রে একটি ত্রুটি পেয়েছি: fatal: Invalid refspec ''+refs/heads/*:refs/heads/*'' (দ্রষ্টব্য: আমি গিট ২.০ এ আছি this আমি এখনও এটি কীভাবে সমাধান করব সে বিষয়ে কাজ করছি))
ব্রায়ান ল্যাসি

2
এখন ডিফল্ট মান জন্য push.defaultহয় simple
hasanghaforian

32

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

এটি চেষ্টা করুন:

$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'

--globalআপনার সমস্ত সংগ্রহস্থলের জন্য এটি বৈশ্বিক ডিফল্ট তৈরি করতে আপনি এগুলির প্রতিটিটিতে বিকল্প যুক্ত করতে পারেন ।
ইথার

এটি দুর্ভাগ্যজনক যে + টি করা অবস্থায় গিটের মাধ্যমে স্বয়ংক্রিয়ভাবে যুক্ত হয় git remote add
ইথার

25

আমি নতুন শাখাগুলিতে সমস্ত শাখা স্থানান্তর করতে নীচের কমান্ডগুলি ব্যবহার করেছি।

~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror

দ্রষ্টব্য : আটলাসিয়ান স্ট্যাশ থেকে এডাব্লুএস কোডকমিতে (ফাঁকা রেপো) রেপো ক্লোন করার সময় আমাকে দ্বিতীয় সর্বশেষ (অর্থাত্ প্রথমে মাষ্টার মাস্টার) কমান্ডটি ব্যবহার করতে হয়েছিল । আমি কারণটি সম্পর্কে নিশ্চিত নই, তবে চাপ দেওয়ার পরে ( git push new-origin --mirror) ডিফল্ট শাখাটি এর চেয়ে অন্য কোনও শাখায় উল্লেখ করছিল master


1
অন্য হোস্টে রেপো সরানোর জন্য উপযুক্ত। ধন্যবাদ!
পিলমার্ড

2
এটি প্রকৃতপক্ষে শুধুমাত্র দরকারী পদ্ধতি। ব্যবহার করুন git push new_origin --allমাত্র, না উৎপত্তি সকল শাখায় new_origin আপনার বর্তমান স্থানীয় শাখা ধাক্কা।
yanzi1225627

কেবল উল্লেখ করে যে এটি একটি --bareসংগ্রহস্থল তৈরি করে, যা নিয়মিত সংগ্রহস্থল থেকে কিছুটা আলাদা, এতে কেবল .gitআপনার ফাইলগুলিই থাকে না। আপনি যদি এটিতে কাজ না করে থাকেন তবে এটি পুরোপুরি যথেষ্ট। দেখুন --bareএবং --mirror git-scm.com/docs/git-clone
jmmut

যদিও এর কেবলমাত্র .git ফাইল রয়েছে এবং আসল উত্স কোডটি নয়, আপনি যদি কোনও রিমোট আপডেট সম্পাদন করেন তবে এটি উত্স থেকে গন্তব্যে সমস্ত কিছু ফিরিয়ে আনবে।
সান্থোশম

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

12

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

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

তারপরে আপনার নতুন রিমোট রেপো যুক্ত করুন:

git remote add bb <path-to-new-repo>

তারপরে আপনি এই কমান্ডটি ব্যবহার করে সকলকে চাপ দিতে পারেন:

git push -u bb --all

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

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


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

2
এটি আমার পক্ষে কাজ করেনি। সমস্ত স্থানীয় প্রত্যন্ত শাখাগুলি একই স্থানীয় শাখার ট্র্যাকিংয়ের সাথে শেষ হয়েছে: /
jhowowter

2
আফজেক @ ঝাসাউটারের মন্তব্য অনুসারে এটি কাজ করা উচিত নয়। নতুন ক্লোন করা রেপোতে আমার একটি রিমোট শাখা ট্র্যাক করার জন্য সঠিক কমান্ডটি git branch --track reponame origin/reponameঅন্যথায় আপনি বর্তমান স্থানীয় শাখায় ট্র্যাক করা সমস্ত রিমোট শাখা পাবেন
পাইওনিয়ার স্কাইজ

আমি রেপো-সংগ্রহকারী স্নিপেটকে এতে পরিবর্তন করেছি git branch -r | grep -v '\->' | sed 's/ origin\///', যা কেবল দূরবর্তী শাখার নাম দেয়।
পল হিকস 20'18

6

আউট ব্যবহার করে সমস্ত শাখা দেখতে git branch -aআপনার কার্যকর করা উচিত:

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

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

git branch

সমস্ত শাখা ঠেকানোর চেষ্টা করুন:

git push --all

1
it গিট আনতে হবে
উত্সই

আপনি চেষ্টা করছেন git fetch --all?
তোখি

4

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

for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done

এই পৃষ্ঠার অন্যান্য উত্তরের সংস্করণগুলির উপর ভিত্তি করে এই ওয়ান লাইন কমান্ডটি তৈরি করা হয়েছে তবে তর্কযোগ্যভাবে এটি আরও ভাল কারণ:

  1. এটি সঠিকভাবে শাখা ট্র্যাকিং সেটআপ করে, এই পৃষ্ঠায় এই কমান্ডের কিছু পুরানো রূপগুলির বিপরীতে যা কেবলমাত্র --track এর জন্য একটি প্যারামিটার সরবরাহ করে এবং সুতরাং প্রতিটি শাখা ট্র্যাকিংয়ের মাস্টার শেষ করে - ভাল নয়
  2. আমি ব্যক্তিগতভাবে চাই না এমন উপদ্বীপটি "উত্স /" ছাড়াই স্থানীয় শাখাগুলির নাম রাখে - এবং আপনি যখন কোন শাখাটি স্বাভাবিকভাবে চেকআউট করেন তখন যা ঘটে তার সাথে সামঞ্জস্য থাকে।
  3. ইতিমধ্যে ঘটছে যেহেতু ট্র্যাকিং মাস্টার এড়িয়ে যায়
  4. আসলে চেকআউট কিছুই দ্রুত হয় না
  5. গিট শাখা -আর এর আউটপুটে -> এর উপর হোঁচট খাওয়া এড়ানো যায়

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

git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git

এবার ধাক্কা। মনে রাখবেন ট্যাগগুলিকে ধাক্কা দেওয়ার জন্য দ্বিতীয় কমান্ডেরও প্রয়োজন:

git push -u --all origin
git push --tags origin

0

originকনফিগারেশনে হার্ডকোডিং ছাড়াই সমাধান

আপনার গ্লোবাল গিটকনফাইগে নিম্নলিখিতটি ব্যবহার করুন

[remote]
    push = +refs/heads/*
    push = +refs/tags/*

এটি সমস্ত শাখা এবং সমস্ত ট্যাগ পুশ করে

কেন আপনার originকনফিগারেশনে হার্ডকোড করা উচিত নয় ?

আপনি যদি হার্ডকোড করেন:

  1. আপনি originসমস্ত দোকানে একটি রিমোট হিসাবে শেষ করব । সুতরাং আপনি উত্স যোগ করতে সক্ষম হবেন না, তবে আপনাকে ব্যবহার করা দরকার set-url
  2. কোনও সরঞ্জাম যদি আলাদা নামের সাথে একটি রিমোট তৈরি করে তবে সমস্ত কনফিগার প্রয়োগ করা হবে না। তারপরে আপনাকে রিমোটটির নতুন নামকরণ করতে হবে, তবে পুনরায় নামকরণ কাজ করবে না কারণ originইতিমধ্যে বিদ্যমান (পয়েন্ট 1 থেকে) মনে রাখবেন :)

আনয়ন ইতিমধ্যে আধুনিক গিট দ্বারা যত্ন নেওয়া হয়

জাকুব নরবস্কির উত্তর অনুসারে:

আধুনিক গিটের সাহায্যে আপনি সবসময় সমস্ত শাখা আনুন (রিমোট / রিমোটস / উত্স / * নেমস্পেসে রিমোট ট্র্যাকিং শাখা হিসাবে)

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