Git fork ต่างกับ Git clone อย่างไร?

เชื่อว่าหลายคนที่ใช้งานกับ git คงมีความสงสัยบ้างว่า git fork และ git clone ต่างกันอย่างไร เพราะในเมื่อผลลัพธ์สุดท้ายแล้วนั้น เราได้ source code มาที่ local workstation ที่เราระบุไว้อยู่ดี ในบทความนี้จะทำการอธิบายให้เห็นภาพคร่าวๆ ว่าโดยแท้จริงแล้วนั้น ทั้งสองมีความแตกต่างกันอย่างไร ในแง่ของ software development

เริ่มกันที่การ fork

http://jlord.us/git-it/challenges/forks_and_clones.html

การ fork คือ การ (clone project) ที่เราต้องการ มาสร้าง repository ใหม่ภายใต้ user ของเรา โดยเราสามารถนำมาต่อยอด เพิ่มฟีจเจอร์ ตามที่เราต้องการได้ ซึ่งกระบวนการนี้เราจะได้ code มาไว้ที่ local workstation

แต่สิ่งที่เป็นจุดประสงค์ของการ fork คือ เมื่อเรามีการ push ฟีจเจอร์ต่างๆที่เราได้เพิ่ม หรือ การแก้ไขต่างๆ จะถูกส่งไปที่ upstream ด้วย ในฐานะ contributor

โดยส่วนมากเราใช้ feature fork ก็ตอนที่เรามีส่วนร่วมในการพัฒนาโปรเจคที่เป็น open source เราไม่ต้องการสร้าง branch ที่โปรเจคหลัก แต่ใช้วิธีการ fork และสร้าง repository เป็นชื่อของเราก่อน และทำการ push กลับไปที่ repository ของเรา และทำการ pull request โปรเจคต้นฉบับเพื่อนำโค๊ดของเราที่ผ่านการรับรองแล้ว เข้าไป

แล้วมันต่างกับ git clone ตรงไหน​?

กระบวนการเหมือนกับ fork แต่ต่างกันตรงที่ เราไม่สามารถ contribute กลับไปยังโปรเจคต้นทางได้เท่านั้นเอง นั่นหมายความว่า history graph ต่างๆ จะเห็นแค่โปรเจคของเราเท่านั้น

เพิ่มเติมสำหรับการ fork

เมื่อไม่นานมานี้มีหัวข้อที่เกี่ยวกับ keyword soft forks vs hard forks ซึ่งไม่ได้เกี่ยวกับโลก github มากนัก แต่ผมขอใช้พื้นที่ตรงนี้อธิบายความหมายคร่าวๆ ไว้เลยแล้วกันครับ

soft forks = เป็นกระบวนการนำ source code มาต่อยอด ดัดแปลง เพิ่มคุณสมบัติต่างๆ แต่ยังอยู่บนขอบเขตที่สามารถทำงานร่วมกับ source code หรือ software เดิมของมันได้

hard forks = เป็นกระบวนการนำ source code มาต่อยอด ดัดแปลง เพิ่มคุณสมบัติต่างๆ จนไม่สามารถนำมาใช้งานร่วมกับ source code หรือ ​software ต้นทางได้อีกเลย

Refs:

http://jlord.us/git-it/challenges/forks_and_clones.html

https://gist.github.com/norsez/3016877

Show your support

Clapping shows how much you appreciated Teerapong Singthong’s story.