🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

มาทำความเข้าใจ Fork และ Pull Request ใน GitHub กัน (入門การพัฒนาร่วมกัน)

ในบทความที่ผ่านมา เราได้เรียนรู้วิธีการจัดการโปรเจกต์ของตัวเองบน GitHub ด้วยขั้นตอนพื้นฐานกันไปแล้ว แต่พลังที่แท้จริงของ GitHub นั้น จะแสดงออกมาได้มากกว่าตอนที่ใช้คนเดียว ก็คือตอนที่ได้เข้าร่วมโปรเจกต์ของผู้อื่นและพัฒนาร่วมกัน

ในครั้งนี้ เราจะมาอธิบายถึงขั้นตอนการทำงานที่สำคัญและเป็นพื้นฐานที่สุดสำหรับการมีส่วนร่วมในโปรเจกต์ภายนอก (เช่น โปรเจกต์โอเพนซอร์ส) ที่คุณไม่มีสิทธิ์ในการเขียน นั่นคือ "Fork (ฟอร์ก)" และ "Pull Request (พูลรีเควสต์)" พร้อมทั้งแนวคิดและขั้นตอนอย่างละเอียด การทำความเข้าใจในกระบวนการนี้จะทำให้คุณสามารถก้าวเข้าสู่การทำงานร่วมกับนักพัฒนาทั่วโลกได้


ทำไมต้อง Fork? เหตุผลที่ push โดยตรงไม่ได้

เป็นเรื่องปกติที่คุณไม่สามารถ push (อัปโหลด) โค้ดไปยัง Repository ของผู้อื่นได้โดยตรง ลองนึกดูว่าถ้าใครก็สามารถเขียนโค้ดได้อย่างอิสระ โปรเจกต์ก็คงจะเละเทะไปหมด จริงไหมครับ? นี่ก็เหมือนกับการที่คุณไม่มีกุญแจบ้านของคนอื่นแล้วจะเข้าไปจัดห้องใหม่ตามใจชอบไม่ได้นั่นเอง

แล้วเราจะสามารถมีส่วนร่วมในโปรเจกต์ของผู้อื่นได้อย่างไร? คำตอบก็คือ "Fork" ครับ

Fork คือฟังก์ชันที่คัดลอก Repository ของผู้อื่นมาไว้บนบัญชี GitHub ของคุณทั้งหมด เพื่อสร้างเป็นที่เก็บข้อมูล (Remote Repository) ส่วนตัวของคุณ เปรียบเสมือนการทำ "สำเนาส่วนตัว" เพื่อนำกลับมาทำงานที่บ้านได้อย่างอิสระ ซึ่งคุณจะมีสิทธิ์ในการเขียนบน Repository ส่วนตัวของคุณอย่างเต็มที่

และกลไกในการเสนอการแก้ไขที่คุณทำใน Repository ส่วนตัวของคุณกลับไปยังโปรเจกต์ต้นฉบับว่า "ลองพิจารณาการเปลี่ยนแปลงนี้ดูไหมครับ/ค่ะ?" นั้นเรียกว่า "Pull Request"


ภาพรวมของ Fork & Pull Request

ก่อนที่จะเริ่มพิมพ์คำสั่ง เรามาทำความเข้าใจภาพรวมของกระบวนการทั้งหมดกันก่อน ขั้นตอนทั่วไปในการมีส่วนร่วมในโปรเจกต์โอเพนซอร์สประกอบด้วย 6 ขั้นตอนดังนี้

  1. Fork: คัดลอกโปรเจกต์ต้นแบบมาไว้ที่บัญชี GitHub ของคุณ
  2. Clone: คัดลอก Repository "ส่วนตัว" ที่สร้างจากการ Fork มายัง PC ของคุณ
  3. Branch: สร้าง Branch (กิ่ง) ใหม่สำหรับทำงานแก้ไข
  4. Modify & Commit: แก้ไขโค้ดบน PC ของคุณและทำการ commit การเปลี่ยนแปลง
  5. Push: Push เนื้อหาที่ commit ไปยัง Repository "ส่วนตัว" ของคุณบน GitHub
  6. Pull Request: ส่งคำร้องขอจาก Repository ของคุณไปยังโปรเจกต์ต้นฉบับว่า "กรุณานำการเปลี่ยนแปลงนี้ไปรวมด้วย"

หากวาดเป็นแผนภาพ จะได้ดังนี้

[แผนภาพ: 1. Repository ต้นฉบับ →(Fork)→ 2. Repository GitHub ของคุณ →(Clone)→ 3. PC ของคุณ →(Push)→ 4. Repository GitHub ของคุณ →(Pull Request)→ 5. Repository ต้นฉบับ]


ปฏิบัติจริง! ขั้นตอนการมีส่วนร่วมในโปรเจกต์โอเพนซอร์ส

เรามาดูขั้นตอนที่เป็นรูปธรรมกันดีกว่า เพื่อเป็นการฝึกฝน เราจะลองทำในสถานการณ์จำลองการเสนอแก้ไขคำผิด (typo) ง่ายๆ กัน

ขั้นตอนที่ 1: Fork Repository ที่ต้องการมีส่วนร่วม

ขั้นแรก ให้เปิดหน้า GitHub ของโปรเจกต์ที่คุณต้องการมีส่วนร่วม คลิกที่ปุ่ม "Fork" ที่แสดงอยู่มุมบนขวาของหน้า

[ภาพ: ชี้ไปที่ปุ่ม "Fork" บนหน้าโปรเจกต์ของ GitHub]

หน้าจอ "Create a new fork" จะปรากฏขึ้น ให้ตรวจสอบชื่อ Repository แล้วกดปุ่ม "Create fork" รอสักครู่ สำเนาของ Repository นั้นจะถูกสร้างขึ้นในบัญชี GitHub ของคุณ

[ภาพ: หน้าจอ Repository บนบัญชีของคุณหลังจากการ Fork จะเห็นว่า URL เป็นชื่อผู้ใช้ของคุณ]

ขั้นตอนที่ 2: `clone` Repository ที่ Fork มา

ต่อไป ให้ `clone` Repository "บนบัญชีของคุณ" ที่เพิ่งสร้างจากการ Fork มายัง PC ของคุณ โปรดระวังว่าต้องคัดลอก URL ของ Repository ที่คุณ Fork มา ไม่ใช่ Repository ต้นฉบับ

git clone git@github.com:ชื่อผู้ใช้ของคุณ/ชื่อrepositoryที่forkมา.git

ขั้นตอนที่ 3: สร้าง Branch สำหรับทำงาน

ย้ายไปยังโฟลเดอร์ที่โคลนมา แล้วสร้าง Branch ใหม่สำหรับงานแก้ไขที่จะทำต่อไป การทำงานในพื้นที่ทำงานเฉพาะโดยไม่ไปยุ่งกับ Branch `main` โดยตรงถือเป็นมารยาทที่ดี การใช้ `checkout -b` จะช่วยให้คุณสร้างและย้ายไปยัง Branch ใหม่ได้ในคราวเดียว

cd ชื่อrepositoryที่forkมา

git checkout -b fix-typo-in-readme

ขั้นตอนที่ 4: แก้ไขโค้ด, `commit` และ `push`

บน PC ของคุณ ให้เปิดไฟล์เช่น `README.md` แล้วแก้ไขคำผิดหรือทำการเปลี่ยนแปลงอื่นๆ แล้วบันทึก เมื่อแก้ไขเสร็จแล้ว ให้บันทึกการเปลี่ยนแปลงด้วยคำสั่ง `add` และ `commit` ตามที่ได้เรียนมา

git add .

git commit -m "Fix a typo in README.md"

สุดท้าย ให้ push commit นี้ไปยัง Remote Repository ของคุณ (อันที่ Fork มา) อย่าลืมระบุชื่อ Branch ที่คุณสร้างขึ้นด้วย

git push origin fix-typo-in-readme

ขั้นตอนที่ 5: สร้าง Pull Request

มาถึงจุดไคลแม็กซ์แล้ว เปิดหน้า Repository ที่คุณ Fork มาในเบราว์เซอร์อีกครั้ง คุณจะเห็นการแจ้งเตือนสีเหลืองว่า "'fix-typo-in-readme' had recent pushes" และปุ่มสีเขียว "Compare & pull request" ให้คลิกที่ปุ่มนี้

[ภาพ: ปุ่ม "Compare & pull request" ที่แสดงบน Repository ที่ Fork มา]

คุณจะถูกย้ายไปยังหน้า "Open a pull request" ที่นี่คือที่ที่คุณจะสร้างจดหมายขอให้โปรเจกต์ต้นฉบับนำการเปลี่ยนแปลงของคุณไปรวมไว้

[ภาพ: หน้าจอสร้าง Pull Request โดยเน้นที่ช่องใส่หัวข้อและคำอธิบาย]

ตรวจสอบเนื้อหาแล้วกดปุ่ม "Create pull request" ข้อเสนอของคุณจะถูกส่งไปยังผู้ดูแลของ Repository ต้นฉบับ

ขั้นตอนที่ 6: รอการรีวิวและ Merge

เมื่อสร้าง Pull Request แล้ว ผู้ดูแลของ Repository ต้นฉบับจะได้รับการแจ้งเตือน ผู้ดูแลจะตรวจสอบโค้ดของคุณ อาจจะแสดงความคิดเห็นหรือขอให้แก้ไขเพิ่มเติม หลังจากพูดคุยกันแล้ว หากไม่มีปัญหากับการเปลี่ยนแปลง ผู้ดูแลจะทำการ Merge (รวม) Pull Request ของคุณ

[ภาพ: Pull Request ของคุณแสดงสถานะเป็น "Merged" และมีไอคอนสีม่วง]

ทันทีที่ถูก Merge การแก้ไขของคุณก็จะกลายเป็นส่วนหนึ่งของโปรเจกต์อย่างเป็นทางการ ยินดีด้วย! นี่คือการมีส่วนร่วมในโอเพนซอร์ส