Thursday, March 20, 2008

การใช้ Git กับโครงการ Orangegears

ช่วงนี้ผมกำลังเริ่ม contribute ให้กับ project Orangegears ซึ่งเป็นระบบ ERP ที่ fork มาจาก Ofbiz
โดยมีเหล่าน้องๆฝึกงาน (สองคน) มาช่วยกันรุมยำ source code

ประเด็นปัญหาแรกที่ต้อง solve ก็คือจะจัดการกับ version control อย่างไร
โดยมีประเด็นที่ต้องคำนึงถึงดังนี้
  • code ของ orangegears อยู่บน sourceforge.net และมีขนาดใหญ่
  • เนื่องจากยังเป็นมือใหม่ กับ ERP framework ตัวนี้, รูปแบบการแก้ไข orangegears จะออกไปในทางลองผิดลองถูก ซึ่งหมายความว่าจะมี throw away code จำนวนมาก
  • ต่อเนื่องจากข้อข้างบน การลองผิดลองถูกจะทำให้เกิดการ branch จำนวนมาก
  • code ที่น้องๆช่วยกันเขียน อาจจะมีปัญหาเรื่อง quality ของ code เช่นมี noise ปนอยู่จำนวนหนึ่ง (น้องใหม่ส่วนใหญ่ มักจะเขียน code แบบ แปะๆ อันไหนใช้ไม่ได้ก็ comment เอาแทนที่จะลบทิ้งไปเลย)
  • เนื่องจากเป็นระบบที่ไม่ชำนาญ ก็จะมีประเด็นเรื่องแก้ไขบ่อย, commit ถี่และบ่อย ซึ่งการ commit บ่อยๆ(แบบไม่ควรเกิด) ก็ถือเป็น noise ใน repository log อย่างหนึ่ง

เมื่อคิดสะระตะแล้ว solution ที่ผมเลือกใช้ก็คือ Git เนื่องจากมันตอบโจทย์เหล่านี้ได้ดี
  • distributed development ทำให้ผมเป็นอิสระจาก sourceforge.net, ไม่กิน bandwidth และไม่เสียเวลารอ
  • large file sets, ถึงจะไม่เท่ากับ linux kernel แต่ด้วยจำนวน 8000 กว่า file ก็ถือว่าไม่เบาเหมือนกัน
  • trial branches, git มีจุดเด่นด้านนี้เป็นพิเศษ
  • ผมสามารถยุบ patch หรือกรอง patch ได้ ทำให้ผมสามารถตัด patch ที่ไม่สำคัญทิ้งได้ หรือรวมทั้งยุบหลายๆ commit เป็น commit เดียวได้ (ลด noise)

แนวทางที่วางแผนไว้ก็คือ



  • มี working copy เพียงอันเดียวที่ไว้คอย sync กับ sourceforge subversion repository
  • developer ที่เหลือจะ clone ออกจาก master code ชุดนี้
  • การแก้ไข code ใดๆ จะต้องทำผ่าน branch ทั้งหมด
  • เมื่อน้องแก้ไข branch ใดๆจนพอใจแล้ว ก็จะแจ้งมาที่ผม ให้ทำการ pull มาที่ working copy หลัก เพื่อที่จะทดสอบ
  • เมื่อผลการทดสอบเป็นที่น่าพอใจ ก็จะทำการ merge เข้า master และ commit ขึ้น subversion

สถานะปัจจุบัน ตอนนี้ก็ทดลองทำอยู่ 2 branch และกำลังสนุกกับการลองผิดลองถูกกับ workflow และขั้นตอนการ merge อยู่

เท่าที่สัมผัส Git มาระยะหนึ่ง ในตอนแรกเนื่องเราเห็นภาพเพียงบางส่วน ก็จะรู้สึกว่ามัน fragile มาก
การเรียกใช้คำสั่งแต่ละที ดูเหมือนว่า โอกาสจะเกิด error มีสูงมาก
(สมัยทดลองที่ codefest นั้นสุดๆ เกิด error ในอัตรา 80 %)
หลังจากเริ่มใช้มันมากขึ้น มากขึ้น ก็เริ่มสัมผัสถึงความงามบางอย่างของมันแล้ว
ถึงตอนนี้ก็เลยรู้สึกติดและสนุกกับการใช้งาน Git เสียแล้ว

Related link from Roti

1 comment:

Sirn said...

ช่วงนี้รู้สึกอยากลองเล่น Git แต่ยังตกหลุมรักกับ Mercurial อยู่ ผมเข้าใจว่า DVCS นี่ clone = branch กันหมด เลยอยากรู้ข้อแตกต่างชัดๆ ระหว่าง Mercurial กับ Git นี่ นอกเหนือจากการที่ Git เน้นมองเนื้อหาของไฟล์ในการ commit แล้ว มีอะไรอีกหรือเปล่าครับ