ฉันจะมีส่วนร่วมกับรหัสของผู้อื่นใน GitHub ได้อย่างไร [ปิด]


231

ผมอยากจะมีส่วนร่วมในโครงการบางอย่างในGitHub ฉันควรแยกหรือไม่ สาขามัน มีคำแนะนำอะไรและควรทำอย่างไร?


61
อีกใกล้ไร้สาระ
สตีเฟ่น

4
ฉันเขียนรายละเอียดเพิ่มเติมทีละขั้นตอนในการสนับสนุน Concrete5 ใน Github แต่กระบวนการสามารถนำไปใช้กับโครงการใด ๆ ลองดูสิ
Joe Meyer

7
ฉันไม่เห็นจริง ๆ ว่านี่เป็น 'ไม่สร้างสรรค์' การโหวตและมุมมองเพียงอย่างเดียวแสดงให้เห็นว่าเป็นคำถามยอดนิยมที่ผู้คนต้องการคำตอบ
เอียน


1
อาจมีการลงคะแนนเสียงข้างมากเพียงพอคำถามที่ปิดไว้ก่อนหน้านี้ควรได้รับอนุญาตให้ฟื้นคืนชีพอีกครั้งและให้ผู้คนมีส่วนร่วมในกระทู้อีกครั้ง
Peter Teoh

คำตอบ:


180

เป็นการดีที่คุณ:

  1. แยกโครงการ
  2. แสดงความคิดเห็นตั้งแต่หนึ่งข้อขึ้นไปและทำความสะอาดเพื่อเก็บข้อมูล คุณสามารถสร้างสาขาใหม่ได้ที่นี่หากคุณกำลังแก้ไขมากกว่าหนึ่งส่วนหรือคุณสมบัติ
  3. ทำการร้องขอการดึงในส่วนต่อประสานเว็บของ GitHub

หากเป็นการร้องขอคุณสมบัติใหม่อย่าเริ่มการเข้ารหัสก่อน อย่าลืมโพสต์ปัญหาเพื่อหารือเกี่ยวกับคุณสมบัติใหม่

หากคุณลักษณะดังกล่าวเป็นไปด้วยดีและมี +1 บางส่วนหรือเจ้าของโครงการอนุมัติให้กำหนดปัญหาให้กับตัวเองแล้วทำตามขั้นตอนด้านบน

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


4
รายละเอียดเกี่ยวกับการฟอร์กของ GitHub และคำขอดึง
Gabriel Grant

1
ใช่ดึงคำขอ คำขอผสานเป็นคำศัพท์สั้น ๆ
Yann Ramin

2
@MariusKavansky มันเป็นวิธีอื่น ๆ รอบ! เมื่อคุณรู้ว่าจะทำงานยังไงคุณก็มี แต่คุณเท่านั้นที่จะช่วย :)
hashbrown

หลังจากฉันมีส่วนร่วมในโครงการโอเพนซอร์ส ฉันคิดว่ามันเป็นความคิดที่ดีกว่าที่จะเปิดปัญหาเพื่อหารือเกี่ยวกับคุณสมบัติใหม่ถ้ามันเป็นคุณสมบัติใหม่ หากเป็นคุณลักษณะหรือปัญหาที่กล่าวถึงอย่างดีคุณควรกำหนดปัญหาให้กับตัวคุณเองจากนั้นทำตามขั้นตอนด้านบน นี่คือ 2 เซ็นต์ของฉัน
wizztjh

@hashbrown เขาถามว่า "รายการ" ของคุณสมบัติที่ร้องขอจนถึงตอนนี้ คุณลักษณะเหล่านั้นที่ถูกร้องขอและ +1 แล้ว
Pacerier

31

เพื่อเพิ่มคำตอบของ Yannเมื่อคุณแยกโครงการแล้วคุณสามารถพัฒนาในสาขาใด ๆ ที่คุณต้องการ (อันใหม่หรืออันใดอันหนึ่งจากโครงการเดิม)

จำไว้ว่า:


1
คุณสามารถเพิ่มรายละเอียดหรือการเชื่อมโยงในประเด็นที่สองของคุณ(rebasing สาขา) ?
JorgeArtware

1
@JorgeArtware ฉันได้อัปเดตคำตอบพร้อมกับลิงก์จำนวนหนึ่งที่แสดงการรีบูต
VonC

@VonC ฉันถามคำถามที่นี่ แต่ถ้าคุณเชื่อว่ามีความจำเป็นฉันจะสร้างคำถามใหม่ทั้งหมดจากมัน ทำไมฉันถึงต้องรีบูทแทนที่จะรวมกันนอกจากมีประวัติตรง? นี่คือสิ่งที่ฉันทำเมื่อฉันมีส่วนร่วมในบางโครงการ (หลังจาก PR จากสาขาคุณลักษณะของฉันได้รับการผสานเพื่อพัฒนาและเป็นสาขาหลัก): git checkout master; git pull;เหมือนกันสำหรับการพัฒนา (ที่สาขาคุณลักษณะของฉันถูกผสานก่อน) ความแตกต่างที่ฉันสามารถคิดได้ จากหลังจากอ่าน "pull vs pull --rebase" และ "merge vs rebase" เป็นเพียงประวัติแบน มีอะไรอีกที่ล้ำลึกกว่านี้?
linuxbandit

@grasshopper ในแง่ของ "การมีส่วนร่วม" (บริบทของหน้านี้) คุณต้องการที่จะ rebase ท้องถิ่นของคุณบนสุดของสาขาที่อัปเดตก่อนที่จะผลักดัน: ที่จะทำให้การมีส่วนร่วมดังกล่าวเล็กน้อยเพื่อบูรณาการโดยผู้ดูแลโครงการสาขาเดิม ในบริบทของคำถามของคุณที่ยอมรับ PR ของคุณแน่นอนว่าคุณสามารถผสานแทนที่จะเป็น rebase เพื่ออัปเดตสาขาที่มีอยู่
VonC

(ขออภัยตอนนี้เปลี่ยนชื่อผู้ใช้เพื่อสะท้อน github ของฉัน) - @VonC ขอบคุณดังนั้นคำแนะนำทั้งหมดที่ฉันอ่านเกี่ยวกับการรีบูตจะใช้ก่อนการประชาสัมพันธ์ เพื่อสะท้อนให้เห็นถึงการประชาสัมพันธ์และการรวมที่ได้รับการยอมรับภายใน repo ท้องถิ่นของฉันมีการปฏิบัติทั่วไป (rebase แทนที่จะรวม) หรือฉันจะทำอะไร? จะเป็นอย่างไรถ้าฉันจะส่งงานประชาสัมพันธ์อีกครั้ง
linuxbandit

15

หากต้องการเพิ่มคำตอบของ Yan และ VonC นี่เป็นแหล่งข้อมูลที่ดีจาก github ตัวเอง: http://help.github.com/forking/

นอกจากนี้อย่าลืมดูที่แถบด้านข้างขวาภายใต้หัวข้อ "การทำงานร่วมกัน"


10

มีวิดีโอ Railscast ที่ยอดเยี่ยมที่นี่ที่จะนำคุณเข้าสู่กระบวนการ นอกจากนี้ยังมีเคล็ดลับดีๆมากมายเช่นการแสดงวิธีกำหนดสาขาที่คุณอาจต้องการทำงานเมื่อมีส่วนร่วมใช้การทดสอบ submodules เป็นต้น

ในขณะที่ screencast นี้มุ่งเน้นไปที่นักพัฒนา Rails เป็นหลักข้อมูลส่วนใหญ่นั้นใช้ได้สำหรับการมีส่วนร่วมในโครงการโอเพนซอร์สใด ๆ


4

Github มีหลายวิธีในการร่วมมือกับโครงการ รูปแบบการใช้โปรเจ็กต์ส่วนใหญ่คือโมเดลคำขอการดึง ฉันเริ่มต้นโครงการเพื่อช่วยให้ผู้คนส่งคำขอดึง GitHub เป็นครั้งแรก คุณสามารถทำแบบฝึกหัดการสอนเพื่อสร้าง PR ครั้งแรกของคุณได้ที่นี่

เวิร์กโฟลว์นั้นง่ายเหมือน

  • แยก repo เป็น GitHub
  • โคลน repo ไปยังเครื่องของคุณ
  • ทำการสาขาและทำการเปลี่ยนแปลงที่จำเป็น
  • ผลักดันการเปลี่ยนแปลงของคุณไปสู่ทางแยกบน GitHub git push origin branch-name
  • ไปที่ส้อมของคุณบน GitHub เพื่อดูCompare and pull requestปุ่ม
  • คลิกที่มันและให้รายละเอียดที่จำเป็น


2

เวิร์กโฟลว์ทางเทคนิค

ฉันขอแนะนำเวิร์กโฟลว์ต่อไปนี้:

  1. แยกที่เก็บ (ผ่าน GitHub เว็บอินเตอร์เฟส: ปุ่ม "แยก")
  2. ในที่เก็บแบบแยกของคุณให้คัดลอก URL
  3. โคลน (ในบรรทัดคำสั่ง)

    git clone <url-from-your-workspace>

  4. ป้อนไดเรกทอรีที่เพิ่งสร้างขึ้นและสร้างสาขา

    cd <directory> git checkout -b <branchname>

  5. ตอนนี้ทำการเปลี่ยนแปลงของคุณ

  6. คุณสามารถสร้างหนึ่งคอมมิทหรือมากกว่าหลังจากการเปลี่ยนแปลงแต่ละครั้ง:

    commit -a

  7. เมื่อเสร็จแล้วให้กดการเปลี่ยนแปลงของคุณ

    git push origin <branch>

  8. ในบรรทัดคำสั่งของคุณคุณควรเห็น URL เพื่อสร้างการประชาสัมพันธ์ เยี่ยมชม URL และคลิกปุ่มเพื่อสร้างการประชาสัมพันธ์

  9. หากไม่มีให้ไปที่ที่เก็บในเบราว์เซอร์และจะมีปุ่มสำหรับสร้างคำขอดึง

แค่นั้นแหละ.

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

หากภายหลังคุณสร้าง PR เพิ่มเติมจาก repo ที่ลอกแบบเดียวกันคุณควรซิงโครไนซ์ (รับการเปลี่ยนแปลงล่าสุดจากที่เก็บต้นฉบับ) ก่อนที่คุณจะสร้างสาขาอื่นสำหรับ PR อื่น:

git checkout master
git remote add upstream <url-of-original-repo>
git pull upstream master

ข้อควรพิจารณาอื่น ๆ :

  • โครงการอาจมีแนวทางการบริจาค: ค้นหาไฟล์ CONTRIBUTING.rst หรือ. md
  • คุณอาจต้องการปฏิบัติตามแนวทางการเข้ารหัสสำหรับโครงการ
  • คุณอาจต้องการร่างความคิดของคุณเป็นปัญหาก่อน
  • คุณอาจต้องการดูแท็บคำขอดึงข้อมูลสำหรับโครงการและตรวจสอบว่ามีการเปิด PR หรือไม่รวม PR

คำแนะนำเหล่านี้อยู่ที่นี่เพื่อช่วยให้คุณประหยัดจากปัญหาในการทำงานในการประชาสัมพันธ์ที่จะไม่ถูกรวมเข้าด้วยกัน หากมีกิจกรรมในโครงการและการรวมกันของ PR นี่เป็นสัญญาณที่ดี หากมีแนวทางการบริจาคให้ปฏิบัติตาม

จงสุภาพเสมอ โปรดจำไว้ว่าผู้ดูแลโครงการไม่จำเป็นต้องรวม PR ของคุณเข้าด้วยกัน คุณมีสิ่งที่มีค่าที่จะเพิ่มในโครงการหรือไม่


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