অন্যান্য কাঁটাচামচ থেকে আমার কাঁটাচামচায় নিমজ্জন করা প্রবাহের পুলের অনুরোধগুলি কীভাবে প্রয়োগ করবেন?


464

গিটহাবের একটি প্রকল্পে আমার কাঁটাচামচ রয়েছে এমন একটি নতুন টান অনুরোধ রয়েছে যা আমি আমার কাঁটাতে টানতে চাই যা লেখক এখনও টানেনি।

আমার কাঁটাচামচে অন্য কাঁটাচামচ থেকে টানার অনুরোধ প্রয়োগ করার কি সহজ উপায় আছে? এখানে কি আর কিছু আছে যা আমি মিস করছি?


8
একটি নির্দেশ রয়েছে: gist.github.com/piscisaureus/3342247
মিগডাল

যদি আপনি এটি করতে গিট কমান্ড ব্যবহার করেন তবে এটি কি গিটহাবের নেটওয়ার্ক গ্রাফটিতে প্রতিফলিত হবে?
ADTC

সমস্ত শাখাগুলিও খুঁজে পাওয়া আকর্ষণীয় হতে পারে: স্ট্যাকওভারফ্লো.com
টিম অবেল

উত্তর:


276

আপনি নিজে এটি বেশ সহজেই করতে পারেন:

  • আপনার রেপোর রিমোট হিসাবে অন্য কাঁটাচামচ যুক্ত করুন:

    git remote add otherfork git://github.com/request-author/project.git
    
  • তার রেপো কমিটস আনতে

    git fetch otherfork
    
  • এরপরে আপনার কাছে টানা অনুরোধটি প্রয়োগ করার জন্য দুটি বিকল্প রয়েছে (যদি আপনি পিক 1 বেছে নিতে না চান)

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

      git rebase master otherfork/pullrequest-branch
      
    2. আপনি যদি কেবল টানার অনুরোধে কমিটগুলি চান তবে তাদের SHA1 সনাক্ত করুন এবং করুন

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      

166
প্রকৃতপক্ষে, আপনার চেরি-পিক ব্যবহার করা উচিত নয়, এটি নতুন কমিট তৈরি করে ... যা আপনি যদি প্রবাহের দিকে টানার অনুরোধটি প্রেরণ করেন তবে বিভ্রান্তি সৃষ্টি করবে। পরিবর্তে আপনি যেমন অনুরোধটি করতে বলছে ঠিক তেমনই মার্জ করা উচিত। আপনার কোনও একটি রিমোট যুক্ত করার দরকার নেই। git pull URL branchname
টেককুব

3
@ টেককুব: একমত হ'ল নতুন তৈরি কমিটিগুলির সাথে বিভ্রান্তি এড়ানো ভাল। মার্জ করা আমার মনে কম মার্জিত নয় যেহেতু আপনি যে শাখায় মার্জ হয়ে যাচ্ছেন সেগুলি থেকে আপনি অন্যান্য পরিবর্তন আনতে পারেন
চার্লসবি

8
হ্যাঁ, তবে এই ক্ষেত্রে তিনি স্পষ্টতই জিজ্ঞাসা করেছিলেন কীভাবে তার কাঁটাতে টানুন অনুরোধটি to টানুন == মার্জ করুন।
টেককুব

1
@ চার্লসবি, যেহেতু গিটহাব স্বয়ংক্রিয়ভাবে একই শাখায় একটি টান অনুরোধে নতুন কমিট যুক্ত করেছে, তাই কোনও "অন্যান্য পরিবর্তন" পাওয়া কি কঠিন হবে না (ধরে নেওয়া হয়েছে যে সর্বোত্তম অনুশীলনগুলি অনুসরণ করে এবং পরিবর্তনগুলি অব্যাহত বিকাশ থেকে পৃথক শাখায় রাখে তাই) যে সমস্ত কমিটগুলি প্রাসঙ্গিক), আপনি যখন টানতে চাওয়ার অনুরোধটির একমাত্র অংশ চান তখন আপনি যা পাচ্ছেন তা না হলে ?
neverfox

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

282

আপডেট: ওয়েবপৃষ্ঠা মাধ্যমে

আপনি গিথুব ওয়েবপৃষ্ঠার মাধ্যমেও এটি করতে পারেন।

আমি ধরে নিচ্ছি, আপনার কাছে ইতিমধ্যে MyForkসাধারণ রেপো ( BaseRepo) এর একটি কাঁটাচামচ ( OtherFork) থাকা উচিত যাতে আপনি আগ্রহী একটি কাঁটাচামচ ( ) থেকে পলিংয়ের অনুরোধ রয়েছে।

  1. কাঁটাচামচ ( OtherFork) থেকে নেভিগেট করুন যা আপনার অনুরোধটি শুরু করেছে যা আপনি নিজের কাঁটাতে যেতে চান ( MyFork)
  2. এর টান অনুরোধ পৃষ্ঠাতে যান OtherFork
  3. নতুন টান অনুরোধ ক্লিক করুন
  4. মুলতুবি টান অনুরোধ (গুলি) দেওয়া উচিত। যথাযথ OtherForkশাখা নির্বাচন করতে ভুলবেন না। বাম পাশে নির্বাচন করুন যেমন বেস আপনার কাঁটাচামচ (মাল MyFork) ( গুরুত্বপূর্ণ )।
  5. এখন বিকল্পটি View pull requestপরিবর্তন করা উচিত Create pull request। এটি ক্লিক করুন।

এখন আপনার কাঁটাচামচ ( MyFork) এ একটি মুলতুবি টান অনুরোধ থাকা উচিত , যা আপনি কেবল গ্রহণ করতে পারেন।


6
সুন্দর কাজ করে। সেন্টিমিডি লাইনের চেয়ে অনেক সহজ এবং পরিবর্তনগুলি পর্যালোচনা করা সহজ। ধন্যবাদ.
Alveoli

3
ইউআইতে "অন্যান্য ফোরক" এ কীভাবে যাবেন তা জানতে আমার সমস্যা হয়েছিল। সহজেই সেখানে যেতে গিথুব ব্যবহারকারীর নাম দিয়ে ইউআরএলটি পরিবর্তন করুন। অর্থাত্ github.com/userName/repoName
চার্লস

2
আমি পদক্ষেপ 4 এ উল্লিখিত মুলতুবি থাকা পুল অনুরোধগুলি দেখতে পাচ্ছিলাম না তার পরিবর্তে, আমি OtherForkডান হাত থেকে 'তুলনা' ড্রপডাউন থেকে তৈরি করা অনুরোধের সাথে সামঞ্জস্য করা শাখাটি নির্বাচন করেছি । এরপরে আমি উপরে বর্নিত হিসাবে বেসের কাঁটাচামড়া হিসাবে বাম দিকটি নির্বাচন করেছিলাম যাতে টান অনুরোধ তৈরি করতে সক্ষম হয়েছিল।
উপমা

কাঁটাচামচ না থাকলে কাজ করে। উদাহরণস্বরূপ: github.com/OculusVR/RakNet/pull/61/files
মিলান বাবুস্কভ

1
গিথবস সাইটের সঠিক শব্দগুলি পুরানো হতে পারে, তবে প্রক্রিয়াটি স্পট-এ রয়েছে। সুপার সহজ - ধন্যবাদ!
কেভঙ্ক

73

টেককুব যেমন বলেছেন আগে, আপনি সরাসরি শাখাটি টানতে পারেন। গিটহাবের সাথে বেশিরভাগ সময়, শাখাটি প্রকল্পটির অনুরোধকারী ব্যবহারকারীর কাঁটাচামচটিতে কেবল "মাস্টার" থাকে।

উদাহরণ: git pull https://github.com/USER/PROJECT/ BRANCH

এবং একটি বাস্তব উদাহরণ হিসাবে:

বলুন যে আপনি সাফারিবুকস নামে একটি গিথুব প্রকল্পটি কাঁটাচামচ করেছেন এবং উত্সাহী প্রকল্পে নিম্নলিখিত টান অনুরোধ রয়েছে, যা আপনি নিজের কাঁটাচামচ রাখতে চান:

এখানে চিত্র বর্ণনা লিখুন

তারপরে, আপনার কাঁটাচামড়ার ক্লোনড প্রকল্প ফোল্ডারে, চালান:

git pull https://github.com/fermionic/safaribooks.git fix-str-decode

20
এর বিপরীতমুখীটি হ'ল ব্রাঞ্চের কাছে পুল অনুরোধ ছাড়াও অন্যান্য জিনিস থাকতে পারে। এছাড়াও, আপনাকে অনুরোধ লেখকের কাঁটাচামচ জন্য সঠিক URL সন্ধান করতে হবে। আপনি যদি ওয়ান-লাইনার ব্যবহার করতে চান তবে git pull https://github.com/{upstream/project} refs/pull/{id}/headপরিবর্তে ব্যবহার করা ভাল ।
jbyler

1
@ জাইবিলার শাখার যদি অন্য জিনিস থাকে তবে আমি নিশ্চিত যে গিটহাব তাদের সাথে যেভাবেই অনুরোধটি টেনে আনতে হবে তা আপডেট করে ফেলেছি।
টিম ম্যালোন

22

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

ধাপ 1:

git remote add upstream <url>

আপনি সম্ভবত ইতিমধ্যে এই পদক্ষেপটি সম্পন্ন করেছেন, তবে তা না হলে আপনি প্রবাহের প্রকল্পের জন্য একটি দূরবর্তী সংজ্ঞায়িত করতে চান। ইউআরএল হ'ল প্রকল্পটির ক্লোন ইউআরএল for কাঁটাচামচের জন্য একটি রিমোট কনফিগার করতে এবং একটি কাঁটাচামচ সিঙ্ক করতে আরও তথ্য । upstreamরিমোটকে আপনি যে নামটি দিচ্ছেন তা হ'ল এবং এটি কিছু হতে পারে, upstreamএটি প্রচলিত নাম।

ধাপ ২:

git pull upstream refs/pull/{id}/head

... {id}টান অনুরোধ নম্বরটি কোথায় upstreamথেকে সরানোর জন্য দূরবর্তীটির নাম, যেমন আপনি যদি ঠিক 1 পদক্ষেপ অনুসরণ করেন তবে কেবল "আপস্ট্রিম"। এটি একটি ইউআরএলও হতে পারে, এক্ষেত্রে আপনি পদক্ষেপ 1 এড়িয়ে যেতে পারেন।

ধাপ 3:

মার্জ কমিটের জন্য একটি কমিট বার্তা লিখুন। আপনি ডিফল্ট রাখতে পারেন, যদিও আমি পুল অনুরোধ নম্বর, এটি সংশোধন করে দেওয়া সমস্যা এবং একটি সংক্ষিপ্ত বিবরণ দিয়ে একটি দুর্দান্ত এক-লাইন সংক্ষিপ্তসার দেওয়ার পরামর্শ দিচ্ছি:

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions

এছাড়াও বৈকল্পিকের সাথে সম্পর্কিত উত্তরটি দেখুন যা এটিতে পুল অনুরোধের সাথে একটি স্থানীয় শাখা তৈরি করে। এবং একটি চূড়ান্ত রূপ: আপনি git pull upstream refs/pull/{id}/headআপনার স্থানীয় FETCH_HEADgit log ..FETCH_HEADgit merge FETCH_HEAD
রেপোতে কমিটগুলি

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

1
এটি আমার প্রয়োজনীয় সমাধান ছিল, কারণ পুল অনুরোধের লেখক তাঁর রেপো সরিয়ে ফেলেছিলেন।
jswetzen

20

আমার জন্য কাজ করেছে এমন আরও কিছু বিশদ তথ্য।

কাঁটাযুক্ত রেপোর জন্য আমার .git / কনফিগারেশন ফাইলটি দেখতে এমন দেখাচ্ছে:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = git@github.com:litzinger/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
        rebase = true
[remote "source"]
        url = git://github.com/revolunet/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/source/*
        fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

তারপরে "গিট ফেচ উত্স" চালান, যা পরে কাঁটাযুক্ত রেপো থেকে সমস্ত পুল অনুরোধ তালিকাভুক্ত করে।

 * [new ref]         refs/pull/54/head -> origin/pr/54
 * [new ref]         refs/pull/67/head -> origin/pr/67
 * [new ref]         refs/pull/69/head -> origin/pr/69
 * [new ref]         refs/pull/71/head -> origin/pr/71

এবং তারপরে একটি নির্দিষ্ট পুল অনুরোধে মার্জ করতে "গিট মার্জ মাস্টার উত্স / pr / 67" চালান


1
আমি আমার .git / কনফিগারটি সম্পাদনা করেছি এবং [দূরবর্তী "উত্স"] লাইনগুলি যুক্ত করেছি তবে প্রকল্পটির জন্য আমি আগ্রহী ছিলাম এবং নির্দেশাবলী নির্দোষভাবে কাজ করেছিল। আমি এই উত্তর ভালবাসি।
ফিলো ভাইভারো

3
News.ycombinator.com/item?id=9051220 এবং help.github.com/articles/checking-out-pull-requests- স্থানীয়ভাবে গিটহাব-নির্দিষ্ট-পঠনযোগ্য কেবল রিমোট refs/pull/নেমস্পেসে ইঙ্গিত সহ দুর্দান্ত সম্পর্কিত পরামর্শ পাওয়া যাবে ।
ফিলিপ ডুরবিন

আপনি যদি স্মার্টজিট ব্যবহার করেন তবে smartgit.branch.otherRefs=notes;pullআপনি syntevo.com/doc/display/SG/System+ প্রপার্টি অনুসারে স্মার্টজিট.প্রপ্রেটিগুলি যুক্ত করলে লগ গ্রাফটিতে এই টানুন অনুরোধগুলি (এবং বন্ধ হওয়াগুলি) দেখতে পাবেন - আপনি সেগুলি থেকে সেগুলিও মার্জ করতে পারেন ।
সিএডি

বিটিডব্লিউ, আপনি গিট আনার উত্স + রেফার্স / হেড / * দিয়ে কমান্ড লাইনেও এটি চেষ্টা করতে পারেন: রেফ / রিমোটস / আপস্ট্রিম / * + রেফস / টান / * / হেড: রেফ / রিমোটস / উত্স / পিআর / *
লাইব

9

আমি যা করব তা নীচে;

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

আমি পরিবর্তনগুলি এখন একটি পরীক্ষার শাখায় মার্জ করেছি, নামকরণ করেছি test_fork। যাতে কোনও পরিবর্তন আমার গাছকে ময়লা করে না।

এটি আরও বেশি পছন্দসই হলে নির্দিষ্ট প্রতিশ্রুতি বাছাই করতে উপরে বর্ণিত হিসাবে আপনি চেরি-পিক ব্যবহার করতে পারেন।

শুভ যাত্রা :)


0

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

git prfetch upstream

এবং এটি প্রবাহের কাঁটাচামচ থেকে সমস্ত অনুরোধ পেয়েছে।

স্ক্রিপ্ট তৈরি করতে একটি ফাইল তৈরি করুন ~/bin/git-prfetch

ফাইলটিতে নিম্নলিখিতগুলি থাকা উচিত:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Please supply the name of a remote to get pull requests from."
    exit 1
fi

git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*

আপনার পথটিতে সেটিংস করে স্ক্রিপ্ট অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন:

export PATH="$HOME/bin:$PATH"

~/.bashrcপরিবর্তনটি স্থায়ী করতে আপনি এই ফাইলটি যুক্ত করতে পারেন।

এখন, নিশ্চিত হয়ে নিন যে আপনি কাঁটাচামচটি যুক্ত করেছেন যাতে আপনি এর থেকে টানার অনুরোধগুলি পেতে চান:

git remote add upstream https://github.com/user/repo.git

এবং তারপর

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