অন্য কারও রেপো থেকে কীভাবে দূরবর্তী শাখা টানবেন


265

আমি গিটহাবের হোস্ট করা একটি প্রকল্প পেয়েছি যা কেউ কল্পনা করেছে। তাদের কাঁটাতে, তারা একটি নতুন শাখা "ফু" তৈরি করেছে এবং কিছু পরিবর্তন করেছে। আমি কীভাবে তাদের রেগুলিতে "ফু" নামে একটি নতুন শাখায় তাদের "ফু" টানবো?

আমি বুঝতে পারি তারা আমার কাছে একটি টান অনুরোধ জমা দিতে পারে তবে আমি নিজেই এই প্রক্রিয়াটি শুরু করতে চাই।

নিম্নলিখিতটি ধরে নিন:

  1. যেহেতু তারা আমার প্রকল্পটিকে নকল করেছে, আমাদের দু'জনেই একই ইতিহাস ভাগ করে দেয়
  2. যদিও গিটহাব দেখায় যে তাদের প্রকল্পটি খনি থেকে তৈরি হয়েছিল, তবে আমার স্থানীয় সংগ্রহস্থলে এই ব্যক্তির প্রকল্পের কোনও উল্লেখ নেই। আমার কি তাদের দূরবর্তী হিসাবে যুক্ত করার দরকার আছে?
  3. আমার কাছে এখনও "ফু" নামে একটি শাখা নেই - আমি জানিনা যে এটিকে প্রথমে নিজেই তৈরি করতে হবে কিনা।
  4. আমি অবশ্যই এটিকে একটি আলাদা শাখায় টানতে চাই, আমার মাস্টারকে নয়।

উত্তর:


349
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

এটি fooদূরবর্তী শাখাকে ট্র্যাক করে একটি স্থানীয় শাখা সেটআপ করবে coworker/foo। সুতরাং যখন আপনার সহকর্মী কিছু পরিবর্তন করেছেন, আপনি সেগুলি সহজেই টানতে পারেন:

git checkout foo
git pull

মন্তব্যে প্রতিক্রিয়া:

শীতল :) এবং আমি যদি সেই শাখায় নিজের পরিবর্তন করতে চাই, তবে আমি কি "ফো" থেকে একটি দ্বিতীয় স্থানীয় শাখা "বার" তৈরি করব এবং আমার "ফু" এর পরিবর্তে সেখানে কাজ করব?

আমি এটি প্রস্তাব দিলেও আপনার একটি নতুন শাখা তৈরি করার দরকার নেই। আপনি সম্ভবত সরাসরি প্রতিশ্রুতিবদ্ধ হতে পারেন fooএবং আপনার সহকর্মীকে আপনার শাখাটি টানতে পারেন। তবে সেই শাখাটি ইতিমধ্যে বিদ্যমান আছে এবং আপনার শাখাটিকে fooএটিতে একটি প্রবাহ শাখা হিসাবে সেটআপ করা দরকার:

git branch --set-upstream foo colin/foo

ধরে নেওয়া colinহ'ল আপনার সংগ্রহস্থল (আপনার সহকর্মীদের ভান্ডারের একটি দূরবর্তী) একইভাবে সংজ্ঞায়িত করা হয়েছে:

git remote add colin git://path/to/colins/repo.git

3
এটি খুব দ্রুত ছিল :) আপনি যুক্ত করতে চাইতে পারেন যে git://সেটির জায়গায় অন্য ব্যক্তির গিটহাব সংগ্রহস্থল পৃষ্ঠা থেকে URL টি ব্যবহার করা উচিত //path/to/coworkers/repo.git। (এটি ছিল যা আমার উত্তরটি খুব ধীর করে দিয়েছিল;))
মার্ক লংগায়ার

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

বা সরাসরি আমার "ফু" তে কাজ করা এবং তার পরিবর্তনগুলি পরে টান / একীভূত করা নিরাপদ? এখানে সেরা অনুশীলন কোনটি?
কলিন ওডেল 4'11

1
নিখুঁত, আমি ঠিক তাই খুঁজছিলাম :) আপনার সহায়তার জন্য ধন্যবাদ !!
কলিন ওডেল

1
3 মিনিটে দুর্দান্ত উত্তর!
টাইম

103

না, এগুলি আপনাকে রিমোট হিসাবে যুক্ত করার দরকার নেই। এটি দুরূহ এবং প্রতিবার করতে ব্যথা হবে।

তাদের প্রতিশ্রুতি দখল:

git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch

এটি নামের একটি স্থানীয় শাখা তৈরি করে ournameforbranchযা theirbranchতাদের জন্য যা ছিল ঠিক তার মতো । প্রশ্ন উদাহরণের জন্য, শেষ যুক্তি হবে foo:foo

:ournameforbranchআপনার নিজের একটি শাখার সাথে দ্বন্দ্ব নেই এমন নাম ভাবা যদি বিরক্তিকর হয় তবে নোট অংশটি আরও ছেড়ে দেওয়া যেতে পারে। সেক্ষেত্রে, একটি রেফারেন্স FETCH_HEADপাওয়া যায়। আপনি git log FETCH_HEADতাদের কমিটগুলি দেখতে পারেন তারপরে cherry-pickedচেরি করা তাদের কাজগুলি বাছাই করার মতো কাজগুলি করতে পারেন ।

এটি তাদের কাছে ফিরিয়ে দেওয়া:

প্রায়শই, আপনি তাদের কিছু ঠিক করতে এবং এটি ঠিক পিছনে ঠেলাতে চান । এটিও সম্ভব:

git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git@github.com:theirusername/reponame.git HEAD:theirbranch

বিচ্ছিন্ন অবস্থায় কাজ করা যদি আপনাকে চিন্তিত করে তবে সর্বদা একটি শাখা তৈরি করুন :ournameforbranchএবং এর সাথে প্রতিস্থাপন করুন FETCH_HEADএবং HEADউপরে করুন ournameforbranch


2
এর জন্য আপনাকে ধন্যবাদ, অন্য উত্তরটি কার্যকর হয় না যদি আপনি এবং অন্য ব্যক্তি দু'জন একইভাবে শাখাগুলির নাম রেখেছিলেন (ডিফল্ট masterশাখার মতো)
কাজ

2
এটি উল্লেখ করার মতো যে আপনার গিথুব অ্যাকাউন্টের সাথে এসএসএইচ কী সম্পর্কিত কোনও জিনিস না থাকলে এই পদ্ধতিটি কাজ করবে না, স্ট্যাকওভারফ্লো // প্রশ্নগুলি
প্রেজেক ডি

আপনাকে কি তাদের সহযোগী হিসাবে যুক্ত করতে হবে না যাতে আপনি তাদের রেপোতে চাপ দিতে পারেন?
মধু

@ মধু অবশ্যই! ঠেলাঠেলি ধরে নেয় ধাক্কা দেওয়ার জন্য আপনার কাছে দূরবর্তী প্রান্তে প্রয়োজনীয় অনুমতি রয়েছে। অনুরূপভাবে আনার ফলে ধরে নেওয়া যায় যে এই পথটি অ্যাক্সেসযোগ্য।
আনতক

আপনি যদি git branch -m newbranchএই বিচ্ছিন্ন অবস্থায় থাকুন তবে গিটটি তার মন হারিয়ে ফেলবে এবং বলতে হবে যে আপনার রেপো আর বৈধ নয়। git init"নিউব্র্যাঞ্চ" নামে একটি শাখার সাহায্যে এটি ঠিক করা হয়েছে এবং আপনি আগে যে অবস্থাতে ছিলেন তার কমবেশি আপনাকে ফিরিয়ে দেবে বলে মনে হচ্ছে।
ইয়ান হিকসন

14

যদি এন্টকের উত্তর:

git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

আপনি দেয়:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

তারপরে (প্রজেমেক ডি এর পরামর্শ অনুসরণ করে) ব্যবহার করুন

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>

6

নিম্নলিখিতটি একটি দুর্দান্ত সমীক্ষক সমাধান যা অন্য ব্যবহারকারীর কাঁটাচামচ থেকে পিআর শাখা পরীক্ষা করার জন্য গিটহাবের সাথে কাজ করে। আপনাকে পুল অনুরোধের আইডিটি জানতে হবে (যা গিটিহাব পিআর শিরোনামের সাথে প্রদর্শন করে)।

উদাহরণ:

আপনার সুরক্ষিত কোড # 8
এলিস ঠিক করা 1 টি your_repo:masterথেকে কমিটকে মার্জ করতে চায়her_repo:branch

git checkout -b <branch>
git pull origin pull/8/head

এর থেকে আলাদা হলে আপনার রিমোটটি প্রতিস্থাপন করুন origin। সঠিক টান অনুরোধ আইডি সহ
বিকল্প করুন 8


2
এটি আরও বেশি প্রয়োজন। pe3rfectly কাজ করে এবং "মারাত্মক: রিমোট রেফ খুঁজে পাওয়া যায়নি" ত্রুটিটি আমি শীর্ষে-ভোট দেওয়া উত্তরের সাথে পেয়ে যাচ্ছি। ধন্যবাদ!
মাইকেল রোমরেল

সহজ কোড 2 লাইন। এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ! এর চেয়ে মধুর একমাত্র জিনিসটি সহজেই ফ্যাশনে তাদের পুল অনুরোধে আপডেটগুলি মার্জ করে।
ক্লিভিস

4

পূর্ববর্তী উত্তরগুলির সাথে সম্পর্কিত গিটহাবের একটি নতুন বিকল্প রয়েছে, কেবল PR থেকে কমান্ড লাইনগুলি অনুলিপি / অনুলিপি করুন:

  1. জনসংযোগ নীচের দিকে স্ক্রোল করুন দেখতে Mergeবা Squash and mergeবোতাম
  2. ডানদিকে লিঙ্কটি ক্লিক করুন: view command line instructions
  3. পদক্ষেপ 1 এর ডানদিকে কপি আইকন টিপুন
  4. আপনার টার্মিনালে কমান্ডগুলি আটকান

2

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

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

এখন আপনার কাছে ফু এর স্থানীয় একটি অনুলিপি রয়েছে যার সাথে এটির কোনও প্রবাহ নেই। আপনি এটিতে পরিবর্তন করতে (বা না) করতে পারেন এবং তারপরে আপনার foo কে আপনার নিজের দূরবর্তী রেপোতে চাপতে পারেন।

git push --set-upstream origin foo

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

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