โดยมีเหล่าน้องๆฝึกงาน (สองคน) มาช่วยกันรุมยำ 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 เสียแล้ว
1 comment:
ช่วงนี้รู้สึกอยากลองเล่น Git แต่ยังตกหลุมรักกับ Mercurial อยู่ ผมเข้าใจว่า DVCS นี่ clone = branch กันหมด เลยอยากรู้ข้อแตกต่างชัดๆ ระหว่าง Mercurial กับ Git นี่ นอกเหนือจากการที่ Git เน้นมองเนื้อหาของไฟล์ในการ commit แล้ว มีอะไรอีกหรือเปล่าครับ
Post a Comment