Showing posts with label scm. Show all posts
Showing posts with label scm. Show all posts

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