Skip to main content

วิธีใช้ SVN อย่างถูกต้อง

เพื่อความเป็นระเบียบ เราเลยจัด folder ใน svn ใหม่ (ขอโทดเพื่อนๆอย่างแรง - - ! ที่ทำให้ต้อง update กันมากมายขนาดนี้)
และเนื่องจากเราจะเริ่ม code กันแล้ว เราเลยไปหาข้อมูลเพื่อการใช้ feature ของ svn อย่างเต็มประสิทธิภาพมา 55+
ถ้าอย่างงั้นก็ขออนุญาตตั้งกฎการใช้ 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 โฟลเดอร์นี้เด็ดขาด!
1. trunk ใช้เก็บ version ล่าสุดของไฟล์นั้น ที่ใช้งานได้ เพราะฉะนั้นการแก้ไขที่จะทำให้ code run ไม่ได้ชั่วคราว ไม่ควรทำในโฟลเดอร์นี้
2. branch การแก้ไขที่จะทำให้ code run ไม่ได้ชั่วคราว ก็จะมาเก็บในนี้แหละ เช่น เวลาที่ต้องแก้ code ในหลายๆไฟล์ ซึ่งไฟล์พวกนั้นคนอื่นอาจต้องใช้ด้วย
โดย 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 เท่านั้น นอกนั้นก็ต้องใช้วิจารณญาณ + แรงมือของเราเองเนี่ยแหละ
สมมุติว่า เราสร้างระบบจนถึง revision 3 จากนั้นก็ทำ branch ออกมา เพื่อแก้ไขอะไรบางอย่าง ซึ่งระหว่างนั้น ก็มีคนไป commit trunk จนกลายเป็น rev 5
เราทำ branch และทดสอบเรียบร้อยใน rev 7 และต้องการนำส่วนที่เราแก้ใน branch นี้ รวมเข้ากับ trunk
วิธีการรวม มี 2 ขั้นตอน
  1. รวม 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 ได้เรย
  2. รวม 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
  3. คำแนะนำ 
    ถ้าคิดว่าตอน merge ใช้เวลาไม่นาน และไม่อยากให้คนอื่นมา commit โฟลเดอร์ trunk ขณะที่เรากำลัง merge (ทำให้ revision เปลี่ยนไป และทำให้เราต้องกลับไปทำข้อ 1 อีกรอบ) จะทำแบบนี้ก็ได้
    get lock โฟลเดอร์ trunk ก่อนเริ่มทำขั้นที่ 1 จะทำให้ไม่มีใคร commit อะไรใน trunk ได้นอกจากเราคนเดียว
    อย่าลืม unlock หลังเสร็จขั้นตอนที่ 2 ด้วย ไม่งั้นคนอื่นจาใช้ไม่ได้นะ
การ merge ค่อนข้างสำคัญมากที่ต้องทำให้ถูกวิธี ไม่งั้นโฟลเดอร์อาจจะเจ๊งได้ ถ้ามีปัญหาเกิดขึ้น อย่าลืม...REVERT ช่วยทั่นได้!!
หลังการ merge มักจะลบ branch ทิ้งไปเลย เพราะ feature ทั้งหลาย ลงไปอยู่ใน trunk เรียบร้อยแล้ว

เครดิต :: duckling

Comments

Popular posts from this blog

วิธีการใช้ Subversion (SVN) – Branch และ Merge ใน Subversion

มาต่อจากตอนที่แล้วด้วยเรื่องของ Branch และ Merge ครับ เรื่องนี้เป็นหัวใจของระบบ Version Control เลยนะเนี่ย การจัด Repository มาพูดถึงการจัด Repository ก่อนครับ โดยปกติแล้วเค้าจะจัดกันแบบนี้ RepoRoot --- ProjectA --- ---  trunk --- ---  branches  --- --- --- branchA --- --- --- branchB --- ---  tags --- ---  --- 1.0.0 --- ---  --- 1.1.5 --- ProjectB  ถ้าใช้ TortoiseSVN อยู่ คำว่า “จัด” ที่ผมใช้นีหมายถึงให้เปิด  Repo Browser  ขึ้นมาแล้วสร้าง Structure ตามตัวหนาด้านบนนะครับ ส่วนที่สำคัญคือ trunk, branches, และ tagsซึ่งจริงๆแล้วชื่อพวกนี้ไม่ได้เป็นข้อบังคับหรือว่าอะไรเลยไม่ได้มีความหมายพิเศษต่อการทำงานของ SVN ด้วยแต่ว่าเป็นอะไรที่คนส่วนใหญ่เค้าทำกัน แต่ SVN ก็จะมองเป็นโฟลเดอร์ธรรมดาๆดังนั้นเราจึงควรทำอะไรตามคนส่วนใหญ่ จะได้สื่อสารกันได้ง่ายๆ :) คำว่า trunk และ branches มาจากส่วนประกอบของต้นไม้ คือ ลำต้น และ กิ่ง โดยลำต้น หรือ  trunk ก็จะหมายถึงสายการพัฒนากลางหรือสายพัฒนาหลักและเวอร์ชันล่าสุดของโปรเจกก็มักจะอยู่ที่นี่ถ้าอยากได้ซอ...

ARDUINO UNO – PROGRAMMING WITH A SERIAL PORT (เบิร์นโปรแกรม arduino ผ่านทาง serial port)

ARDUINO UNO – PROGRAMMING WITH A SERIAL PORT เบิร์นโปรแกรม arduino ผ่านทาง serial port 1. ขาที่ใช้ในการต่อสายจะมีทั้งหมด 4 ขาคือ 2,3,4 และ 5 ของ port DB9 โดยขา 2 , 3  จะเป็นขา Data TX,RX ขาที่ 4 จะเป็น DTR ซึ่งจะต้องไปต่อขา reset ของ arduino และขาที่ 5 เป็น Ground 2. เอา C5 และ RN4 ออกจากบร์อด โดยการบัดกรี (ตามรูป) 3. ต่อ RS232 (ตามรูป) ในที่นี้ใช้ IC MAX232 ต่อระหว่าง DB9 และ arduino TX,RX และ Ground ที่ขา DTR ระหว่าง IC MAX232 กับขา Reset ของ arduino ต้องเพิ่ม capacitor 0.1uF เข้าไป 1 ตัว http://blog.solutions-cubed.com/programming-the-arduino-uno-with-a-serial-port

การ Convert Server Linux ไปยัง VMware

VMWare Converting Physical Linux Machine to Virtual