ผลต่างระหว่างรุ่นของ "01204223/github-pr"
ไปยังการนำทาง
ไปยังการค้นหา
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
| แถว 4: | แถว 4: | ||
== รายละเอียดกระบวนการคร่าวๆ == | == รายละเอียดกระบวนการคร่าวๆ == | ||
| + | ทบทวนแนวคิดพื้นฐานก่อน | ||
| + | |||
| + | * '''merge''' เวลาที่เรามี history สองสาย (สอง head) แล้วต้องการนำมารวมเรา เราจะ merge, ในกระบวนการ merge อาจเกิด '''conflict''' ขึ้นได้ ซึ่งเราต้อง '''resolve''' ก่อน ถึงจะจัดเก็บได้ (commit) | ||
| + | * git เป็น distributed version control แต่ละ repository จะเป็นหน่วยย่อยที่สมบูรณ์ในตัวเอง การจะแลกเปลี่ยน history กันจะดำเนินโดยการส่ง changes ไปมา มีขั้นตอนสองขั้นตอนหลัก ๆ เรียกว่า '''pull''' (นำการเปลี่ยนแปลงมา) กับ '''push''' (ส่งการเปลี่ยนแปลงไปให้) | ||
| + | * หมายเหตุ: ขั้นตอนย่อยของ '''pull''' คือการ '''fetch''' แล้วตามด้วย '''merge''' หลายคนไม่ชอบใช้ pull | ||
| + | * ของใน git โดยมากจะไม่มีทางหาย ถ้าทำพลาดไป โดยมากจะสามารถกู้ทุกอย่างกลับมาได้ ยกเว้นถ้ามีการสั่ง <tt>--force</tt> ดังนั้น อย่า force ถ้าไม่จำเป็น | ||
| + | |||
| + | กิจกรรมที่เราจะทำเป็นดังนี้ | ||
| + | |||
| + | * เราจะ fork repository กลางของแลบมาเป็น repository ของตนเอง | ||
| + | * จากนั้นจะ clone repository ของเราเอง มาที่เครื่อง local | ||
| + | * รอบที่ 1: | ||
| + | ** ผมจะแก้ไฟล์ที่ repository กลาง และให้แต่ละคน sync (pull) มาที่ repository ของตนเองใน github | ||
| + | ** เราจะ pull changes มาที่ local | ||
| + | ** จะเพิ่มไฟล์ และ push กลับไปที่ github ของแต่ละคน | ||
| + | ** แล้วจะให้แต่ละคนทำ pull request (PR) จาก repo github กลับมาที่ repository กลาง (รอบนี้จะ accept PR ได้แบบไม่มี conflict) | ||
| + | * รอบที่ 2: | ||
| + | ** pull changes ทั้งหมดมาที่ local | ||
| + | ** ให้แก้ไฟล์ของแต่ละกลุ่ม | ||
| + | ** push กลับไป repo ตนเอง | ||
| + | ** ทำ pull request (PR) อีกรอบ และแก้ conflict (หัวแตก) | ||
== fork == | == fork == | ||
รุ่นแก้ไขเมื่อ 01:22, 19 ธันวาคม 2568
- เป็นส่วนหนึ่งของวิชา 01204223
สำหรับคนที่เรียนในคาบ ให้รอทำกิจกรรมนี้พร้อม ๆ กัน ผู้สอนจะประกาศเพิ่มเติมในคาบ
เนื้อหา
รายละเอียดกระบวนการคร่าวๆ
ทบทวนแนวคิดพื้นฐานก่อน
- merge เวลาที่เรามี history สองสาย (สอง head) แล้วต้องการนำมารวมเรา เราจะ merge, ในกระบวนการ merge อาจเกิด conflict ขึ้นได้ ซึ่งเราต้อง resolve ก่อน ถึงจะจัดเก็บได้ (commit)
- git เป็น distributed version control แต่ละ repository จะเป็นหน่วยย่อยที่สมบูรณ์ในตัวเอง การจะแลกเปลี่ยน history กันจะดำเนินโดยการส่ง changes ไปมา มีขั้นตอนสองขั้นตอนหลัก ๆ เรียกว่า pull (นำการเปลี่ยนแปลงมา) กับ push (ส่งการเปลี่ยนแปลงไปให้)
- หมายเหตุ: ขั้นตอนย่อยของ pull คือการ fetch แล้วตามด้วย merge หลายคนไม่ชอบใช้ pull
- ของใน git โดยมากจะไม่มีทางหาย ถ้าทำพลาดไป โดยมากจะสามารถกู้ทุกอย่างกลับมาได้ ยกเว้นถ้ามีการสั่ง --force ดังนั้น อย่า force ถ้าไม่จำเป็น
กิจกรรมที่เราจะทำเป็นดังนี้
- เราจะ fork repository กลางของแลบมาเป็น repository ของตนเอง
- จากนั้นจะ clone repository ของเราเอง มาที่เครื่อง local
- รอบที่ 1:
- ผมจะแก้ไฟล์ที่ repository กลาง และให้แต่ละคน sync (pull) มาที่ repository ของตนเองใน github
- เราจะ pull changes มาที่ local
- จะเพิ่มไฟล์ และ push กลับไปที่ github ของแต่ละคน
- แล้วจะให้แต่ละคนทำ pull request (PR) จาก repo github กลับมาที่ repository กลาง (รอบนี้จะ accept PR ได้แบบไม่มี conflict)
- รอบที่ 2:
- pull changes ทั้งหมดมาที่ local
- ให้แก้ไฟล์ของแต่ละกลุ่ม
- push กลับไป repo ตนเอง
- ทำ pull request (PR) อีกรอบ และแก้ conflict (หัวแตก)