GitHub โคลนจากคำขอดึง?


129

ฉันต้องการโคลนที่เก็บจาก GitHub ปัญหาคือฉันไม่ต้องการสาขาหลัก ฉันต้องการเวอร์ชันในคำขอดึงที่ไม่ได้รับการอนุมัตินี้

เป็นไปได้ไหมที่ฉันจะโคลนเวอร์ชันคำขอดึงแทนที่เก็บหลัก


2
หากคุณมาที่นี่ไม่ได้สำหรับcloneแต่fetchเห็น: stackoverflow.com/questions/6743514/...
Ciro Santilli郝海东冠状病六四事件法轮功

คำตอบ:


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

113

วิธีที่ง่ายที่สุดในการทำเช่นนี้:

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'

ตอนนี้คุณสามารถชำระเงินประชาสัมพันธ์ใด ๆ โดยการทำงานgit pr <pr_number>หรือgit pr <pr_number> <remote>ถ้า GitHub originระยะไกลของคุณจะไม่ได้ตั้งชื่อ


50
ดีกว่า: git fetch origin pull/<#>/head:<local_branch_name>( via )
schlamar

5
ฉันพบตัวเองอ้างอิงคำตอบนี้จึงมักจะดังนั้นฉันติดอยู่นี้ลงในของฉัน.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
Michael McQuade

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

เช่น:

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

ทำการเปลี่ยนแปลงยอมรับผลักดันและเปิด PR ใหม่จาก Fork ของคุณบน GitHub


ฉันจะรวมสาขานี้ในพื้นที่ได้อย่างไร? ฉันเพิ่งโคลนและดึงคำขอดึงที่ไม่ได้ผสานตามที่คุณทำข้างต้นและลองใช้ชื่อสาขาการชำระเงิน แต่ไม่มีการเปลี่ยนแปลงปรากฏในโปรแกรมแก้ไข IDE / ข้อความของฉัน
erginduran

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
ทำไมจะไม่ล่ะ? อธิบายวิธีการทำอย่างสะดวกและมีประสิทธิภาพ
Ian Stapleton Cordasco

เพราะฉันเป็น 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 ระยะไกลกำหนดชื่อสาขา ฯลฯ จากนั้นคุณจะได้ชื่อสาขาที่มีชื่อรัดกุมและถูกต้องโดยไม่ต้องยุ่งยาก แต่ฉันเข้าใจว่ามันอาจดูเหมือนหนักใจ
Ian Stapleton Cordasco

ดี. ฉันไม่รู้จัก +1 นี้! คุณช่วยยกตัวอย่างที่มีคุณสมบัติครบถ้วนให้ฉันได้ไหม
Fresheyeball

@ sigmavirus24 ขอบคุณมากสำหรับข้อมูล; ฉันสงสัยว่ามีเคล็ดลับที่คล้ายกันสำหรับ bitbucket หรือไม่?
Petr Kozelka

8

1
หมายเหตุgit pullสร้างการผสานลงในสาขาปัจจุบัน โดยปกติแล้วสำหรับการประชาสัมพันธ์ที่คุณต้องการเพียงgit fetchเพื่อรับรหัสผู้เขียนต้นฉบับ (จากนั้นเข้าถึงได้ในชื่อ FETCH_HEAD) หากคุณต้องการผสานมันก็คุ้มค่าที่จะกล่าวถึงpull/2/merge(แทนที่จะเป็นpull/2/head) ซึ่งทำให้ GitHub ทำให้คุณมีการผสานรวมที่แน่นอนซึ่งจะเกิดขึ้นหากคุณคลิกปุ่ม [ผสาน] ในตอนนี้
Beni Cherniavsky-Paskin

6

เมื่อผู้ใช้ส่งคำร้องขอดึงพวกเขาจะขอให้รวมการเปลี่ยนแปลงบางอย่างจากสาขาบนโคลนของส้อมกลับไปยังที่เก็บของผู้ใช้รายอื่น

การเปลี่ยนแปลงที่คุณต้องการสามารถรับได้จากแหล่งที่มาของคำขอดึง ในการทำสิ่งนี้ให้โคลนที่เก็บของผู้ใช้ ( git://github.com/berstend/frappe.git) จากนั้นตรวจสอบสาขาที่เขาสร้างคำขอดึงจาก ( feature/mongoose-support)


1

หลังจากติดตั้งgit-extras

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

คุณสามารถใช้ไฟล์ git pr

$ git pr 62 [remote]

1

ด้วยอินเทอร์เฟซบรรทัดคำสั่งใหม่อย่างเป็นทางการของ Github :

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

44หมายเลขประชาสัมพันธ์อยู่ที่ไหนแต่ยังสามารถเป็นชื่อสาขาได้


ดูเพิ่มเติมรายละเอียดและตัวเลือกและคำแนะนำการติดตั้ง


0

คำขอดึงนั้นแสดงการกระทำจากทางแยกของบุคคลนั้นเพื่อให้คุณเห็นว่าเขากำลังผลักดันการเปลี่ยนแปลงจากfeature/mongoose-supportสาขา

คุณสามารถโคลนที่เก็บของเขาและชำระเงินสาขานั้นได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.