पुल अनुरोध से GitHub क्लोन?


128

मैं GitHub से एक रिपॉजिटरी क्लोन करना चाहूंगा। समस्या यह है कि मुझे मुख्य शाखा नहीं चाहिए; मैं इस अनपेक्षित पुल अनुरोध में संस्करण चाहता हूं ।

क्या मुख्य रिपॉजिटरी के बजाय पुल अनुरोध संस्करण को क्लोन करना मेरे लिए संभव है?


2
यदि आप यहां नहीं cloneबल्कि fetchदेखने के लिए आए : stackoverflow.com/questions/6743514/…
Ciro Santilli 病 for for for

जवाबों:


87

आप उस शाखा का क्लोन कर सकते हैं जिसे आप -bविकल्प का उपयोग करके और पुल अनुरोध के लिए चाहते हैं:

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

आपके मामले में, जिस शाखा को आप क्लोन करना चाहते हैं, वह पुल अनुरोध का स्रोत शाखा है ( feature/mongoose-support):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support

112

ऐसा करने का सबसे आसान तरीका है:

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

अब आप एक नई शाखा पर होंगे जो पुल अनुरोध की स्थिति पर है।

आप दौड़कर एक उपनाम स्थापित करना चाहते हैं

git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

अब आप किसी भी PR को रन करके चेक कर सकते हैं git pr <pr_number>, या git pr <pr_number> <remote>यदि आपका github रिमोट नाम नहीं है origin


49
बेहतर: git fetch origin pull/<#>/head:<local_branch_name>(के माध्यम से )
श्लमर

5
मैंने स्वयं को इस SO उत्तर का संदर्भ देते हुए पाया, इसलिए मैंने इसे अपनी .gitconfigफ़ाइल में [alias]निम्न प्रकार से चिपका दिया pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f":। इस तरह मैं सिर्फ टाइप करता हूँ git pr upstream 62और अगली बात जो मुझे पता है, मैं ऊपर की तरफ से PR # 62 की एक नई शाखा पर हूँ! यदि आप हमेशा उपयोग करते हैं originतो आप इसके बजाय इसे हार्डकोड कर सकते हैं $1, लेकिन यह मेरे लिए चारों ओर स्विच करता है।
मैट ---

@matt जो मानती है कि आपके पास चेकआउट के लिए एक उपनाम हैco
माइकल मैकक्वाडे

43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

उदाहरण के लिए:

$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611

परिवर्तन करें, उन्हें करें, PUSH करें और GitHub पर अपने कांटे से नए PR खोलें


मैं इस शाखाओं को स्थानीय रूप से कैसे मिला सकता हूं? मैंने अभी-अभी आपके द्वारा किए गए के रूप में एक अनमैरिड पुल अनुरोध को क्लोन किया और प्राप्त किया था। और चेकआउट ब्रांचनाम की कोशिश की थी। लेकिन मेरे आईडीई / टेक्स्ट एडिटर में कोई परिवर्तन दिखाई नहीं देता है।
इरगिंडुरन

17

आप इस भंडार में दिए गए निर्देशों का पालन कर सकते हैं ताकि उनकी रिपॉजिटरी और शाखा का पता लगाए बिना सीधे रिमोट की जांच कर सकें।

उदाहरण उपयोग

मेरी एक परियोजना (github3.py) के लिए मेरे पास निम्नलिखित हैं github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = git@github.com:sigmavirus24/github3.py

पहली पंक्ति वह है जो अपवाद के साथ हर रिमोट के लिए मानक githubहै जिसे रिमोट के नाम से बदल दिया जाता है। इसका मतलब यह है कि दूरस्थ सिर (या उस सर्वर पर शाखाओं के प्रमुख) स्थानीय उपसर्गों द्वारा "मैप" किए जाते हैं github/। इसलिए अगर मैंने किया git fetch githubऔर GitHub पर एक शाखा थी जो पहले से ही मेरी मशीन पर स्थानीय रूप से ध्यान नहीं दिया गया था, तो यह शाखा डाउनलोड करेगी और मैं इसे इस तरह स्विच कर सकता हूं git checkout -t github/branch_name:।

दूसरी पंक्ति एक ही काम करती है, लेकिन यह मानक गिट शाखाओं के बजाय पुल अनुरोधों के लिए करती है। इसलिए आप देख रहे हैं refs/pull/*/head। यह GitHub पर प्रत्येक पुल अनुरोध के प्रमुख को लाता है और इसे मैप करता है github/pr/#। तो अगर कोई पुल अनुरोध भेजता है और उसकी संख्या 62 है (उदाहरण के लिए), तो आप यह करेंगे:

git fetch github
git checkout -t github/pr/62

और फिर आप एक स्थानीय शाखा पर होंगे, pr/62(यह मानते हुए कि यह पहले से मौजूद नहीं था)। यह अच्छा है और इसका मतलब है कि आपको अन्य लोगों के रिमोट या शाखाओं का ट्रैक रखने की आवश्यकता नहीं है।


2
क्यों नहीं? यह बताता है कि यह कैसे सुविधाजनक और कुशल तरीके से किया जाए।
इयान स्टैपलटन कॉर्डैस्को

क्योंकि मैं एक noob हूँ, और उस दस्तावेज़ को समझना मुश्किल है। मैंने कभी भी इसे "नहीं मिल रहा है" git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_cloneजीआईटी दस्तावेज़ से प्राप्त किया होगा ।
Fresheyeball

6
GitHub से लाने के लिए जीआईटी दस्तावेज़ क्या करता है, जानकारी (संदर्भ या संदर्भ) का एक अतिरिक्त सेट जोड़ रहा है। जब आप करते git fetch githubहैं तब आप कर सकते हैं git co -t github/pr/#। यह आपको दूरस्थ URL को कॉपी और पेस्ट करने, शाखा का नाम पता लगाने आदि से रोकता है। फिर आपको अतिरिक्त परेशानी के बिना अच्छी तरह से नामित, संक्षिप्त और सटीक शाखा नाम मिलते हैं। लेकिन मुझे लगता है कि यह भारी लग सकता है।
इयान स्टैपलटन कॉर्डैस्को

ओह अच्छा। मुझे यह पता नहीं था +1! क्या आप मुझे पूरी तरह से योग्य उदाहरण दे सकते हैं?
फ्रेशेयबेल

@ sigmavirus24 जानकारी के लिए बहुत बहुत धन्यवाद; मुझे आश्चर्य है कि अगर बिटकॉइन के लिए समान चाल मौजूद है?
पेट्र कोजल्का

8

1
नोट git pullवर्तमान शाखा में एक मर्ज बनाता है; आमतौर पर एक पीआर के git fetchलिए आप मूल लेखक का कोड प्राप्त करना चाहते हैं (यह तब FETCH_HEAD के रूप में सुलभ है)। यदि आप मर्ज करना चाहते हैं, तो यह भी ध्यान देने योग्य है pull/2/merge(इसके बजाय pull/2/head) - यह GitHub आपको सटीक मर्ज कमिट देता है जो कि आपने [मर्ज] बटन पर क्लिक किया होगा।
बेनी चेर्नियाव्स्की-पास्किन

6

जब कोई उपयोगकर्ता एक पुल अनुरोध सबमिट करता है, तो वे एक कांटा पर एक शाखा से दूसरे उपयोगकर्ता के रिपॉजिटरी में वापस जाने के लिए कुछ बदलाव के लिए कह रहे हैं।

आपके इच्छित परिवर्तन पुल अनुरोध के स्रोत से प्राप्त किए जा सकते हैं। ऐसा करने के लिए, उपयोगकर्ता के रिपॉजिटरी ( git://github.com/berstend/frappe.git) को क्लोन करें , और फिर उस शाखा की जांच करें जिसे उसने ( feature/mongoose-support) से पुल अनुरोध बनाया है ।



1

Github की आधिकारिक नई कमांड लाइन इंटरफ़ेस के साथ :

gh repo clone org/repo
cd repo
gh pr checkout 44

जहां 44पीआर नंबर है, लेकिन शाखा का नाम भी हो सकता है।


अतिरिक्त विवरण और विकल्प और स्थापना निर्देश देखें


0

वह पुल अनुरोध उस व्यक्ति के कांटे से होने वाले कमिट को दिखाता है ताकि आप देख सकें कि वह feature/mongoose-supportशाखा से अपने परिवर्तनों को आगे बढ़ा रहा है ।

आप उसकी रिपॉजिटरी को क्लोन कर सकते हैं और उस ब्रांच को चेकआउट कर सकते हैं


0

मेरे लिए, यह जितना सरल था

git fetch origin pull/4/head

यहां कहां 4पाया गया:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.