เพื่อความเป็นระเบียบ เราเลยจัด folder ใน svn ใหม่ (ขอโทดเพื่อนๆอย่างแรง - - ! ที่ทำให้ต้อง update กันมากมายขนาดนี้)
ต่อไปจะเป็นการใช้งาน Branch และ Merge ซึ่งเป็นสิ่งที่มีประโยชน์มากๆของ svn
และเนื่องจากเราจะเริ่ม code กันแล้ว เราเลยไปหาข้อมูลเพื่อการใช้ feature ของ svn อย่างเต็มประสิทธิภาพมา 55+
ถ้าอย่างงั้นก็ขออนุญาตตั้งกฎการใช้ svn ตามนี้เลยละกัน เสียเวลาอ่านกานนิดนึงนะ จะได้ไม่มีปัญหาการ up ทับกันไปกันมาทีหลังนะจิ๊
ถ้าอย่างงั้นก็ขออนุญาตตั้งกฎการใช้ svn ตามนี้เลยละกัน เสียเวลาอ่านกานนิดนึงนะ จะได้ไม่มีปัญหาการ up ทับกันไปกันมาทีหลังนะจิ๊
- โฟลเดอร์ Mail Order System ไว้ เอาไว้เก็บ source code ทั้งหมดทั้งปวงที่จะเอาไปทำเป็นระบบตอนสุดท้ายนะ
- โฟลเดอร์ Analysis & Design Documents เก็บ doc อื่นๆที่ใช้ในขั้นตอนการ design พยายามเก็บเป็นโฟลเดอร์ละเรื่องจะได้ไม่ปนกันนะจ๊ะ
- โฟลเดอร์ ส่งงานครั้งที่... เก็บงานที่เสร็จเรียบร้อยพร้อมส่งเท่านั้น
ต่อไปจะเป็นการใช้งาน Branch และ Merge ซึ่งเป็นสิ่งที่มีประโยชน์มากๆของ svn
การจัด repository
โฟลเดอร์ Mail Order System และ โฟลเดอร์ Analysis & Design Documents น่าจะวุ่นวายสุด เลยจะจัดเป็น 3 โฟลเดอร์ คือ trunk, branch, tag
ห้าม up ไฟล์ไว้นอก 3 โฟลเดอร์นี้เด็ดขาด!
ห้าม up ไฟล์ไว้นอก 3 โฟลเดอร์นี้เด็ดขาด!
1. trunk ใช้เก็บ version ล่าสุดของไฟล์นั้น ที่ใช้งานได้ เพราะฉะนั้นการแก้ไขที่จะทำให้ code run ไม่ได้ชั่วคราว ไม่ควรทำในโฟลเดอร์นี้
2. branch การแก้ไขที่จะทำให้ code run ไม่ได้ชั่วคราว ก็จะมาเก็บในนี้แหละ เช่น เวลาที่ต้องแก้ code ในหลายๆไฟล์ ซึ่งไฟล์พวกนั้นคนอื่นอาจต้องใช้ด้วย
โดย branch จะเป็นการ copy ไฟล์จาก trunk มาไว้ข้างนอกก่อน แล้วค่อยแก้ พอแก้เสร็จเรียบร้อย จึงรวมกลับไปใน trunk ใหม่
โดย branch จะเป็นการ copy ไฟล์จาก trunk มาไว้ข้างนอกก่อน แล้วค่อยแก้ พอแก้เสร็จเรียบร้อย จึงรวมกลับไปใน trunk ใหม่
วิธีสร้าง branch
- คลิกขวาที่โฟลเดอร์ที่ต้องการแก้ (ขอเรียกว่า โฟลเดอร์หลัก ละกัน) >> เลือก branch/tag
- ตรง To URL: ใส่โฟลเดอร์ใหม่ เช่น ..Branch/แก้ไขโฟลเดอร์หลัก เป็นต้น (ไม่ต้องสร้างโฟลเดอร์ใหม่เอาไว้ก่อน)
- ใส่ log ว่า ตอนที่สร้าง โฟลเดอร์หลัก มี revision ที่เท่าไหร่ **ตรงนี้สำคัญมาก เพราะจะใช้ตอน merge อย่าลืมใส่นะ
- เข้าไป update โฟลเดอร์ Branch ก็จะได้โฟลเดอร์ที่ copy มาจากโฟลเดอร์หลัก เวลาแก้อะไรก็แก้ในนี้ แล้วค่อย merge รวมกลับไปใน folder หลักทีหลัง
3. tag ใช้เก็บ snapshot ของโฟลเดอร์ที่ต้องการ เช่น เก็บเป็น version ต่างๆ ที่สามารถ run ได้ แต่ยังมี feature ไม่สมบูรณ์ เป็นต้น
วิธีสร้าง tag
ทำเหมือน branch เลย แต่ tag มักจะไม่มีการ merge รวมกลับไปอีกแล้ว
การ merge
ใช้ตอนทำ branch เสร็จแล้ว ตรวจสอบแล้วว่าใช้ได้ และต้องการรวมเข้ากับ trunk
แต่ก็อย่างที่เคยเห็นๆกัน svn จะจัดการ merge ให้เราได้เฉพาะ text file หรือพวก source code เท่านั้น นอกนั้นก็ต้องใช้วิจารณญาณ + แรงมือของเราเองเนี่ยแหละ
แต่ก็อย่างที่เคยเห็นๆกัน svn จะจัดการ merge ให้เราได้เฉพาะ text file หรือพวก source code เท่านั้น นอกนั้นก็ต้องใช้วิจารณญาณ + แรงมือของเราเองเนี่ยแหละ
สมมุติว่า เราสร้างระบบจนถึง revision 3 จากนั้นก็ทำ branch ออกมา เพื่อแก้ไขอะไรบางอย่าง ซึ่งระหว่างนั้น ก็มีคนไป commit trunk จนกลายเป็น rev 5
เราทำ branch และทดสอบเรียบร้อยใน rev 7 และต้องการนำส่วนที่เราแก้ใน branch นี้ รวมเข้ากับ trunk
เราทำ branch และทดสอบเรียบร้อยใน rev 7 และต้องการนำส่วนที่เราแก้ใน branch นี้ รวมเข้ากับ trunk
วิธีการรวม มี 2 ขั้นตอน
- รวม trunk เข้าใน branchเนื่องจากเราเริ่ม branch ตอน rev 3 ดังนั้น สิ่งที่คนอื่นแก้ใน rev 4-5 จะยังไม่รวมอยู่ใน rev 7 ที่เรามี เราจึงต้องเอาส่วนที่มีการแก้ใน trunk ระหว่าง rev 3 กับ 5 มารวมเข้ากับ rev 7 ก่อน โดยเมื่อรวมเสร็จ จะกลายเป็น rev 8 เก็บใน branch ส่วน trunk จะไม่มีการเปลี่ยนแปลงใดๆ
วิธีรวม trunk เข้าใน branch- คลิกขวาที่โฟลเดอร์ branch ที่ต้องการจะรวม >> เลือก merge
- เลือก merge two different trees >> next
- เลือก From URL เป็นโฟลเดอร์ trunk โดยเลือก revision เป็น revision ที่เริ่ม branch (ตามตัวอย่างคือ rev 3) นี่แหละคือเหตุผลที่บอกว่า จะต้องใส่ rev ที่เริ่ม branch ไว้ใน log ตอนสร้าง branch ด้วย
- เลือก To URL เป็นโฟลเดอร์ trunk เหมือนกัน โดยเลือก revision เป็น head revision (คือ rev ปัจจุบัน)
- อย่าลืมใส่ log ไว้ด้วยว่า head revision ของ trunk ณ ตอน merge เป็น rev ที่เท่าไหร่
- next >> merge
- ไฟล์ที่ได้จากการ merge ถือเป็นการแก้ไขบนเครื่องเราคนเดียว ถ้ามี conflict ก็จัดการแก้ให้เรียบร้อย หรือถ้ามีปัญหาก็ revert กลับได้เสมอ
- ถ้าไม่มีอะไรก็ commit โฟลเดอร์ branch ได้เรย
- รวม branch ที่ได้ กลับเข้าไปใน trunk
หลังรวมขั้นแรกแล้ว เราควรตรวจสอบก่อนว่าใช้ได้มั๊ย ถ้าใช้ได้ก็เริ่มขั้นต่อไป คือ เอาผลจากการรวมนี้ไปไว้ใน trunk อีกที
วิธีรวม branch เข้ากับ trunk
ตรวจให้ดีก่อน ว่า head revision ของ trunk ตรงกับ head revision ที่ใส่ไว้ใน log ถึงจะทำการ merge ลงใน trunk ได้
ถ้า rev ไม่ตรง ก็กลับไปทำข้อ 1 ใหม่ เพื่อปรับให้ branch เป็นอันใหม่ล่าสุดก่อน ถึงจะเอาไปใส่ใน trunk ได้ ถ้าตรงแล้วก็ตามนี้นะจิ๊- คลิกขวาที่โฟลเดอร์ trunk >> เลือก merge
- เลือก merge two different trees >> next
- เลือก From URL เป็นโฟลเดอร์ trunk โดยเลือก revision เป็น head revision
- เลือก To URL เป็นโฟลเดอร์ branch โดยเลือก revision เป็น head revision
- ควรใส่ log ไว้ด้วยว่า ได้เพิ่ม feature อะไรเข้ามาใน trunk บ้าง หรือ ใส่ไฟล์อะไรเพิ่มมาบ้าง
- next >> merge
- เหมือนเดิม commit โฟลเดอร์ trunk
คำแนะนำ
ถ้าคิดว่าตอน merge ใช้เวลาไม่นาน และไม่อยากให้คนอื่นมา commit โฟลเดอร์ trunk ขณะที่เรากำลัง merge (ทำให้ revision เปลี่ยนไป และทำให้เราต้องกลับไปทำข้อ 1 อีกรอบ) จะทำแบบนี้ก็ได้
get lock โฟลเดอร์ trunk ก่อนเริ่มทำขั้นที่ 1 จะทำให้ไม่มีใคร commit อะไรใน trunk ได้นอกจากเราคนเดียว
อย่าลืม unlock หลังเสร็จขั้นตอนที่ 2 ด้วย ไม่งั้นคนอื่นจาใช้ไม่ได้นะ
การ merge ค่อนข้างสำคัญมากที่ต้องทำให้ถูกวิธี ไม่งั้นโฟลเดอร์อาจจะเจ๊งได้ ถ้ามีปัญหาเกิดขึ้น อย่าลืม...REVERT ช่วยทั่นได้!!
หลังการ merge มักจะลบ branch ทิ้งไปเลย เพราะ feature ทั้งหลาย ลงไปอยู่ใน trunk เรียบร้อยแล้ว
เครดิต :: duckling
Comments
Post a Comment