r20 - 09 Jun 2008 - 18:43:46 - CharinyaKlakhangYou are here: SETEC Wiki >  Knowledge Web  > SoftwareEngineeringCategory > Agile > SVNForCommomCodeOwnerShip

SVN For Common Code Owner Ship

เนื้อหาทั้งหมด

Subversion (SVN) คืออะไร


  • Subversion

    เป็นระบบ ควบคุม version ของ source code อย่างหนึ่ง ที่ เราสามารถมี version ของ code เช่น version นี้ สามารถทำงานบางอย่างได้แล้ว เป็นต้น และเมื่อเราแก้ๆ แล้วหากทำให้บางอย่างพัง เราก็สามารถ reverse กลับไปใน version ที่ยัง work อยู่ได้และ ระบบที่ สามารถอำนวยความสะดวก เวลาทำงาน
    ใน Project เขียน code กันหลายๆ คน ระบบ Subversion จะสามารถรวม code ของทุกคน เข้าอย่างอัตโนมัติ ทำให้ทุกคนมี code ที่ update อยู่เสมอ โดยระบบจะเป็นระบบแบบ Client - Server โดยที่ server จะมีโปรแกรม Subversion Server ลงไว้ ซึ่งจะเปิดให้บริการ Subversion และ เก็บ source code ทุกอย่างไว้
    รวมทั้ง track การเปลี่ยนแปลงทั้งหลาย ที่เครื่องของคนทำงานจะมีโปรแกรม Client ของ SVN ติดตั้งอยู่

การติดตั้งโปรแกรมเพื่อใช้งาน SVN


โครงสร้างของ SVN


  • Tag

    การแยกไฟล์ที่ stable ที่เกิดจากการพัฒนาในแต่ละ Iteration ไว้ต่างหาก และทำการกำหนดเป็น version ที่ถูกพัฒนาขึ้นในแต่ละครั้ง
    เช่น Iteration 1 ไฟล์ที่พัฒนาจน stable แล้วใน Iteration นี้ถูกกำหนดให้เป็น Version 1.0

  • Branch

    เป็นส่วนที่เกิดจาก methodology ที่ใช้พัฒนา software ในปัจจุบัน ใช้เทคนิคแบบ Agile ในการพัฒนา ซึ่งพอถึงจุดหนึ่ง มันจะเกิด refactor ขึ้น ทำให้หลีกเลี่ยงไม่ได้ที่จะต้องทำ branches เพื่อแยกไป refactor ต่างหาก (แยกไปลองผิดลองถูกต่างหาก จะได้ไม่กระทบไฟล์หลักที่ถูกแยกเป็น Version ต่างๆ และไฟล์ที่ใช้ทำงานร่วมกันที่เก็บอยู่ใน Trunk)

  • Trunk

    เป็นส่วนที่เน้นการพัฒนาเป็นหลัก เพราะเป็นส่วนเก็บไฟล์ที่ทุกคนใช้ทำงาน และ Commit แก้ไขไฟล์บน SVN server ร่วมกัน เรื่อง bug ค่อยทำการแก้ไขทีหลัง
    ไฟล์ไม่มีความสเถียรมากนัก เพราะมีการแก้ไขหรืออาจเกิด bug ตลอดเวลา

Operation หลักของ SVN


  • Check out

    check out ใช้ตอนเมื่อ เรายังไม่มีไฟล์ที่ทำงานอยู่ และเราต้องการจะเอาไฟล์จาก server ลงมาที่เครื่อง

  • Update

    Update Fileใช้เมื่อ ไฟล์บนเครื่องเรา อยู่ในระบบ Svn แล้ว และต้องการ ทำให้ไฟล์บนเครื่องเรา เป็นไฟล์ที่มีความสมบูรณ์ เหมือนกับไฟล์ที่อยู่ในเครื่อง server
    _
    NOTE : ต้องทำก่อนเริ่มทำงานเสมอ การ update ไม่ทำให้ code ที่เราเขียน โดนทับ หรือ หายอย่างแน่นอน

  • Commit

    Commit ใช้เมื่อเราแก้ไข เพิ่ม หรือ ลบ ไฟล์ จาก svn บนเครื่อง และต้องการ submit ให้ขึ้นไปเป็นไฟล์ที่ update บน server
    แต่หากเราไม่ได้ update ก่อนการแก้ไข เมื่อเราจะ commit ไฟล์ ถ้าเกิดมีไฟล์ที่เพื่อนแก้ และใหม่กว่า copy บนเครื่อง เราจะ commit ไม่ได้
    มันจะฟ้องว่า your copy is out of date แต่ เราสามารถ update ของเพื่อนลงมา เพื่อให้มัน merge กันได้ โดยที่ code ของเราจะไม่มีทางหายไปไหน
    (แต่อาจจะต้องเจออาการ conflict ซึ่งจะต้องมาตามแก้ สู้ update แต่แรก ก่อนที่เราจะเริ่มทำงานเสียดีกว่า)

  • Add

    add ทำได้สองวิธี คือ
    1. ทำตอน commit โดยติ๊กเลือกไฟล์ ที่จะ add เข้าไป
    2. คลิ๊กขวา เลือก add ที่ไฟล์นั้น

  • Delete

    คลิ๊กขวาที่ไฟล์ที่ต้องการลบ แล้วเลือก delete
    ถ้า delete บน window มันจะไม่ได้ลบออกจาก server เมื่อ update มันก็จะลงมาใหม่
    แต่หากแค่ต้องการ เอาออกจาก svn ใหคลิ๊กขวาที่ไฟล์ที่ต้องการลบ แล้วเลือก delete
    แล้วทำการ Commit เพื่อลบ ไฟล์จาก SVN server

  • Revert

    เราสามารถย้อนกลับไป version ที่ work ได้ แม้เราจะ modified ไปแล้ว ก็ตาม
    เป็นวิธีเดียว ที่เราสามารถ ทำให้ code ที่เราแก้ หรือ เพิ่ม หายไปได้

  • Conflict

    Conflict จะเกิดขึ้นเมื่อ มีการแก้ไขไฟล์ เดียวกัน โดยคนสองคน ในส่วนของ Code เดียวกันและตัว svn จะ merge ให้ไม่ถูก
    ก็จะเกิดการ Conflict โดยจะมี เครื่องหมายสามเหลี่ยม สีเหลือง มีตกใจอยู่ตรงกลาง และมีไฟล์ เพิ่มขึ้นมาอีก 2 ไฟล์
    คือ ไฟล์ของเรา ( *.mine )
    และไฟล์บน server ( *.r$number เช่น *.r88 )
    โดยไฟล์ ต้นฉบับ ถ้าเป็นไฟล์ text เช่น source code จะถูก merge ไว้ ในลักษณะ อย่างนี้
    _
    >>>>> mine
    code ที่เราเขียน
    >>>>>
    _
    >>>>> r88
    code ที่เพื่อนเขียน
    >>>>>
    _
    ให้แก้ให้เรียบร้อยแล้วใช้
    Team->Mark As Resolved ที่ไฟล์นั้น
    การ Resolve จะเป็นการลบไฟล์ *.mine, *.r88 ออก
    ดังนั้น ถ้าเราต้องการ ใช้ไฟล์ของเรา หรือไฟล์ของเพื่อน ก็ให้เปลี่ยนชื่อ *.mine หรือ *.r88 เป็น ชื่อไฟล์ ต้นฉบับ แล้ว resolve ซึ่งก็จะให้ผลเหมือนกัน
    หรือเราจะลบไฟล์ทั้งหมดออก ให้เหลือแต่ต้นฉบับ ก็จะเป็นการ resolve เป็นที่เรียบร้อย

Operation อื่นๆของ SVN


  • History

    เราสามารถกลับไปดูไฟล์ที่เราได้ Commit ไปเก็บไว้ที่ SVN server ได้ว่าเราแก้ไขหรือปรับเปลี่ยนส่วนใดของ code ไปบ้างแล้ว
    โดยสามารถดู code history ได้ ใน แต่ละ Revision และดูจาก Comment ที่เรา Comment ไฟล์ แต่ละไฟล์ที่เราได้ Commit ไปยัง SVN server
    และเรายังสามารถ Revert ไปยัง Revision ที่เราต้องการได้
  • Compare

    ในกรณีที่เกิดการ Conflict หรือเวลาที่เราดู History แล้วต้องการเปรียบเทียบความแตกต่างของ Code หรือโครงสร้างภายในที่แตกต่างกัน
    เราก็สามารถทำการ Compare เปรียบเที่ยบ file ได้ในแต่ละ Revision ที่ถูกเก็บอยู่ใน SVN server ทำให้แก้ไขไฟล์ที่เราต้องการได้
    ในขณะที่กำลัง Compare ไฟล์ไปพร้อมๆ กัน ทำให้ลดความผิดพลาดและสะดวกในการแก้ไข code

ข้อดีและปัญหาที่พบจากการใช้งาน SVN

  • จากการได้ทำงาน โดยใช้ SVN ในการจัดการไฟล์ข้อมูลในการเขียน code จากการทำงานส่วนใหญ่จะพบแต่ข้อดี เพราะ ทำให้เราบริหารจัดการไฟล์ต่างๆ ได้อย่างสะดวกและข้อมูลเป็นข้อมูลปัจจุบันเสมอ
    พบข้อเสียจาก SVN น้อยมาก ถ้ามีเกิดความผิดพลาดส่วนใหญ่ก็จะเกิดจากตัวบุคคลเองมากกว่า เช่น การ comment ไฟล์ที่ไม่สื่อความหมายชัดเจน หรือ
    ปัญหาจาก server เช่น server ที่เก็บไฟล์มีปัญหาทำให้ไม่สามารถ Commit ข้อมูลไปยัง SVN server ได้ เป็นต้น

ข้อดีของของการใช้งาน SVN


  • svn ทำทุก operation เป็น atomic คือ ทุกครั้งที่มีการเปลี่ยนแปลงที่เกิดขึ้นในเครื่อง local ก็จะตรวจสอบความแตกต่างที่มีอยู่ใน SVN server
    และจะทำการแก้ไขไฟล์บน SVN server เมื่อมีการ Commit ไฟล์
  • ทำให้เราสามารถดูแลจัดการกับไฟล์ต่างๆได้ง่ายขึ้นโดยการทำเป็น Version ย่อยๆ หรือเรียกว่า Revision
  • ถ้าทำอะไรผิดพลาด เช่น ลบไฟล์ แก้ผิดไฟล์ หรือเขียนแล้วทำโค้ดพัง เราสามารถย้อนเวลากลับไปในตำแหน่งของ Revision ใดๆก็ได้
  • การทำงานหลายๆคนร่วมกัน จะสามารถรวมไฟล์ต่างๆ ที่อาจเขียนหลายๆคน แก้หลายๆคน เข้าด้วยกันได้ ทำให้ทุกคนมีไฟล์ที่ Update เป็นปัจจุบัน ที่อยู่บน SVN server อยู่ตลอดเวลา
  • ไฟล์ต้นฉบับจะถูกเก็บไว้ใน Server ทำให้ไม่หาย หรือถูกลบได้ง่ายๆ
  • ระบบนี้ได้นำมาใช้เพื่อการทำงานหลายๆประเภท เช่น Source Code , เอกสาร , Web page หรือจะเป็นไฟล์ทั่วๆไปก็ได้
  • ระบบของ SVN จะแบ่งเป็น Client - Server โดยที่ Server จะเก็บไฟล์แบ่งเป็นหมวดหมู่ไว้ เรียกว่า Repository แล้วส่วนที่ใช้เป็น Interface สำหรับผู้ใช้ก็มีอยู่หลายตัวด้วยกัน

ปัญหาที่พบจากการใช้งาน SVN


  • ถ้า server ที่ทำหน้าที่เป็น SVN server มีปัญหา เช่น ล่ม แล้วข้อมูลใน server ไม่มีการ backup ไว้ ถ้าเกิดปัญหาขึ้นจะทำให้ไม่สามารถจัดการไฟล์ข้อมูลได้เลย
  • การ Commit ไฟล์ขึ้นไปบน SVN server ถ้ามีการ Comment ไฟล์ไม่ดี ไม่สื่อความหมายชัดเจน ว่าทำอะไรหรือแก้ไขส่วนไหนไปบ้าง
    อาจจะส่งผลในการกลับมาแก้ไขหรือตรวจสอบความผิดพลาดที่อาจเกิดขึ้นได้ภายหลัง ทำได้ยากและเสียเวลาในการหาข้อผิดพลาด
  • svn ก็คือ มันไม่มี feature ที่ช่วยจำว่า เรา merge อะไรไปแล้วบ้าง ดังนั้นจึงมีโอกาสที่เราจะ merge ซ้ำซ้อนลงไปได้
    ทำให้ในการ commit การ merge แต่ละครั้ง ต้องเขียน log message ให้ชัดเจนว่า เป็นการ merge จาก revision ไหนถึงไหน
    เพื่อจะได้ใช้เป็นข้อมูลเตือนความจำ

จัดทำโดย

  • นายชีวา รับศรีสุขสกุล (มหาวิทยาลัยหอการค้าไทย)
  • นายศุภชัย สัญญากิจ (มหาวิทยาลัยกรุงเทพ)

toggleopenShow attachmentstogglecloseHide attachments
Topic attachments
I Attachment Action Size Date Who Comment
jpgJPG sv1.JPG manage 51.3 K 12 May 2008 - 22:02 SupachaiSunyagid  
jpgJPG sv2.JPG manage 50.2 K 12 May 2008 - 22:03 SupachaiSunyagid  
jpgJPG sv3.JPG manage 40.2 K 12 May 2008 - 22:03 SupachaiSunyagid  
jpgJPG sv5.JPG manage 51.5 K 12 May 2008 - 22:03 SupachaiSunyagid  
jpgJPG sv7.JPG manage 23.1 K 12 May 2008 - 22:03 SupachaiSunyagid  
jpgJPG sv8.JPG manage 53.6 K 12 May 2008 - 22:03 SupachaiSunyagid  
jpgJPG sv9.JPG manage 30.0 K 12 May 2008 - 22:04 SupachaiSunyagid  
jpgJPG sv15.JPG manage 30.5 K 12 May 2008 - 22:04 SupachaiSunyagid  
jpgJPG sv16.JPG manage 24.9 K 12 May 2008 - 22:04 SupachaiSunyagid  
jpgJPG sv17.JPG manage 22.8 K 12 May 2008 - 22:05 SupachaiSunyagid  
jpgJPG sv18.JPG manage 65.0 K 12 May 2008 - 22:05 SupachaiSunyagid  
jpgJPG sv20.JPG manage 67.2 K 12 May 2008 - 22:06 SupachaiSunyagid  
jpgJPG sv21.JPG manage 50.7 K 12 May 2008 - 22:06 SupachaiSunyagid  
Edit | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r20 < r19 < r18 < r17 < r16 | More topic actions
 
Powered by SETEC Wiki
Copyright ©2010 by National Electronics and Computer Technology Center, NECTEC.
Ideas, requests, problems regarding SETEC Wiki? Send feedback