เนื่องจากมีคนถามเรื่อง Pull Request ใน GitHub มาก็เลยมาเขียนอธิบายกันสักหน่อย การทำงานบน GitHub ก็จะคล้ายๆ กับ version control system ตัวอื่นๆ แต่ใน GitHub จะเพิ่มความสามารถในการขอ merge code จากผู้ใช้อื่นที่ต้องการ contribute feature ใหม่หรือ patch ให้ได้ เรียกว่า Pull Request หากต้องการ Pull Request ตัว contributor จะต้อง Fork โครงการออกมาจากต้นน้ำ (Upstream Project) ก่อน หากแก้ไข bug หรือเพิ่ม feature ใหม่แล้วต้องการ contribute กลับไปยังต้นน้ำ ค่อยขอ Pull Request ผมจะยกตัวอย่างโครงการ Arduino Quadruped Robot โดยผมเป็นเจ้าของโครงการ (Project Owner) และคุณ Andrew เป็น Contributor

เริ่มจากคุณ Andrew สั่ง Fork โครงการ Arduino Quadruped Robot จาก Upstream Project ก่อน กดปุ่ม Fork


เลือกว่าจะใช้ Repository ใด

คุณ Andrew ก็จะได้ code จากโครงการต้นน้ำมาดังนี้ สังเกตว่าโครงการใน repository เป็นการ Fork มาจาก anoochit/arduino-quadruped-robot

เมื่อคุณ Andrew แก้ไข code เพิ่ม feature ใหม่เรียบร้อยแล้ว ต้องการ contribute ให้กับโครงการต้นน้ำ ก็สามารถกดปุ่ม New pull request ได้เลย

เมื่อกด pull request แล้ว GitHub จะให้เราเลือกว่าต้องการ Merge โค้ดจาก repository และ branch ไปยัง repository และ branch ของโครงการต้นน้ำ ทั้งนี้ขึ้นอยู่กับว่าโครงการต้นน้ำกำหนด workflow ยังไงต้องไปคุยกันก่อนขอ pull request นะครับ ในกรณีนี้ merge จาก branch master เข้าหากัน GitHub จะให้ดูว่ามีอะไรเปลี่ยนแปลงไปบ้าง

ดู diff ได้ว่าเปลี่ยนตรงไหน บรรทัดอะไร

ถ้าไม่ conflick กดปุ่ม Create pull request ได้เลย จากนั้นใส่ข้อความว่าแก้ไขอะไร ในกรณีนี้คุณ Andrew เพิ่ม feature ใหม่มาให้

กดปุ่ม Create pull request อีกรอบ คำร้องขอ pull request ก็จะไปโผล่ในหน้าโครงการต้นน้ำ

จากนั้นก็รอเจ้าของโครงการ ซึ่งก็คือผมนั่นเอง

ในส่วนของเจ้าของโครงการจะมี mail จาก GitHub แจ้งมาว่ามีการขอ pull request มาดังนี้

ถ้าเข้าไปดูหน้า Notification ก็จะพบข้อความขอ pull request แบบนี้

กดเข้าไปดูก็จะพบว่าคุณ Andrew เพิ่ม feature ใหม่มาให้นี่เอง GitHub ก็แจ้งว่าไม่มี conflick ถือว่าใช้ได้

ในกรณีที่ทำ code review และทดสอบแล้วว่าไม่พัง ถ้าพังก็อย่าเพิ่ง Merge เขียน comment ให้คุณ Andrew ไปแก้ไขก่อน ในกรณีนี้ไม่มีอะไรพังเขียน comment ขอบคุณ คุณ Andrew สักหน่อย

จากนั้นกดปุ่ม Confirm merge ได้เลย GitHub ก็จะ Merge โค้ดให้อัตโนมัติ

กลับมาดูที่หน้าโครงการต้นน้ำก็จะพบว่า merge โค้ดจาก คุณ Andrew มาเรียบร้อยแล้ว ก่อน pull request คนที่เป็น contributor จะต้องทดสอบให้เรียบร้อยก่อนขอ pull request นะครับ และหลังจาก merge แล้วเจ้าของโครงการก็ควรทดสอบอีกครั้งเช่นกัน

Comments are closed.