ติดตั้ง SVN Server บน Windows ภายใน 10 นาที

เป็น entry ที่อยู่ใน Draft นานเป็นอันดับต้น ๆ (เกิน 1 ปีแน่  ๆ) แต่จนแล้วจนรอด มันรกหูรกตาเลยเอามาปัดฝุ่นเขียนเพิ่มเติม และเอาออกมาสักทีนึง

ใครไม่รู้ว่า SVN คืออะไรก็ตามไปอ่าน entry เก่าได้ที่นี่

สิ่งที่ต้องเตรียมก่อนในการติดตั้ง (เวลาดาวน์โหลดไม่นับรวมเวลาในการติดตั้ง) คือ SVN Server ซึ่งเป็นตัวจัดการไฟล์ที่เรานำมาใส่ใน Store ของมัน และ SVN Service เป็นโปรแกรมเล็ก ๆ ที่นำ SVN Server เข้าไปอยู่ใน Services list ของ Windows เพื่อให้ตัว SVN Server ทำงานในระดับ Background Application และสามารถสั่งให้ SVN Server ทำการเริ่มการทำงานทั้งแต่เปิดเครื่องผ่าน Services ของ Windows เองได้อย่างง่าย ๆ

SVN Service

Summary : Runs svnserve as a Windows service (requires .NET Framework 1.1)

Category : libraries

License : GNU General Public License

Owner(s) : ricos, sclerose

การติดตั้งทั้งหมดอ้างอิงบน Windows XP Professional

  1. ดาวน์โหลด SVN Server ได้จาก http://subversion.tigris.org/ และดาวน์โหลดตัว SVN Service จาก http://svnservice.tigris.org/ 
  2. ติดตั้ง SVN ลงใน c:\svn\ หรือ directory ใด ๆ ที่ต้องการก็ได้ (ใน entry นี้อ้างอิง c:\svn\ ครับ)
  3. ทดสอบว่ามันจะทำงานได้หรือเปล่าก็เปิด Commnand Prompt(พิมพ์ cmd ที่ Start > Run)
  4. ไปที่ c:\svn\bin (พิมพ์ cd c:\svn\bin)
  5. พิมพ์ svnadmin เพื่อทดสอบดู
    ถ้าขึ้นว่า “svnadmin.exe – Unable To Locate DLL”
    ให้ติดตั้ง Visual C++ 6.0 VCREDIST.exe โดยดาวน์โหลดได้ที่นี่ ถ้าสั่งให้ทำงานแล้วไม่มีปัญหา ก็ทำการทดสอบส่วนของ svnserve.exe เพื่อทดสอบว่าสามารถสั่งให้ SVN Server ทำงานได้หรือไม่
  6. พิมพ์ svnserve -r d:\svndatarootdir
    โดยที่ svndatarootdir คือ directory ที่ใช้สำหรับเก็บ repository ทั้งหมดของ svn ของเรา
  7. ถ้าใช้คำสั่งในข้อ 6 แล้วไม่มีปัญหา ให้ปิด Commnand Prompt แล้วติดตั้ง SVN Service
  8. ทำการเรียก SVNService Administration

    2007-12-08_052919

  9. แล้วทำการตั้งค่าดังนี้

    2007-12-08_051949 
    – ช่อง SVN Binary Path ให้ชี้ไปที่ c:\svn\bin ที่เก็บตัว binary file ของ svnserve.exe
    – ช่อง Repository Path ให้ชี้ไปที่ svndatarootdir หรือที่เก็บ directory ของ repository ทั้งหมด (ในตัวอย่างเป็น d:\svn)
    – Listen Host อันนี้กำหนด IP หรือ Hostname สำหรับใช้ติดต่อเข้ามา ซึ่งถ้าใช้คนเดียวก็กำหนดเป็น localhost ไปครับ
    – Listen Port กำหนด Port ที่เข้าใช้ SVN Server แนะนำให้ใช้ Port 3690 ไปเลยครับผม เพราะเป็น Port มาตรฐานของ SVN Server อยู่แล้ว
    – กด Save และ Close ปิดไปครับ

  10. เข้าไปทั้งค่า Service เพิ่มเติมที่ Service ของ Windows ได้ที่ Administrative Tools (ถ้าหาใน Start ไม่เจอให้ไปที่ Control Panel และไปที่ Administrative Tools ก็ได้)

    2007-12-08_053608

  11. ไปหา Name ที่ชื่อว่า SVNService แล้วดับเบิ้ลคลิ้กเรียก SVNService Properties ขึ้นมา

    2007-12-08_053739

  12. แล้วตั้งค่าที่ Startup type เป็น Automatic เพื่อให้เมื่อเปิดเครื่องมาให้ SVNService ทำงาน แล้วตัว SVNService จะไปเรียก svnserve พร้อมตั้งค่าตามที่เราตั้งไว้ใน SVNService Administration มาให้ แล้วกดปุ่ม Start เพื่อให้ SVNService ทำงาน

    2007-12-08_053928

  13. ถ้าทุกอย่างราบรื่น ตอนนี้เราก็จะได้ SVN Server ขึ้นมาทำงานแล้ว

ต่อไปเป็นส่วนของการทดสอบ และตั้งค่า Repository และ SVN Server ที่เราติดตั้งว่าทำงานปกติหรือไม่

  1. ให้ดาวน์โหลด TortoiseSVN (A Subversion client, implemented as a windows shell extension.) มาติดตั้ง
  2. สร้าง directory ใหม่ใน d:\svn หรือที่เก็บ repository ทั้งหมด

    2007-12-08_054836 

  3. ทำการสร้าง Repository ใหม่

    2007-12-08_054927

  4. แล้วเลือก Native filesystem

    2007-12-08_055011

    2007-12-08_055035

  5. เราจะได้โครงสร้าง Directory ทั้งหมดภายใน d:\svn\test ดังภาพนี้

    2007-12-08_055133

  6. ทดสอบว่า test repository ของเราทำงานได้หรือไม่ก่อน
  7. คลิ้กขวาที่ Desktop แล้วเลือก TortoiseSVN แล้วเลือก Repo-browser

    2007-12-08_054536 

  8. แล้วพิมพ์ URL ดังรูปนี้

    2007-12-08_055623
     

  9. แล้วเราจะได้หน้าต่างของข้อมูลภายใน test repository แบบด้านล่าง (ว่าง ๆ เพราะไม่มีอะไรอยู่ภายใน) ถ้าได้ดังรูปด้านล่างนี้และ expanded ตัว list ออกมาได้โดยไม่มีการแจ้ง error ใด ๆ ถือว่า SVN Server ทำงานได้สมบูรณ์แล้ว

    2007-12-08_055641

สำหรับตอนต่อไป (คราวนี้สัญญาว่าจะลงให้เร็วที่สุดแน่ ๆ) จะเป็นการกำหนดค่า ต่าง ๆ ในการเข้าใช้งานเช่น username/password สำหรับเข้าถึงข้อมูล รวมไปถึงระบบสิทธิ์การเข้าถึงแต่ละ user ที่เข้ามาใช้ด้วยครับ

วันนี้ขอไปนอนก่อนหล่ะครับ ;)

[Update 11/12/2007]

อ้างอิงจาก

ทำความรู้ัจักกับ Revision Control System และ SVN

ทำความรู้จักกับ Revision Control System กันก่อน !

โดย Revision Control System ( หรือเรียกว่า Version control, Source control หรือ (source) code management (SCM) ก็ได้) คือ ซอฟต์แวร์ประยุกต์ที่มีความสามารถในการติดตาม และบันทึกประวัติการเปลี่ยนแปลงที่เกิด ขึ้นเกี่ยวกับการพัฒนาระบบใดระบบหนึ่ง ซึ่งมักจะเกี่ยวกับด้านซอฟต์แวร์ โดยจะบันทึกไว้ตลอดระยะเวลาของการพัฒนาซอฟต์แวร์ พร้อมทั้งระบุเวลาและรวบรวมรูปแบบที่เปลี่ยนแปลงไปทั้งหมดที่เกิดขึ้นตลอดเวลาของการพัฒนาด้วย

โดยหลักการของ Revision Control System ส่วนใหญ่มักใช้ Optimistic Technique ก็คือการให้ผู้ใช้หลาย ๆ คนสามารถเข้าถึง (Check out) (ซึ่งในที่นี้เราจะพูดถึง source code) อันเดียวกัน แต่ละผู้ใช้สามารถแก้ไขไฟล์ต่าง ๆ ที่ดาวน์โหลดมา และสามารถอัพโหลดไฟล์ (Check in/Commit) กลับเข้าสู่ Revision Control System โดยมันจะรับผิดชอบเรื่องการตรวจความขัดแย้งกันของข้อมูล (Conflict) ว่ามีใครแก้ไขไฟล์เดียวกันหรือไม่ ถ้ามีมันก็สามารถแสดงความแตกต่าง (Diff) ระหว่างไฟล์ และ/หรือทำการรวมไฟล์ (Merge) เข้าด้วยกันได้ แต่บางครั้งบาง Revision Control System ก็ใช้หลักการ Pessimistic Technique กล่าวคือเมื่อมีคนใดในทีมพัฒนาได้ทำการเข้าถึงและกำลังนำข้อมูลนั้นไปแก้ไข หรือเปลี่ยนแปลงคนอื่น ๆ ในทีมจะไม่มีสามารถเข้าถึงและทำการเปลี่ยนแปลงข้อมูลชุดนั้นได้จนกว่าคนที่นำไปแก้ไข หรือเปลี่ยนแปลงจะทำการอัพโหลดไฟล์กลับเข้าระบบดังเดิม แต่ระหว่างนั้นสามารถเข้าไปอ่านไฟล์นั้น ๆ ได้อย่างเดียว (แต่บางครั้ง Revision Control System บางยี่ห้อก็ไม่ยินยอมให้อ่านไฟล์ด้วย ขึ้นอยู่กับว่ายี่ห้อไหนจะนิยามการทำงานแบบ Pessimistic Technique เป็นแบบใด)

โดยการเก็บข้อมูลนั้นเราต้องมีการสร้างคลังข้อมูล (Repository) ซึ่งบางครั้งคลังข้อมูลนี้จะรองรับไฟล์แบบ ASCII และ Binary Files หรือไม่ขึ้นอยู่กับซอฟต์แวร์ Revision Control System จะรองรับหรือไม่ด้วย

ตัวอย่างเช่น เราพัฒนาซอฟต์แวร์ 1 ตัว โดยในทีมีคนร่วมพัฒนา 10 คน โดยทุกคนมีสิทธิ์ในการเข้ามาใช้ Revision System Control ได้หมด และในการพัฒนาซอฟต์แวร์ครั้งนี้มีไฟล์การพัฒนาอยู่หลายร้อนไฟล์ เมื่อมี 1 ในทีมพัฒนาชื่อ A ได้นำไฟล์ kernel.c ออกไป (Check out) ทำการแก้ไขเพื่อแก้ไขข้อผิดพลาด (Bug) เมื่อทำการแก้ไขเสร็จแล้วจึงนำกลับเข้าระบบ (Check in/Commit) ซึ่งทำกันเป็นปกติ โดยก่อนทำการนำกลับเข้าระบบมักจะมีการเขียนคำอธิบายไว้เสมอว่ามีการแปลงอะไรไปบ้าง (Log) แต่พอมีการแก้ไข interface.c โดยมีในทีมมีการทำการแก้ไขพร้อม ๆ กัน 2 คน ซึ่งได้แก่คนชื่อ B และชื่อ C โดยทำการนำไฟล์ interface.c มาแก้ไข  เมื่อ C นำไฟล์กลับเข้าระบบ จะทำได้ตามปกติ แต่พอ B จะนำกลับเข้าระบบจะมีการฟ้องว่าไฟล์ที่จะนำเข้าระบบเกิดความขัดแย้งของข้อมูล (Confilt) โดยทั่วไปแล้วจะทำการแสดงความแตกต่างก่อน (Diff) เพื่อดูว่าส่วนที่ตนเองแก้ไขไปนั้นมีส่วนใดที่ตรงกันหรือไม่ ถ้าไม่ตรงกันเลย และไม่มีผลกระทบกับระบบโดยรวม (เช่นแก้ไข function คนละตัวกัน) จะทำการ merge เข้าด้วยกันแล้วทำการนำเข้าระบบตามปกติ แต่ถ้ามีการแก้ไขแล้วเกิดความซ้ำซ้อนกัน มักจะทำการเปลี่ยนแปลงโค้ดโปรแกรมของตัวเองใหม่อีกครั้ง แล้วทำการนำเข้าระบบอีกครั้งนึง แต่บางครั้ง ส่วนใหญ่ถ้าไฟล์ที่เราแก้ไขนั้นเป็นไฟล์ระบบที่มีความหวั่นไหวต่อการเปลี่ยนแปลงก็มันจะ ปิดการนำไฟล์ออกมามากกว่า 1 คน (Lock) ก่อนเสมอ

โดยในบทความนี้เราจะพูดถึง SubVersioN (SVN) ซึ่งเป็น Open Source Application ที่ทำหน้าที่ Revision control ซึ่งได้รับความนิยมสูงมากตัวหนึ่ง โดยถูกสร้างขึ้นมาเพื่อทดแทนการทำงาน Concurrent Versions System (CVS) ที่เก่า, มีความสามารถจำกัด และใช้งานยาก (ผมจะไม่พูดถึง CVS มากนัก เพราะไม่ได้ใช้งานจริง)

ความสามารถคราว ๆ ที่มีมาใน SubVersioN (SVN) มีดังต่อไปนี้

  1. เป็น Revision Control System แบบ Optimistic Technique
  2. การ Check in/Commit จะเป็นแบบ Atomicity แบบเดียวกับ Database Management System (DBMS) ทั่ว ๆ ไป 
    * Atomicity เป็นหนึ่งในกฎ ACID (Atomicity, Consistency, Isolation and Durableness) ของ DBMS ที่รองรับการทำ Concurrency ซึ่งมีคำจำกัดความว่า "กลุ่มคำสั่งงานใดๆ ต้องได้รับการประมวลผลทุกคำสั่งงานทั้งหมดถ้าไม่มีข้อผิดพลาด  หรือไม่ได้รับการประมวลผลเลยถ้ามีข้อผิดพลาดเกิดขึ้น" กล่าวคือผู้ใช้งานไม่ต้องกังวลผลของการดำเนินงานที่ไม่สำเร็จ เนื่องจากส่วนจัดการการดำเนินงานจะทำการยกเลิกหรือทำซ้ำให้ผลลัพธ์ถูกต้อง ตัวอย่างเช่น รายการเบิกเงินจากตู้เบิกเงินอัตโนมัติที่ยังทำไม่สำเร็จเนื่องจากระบบเกิดขัดข้อง ส่วนจัดการการดำเนินงานจะยกเลิกรายงานเบิกเงินครั้งนั้น โดยปรับค่ายอดเงินคงเหลือกลับไปค่าเดิม เสมือนหนึ่งไม่มีการทำรายการเบิกเงินครั้งนั้นเลย เป็นต้น
  3. หมายเลขการเปลี่ยนแปลง (Revision number) เป็นแบบส่วนรวม กล่าวคือใช้หมายเลขการเปลี่ยนแปลงร่วมกันทั้งระบบ เพื่อง่ายต่อการจัดการและกันการสับสนของการเปลี่ยนแปลง
  4. สามารถเปลี่ยนชื่อ, คัดลอก, ตัด และลบไฟล์ โดยมีผลกับหมายเลขการเปลี่ยนแปลงหลักทั้งหมด
  5. รองรับไฟล์แบบ Binary files 
  6. รองรับ Apache HTTP server บนโปรโตคอล WebDAV/DeltaV โดยสามารถนำมาใช้ผ่านโปรโตคอลแบบ TCP/IP ได้ทำให้ลดปัญหาโดน Firewall ในเครือข่ายไม่ยินยอมให้ผ่านได้อีกด้วย โดยใช้ Apache HTTP server โดยผ่าน port 80 ซึ่งมักจะได้รับการยินยอมให้กระทำผ่าน Firewall ได้อยู่แล้ว
  7. รองรับการทำ Branching (Branches) และ Tagging (Tags)
  8. สามารถ Locking ในกรณีที่ต้องการเปลี่ยนแปลงข้อมูลระดับเข้มงวด (เช่นไฟล์ที่มีผลกับระบบมาก ๆ มักทำการ lock ไว้ก่อน เพื่อป้องกันการ merge ไฟล์แล้วมีข้อผิดพลาดใหม่ ๆ หรือข้อมูลนั้นไม่เหมาะให้มีการแก้ไขหลาย ๆ คนในเวลาเดียวกัน)
  9. รองรับ MIME เต็มรูปแบบ
  10. เป็น Open Source licensed ในชื่อ "CollabNet/Tigris.org Apache-style license"

ครั้งต่อไปเราจะมาทำการติดตั้ง SVN Server บน Windows ภายใน 10 นาทีกันนะครับ ;)

อ้างอิง

ตามล่าหา SVN Hosting ….

ตอนนี้ทำ Project Software ที่ต้องทำงานเป็นทีม ตอนนี้ทำงานกันอยู่ 2 คน ปัญหาหลักคือ พอเอา Source Code ที่มีไปลองเขียน แล้วต่างคนต่างแก้ มันกลายเป็นว่า Source Code ที่ทำมันไปคนละทิศคนละทางไป และการจัดการเป็นไปได้ยาก แถมด้วยถ้าแก้แล้ว Save ไปๆ มาๆ แล้ว Code ที่ใส่ลงไปใหม่ดันมีปัญหา ไม่เข้ากับ Code ตัวอื่น ๆ หรือ Function ใหม่ไม่เข้ากับ Function เดิม และจำเป็นต้องย้อนกลับไปใช้ Code เดิมที่แก้ มันทำให้การกลับไปใช้ตัวเดิมเป็นไปได้ยาก เพราะส่วนใหญ่ไม่ได้ Backup ไว้ ซึ่งลำบากลำบนอย่างมาก

ทางแก้ของปัญหาหานี้คือใช้ระบบ Control Version System หรือ CVS นั้นเอง ส่วนเรื่อง CVS มันเป็นยังไงหาใน Google เอาแล้วกันนะครับ สำหรับคนที่สนใจ เว็บไทยหลาย ๆ เว็บก็มีพูด ๆ ไว้ และในปัจจุบันนั้น ระบบ SVN หรือ SubVersioN นั้นเอง โดยมีข้อดีมากกว่า CVS พอสมควรเลย ซึ่งผมต้องการหา Hosting ที่รองรับ SVN ซึ่งของคนไทยนี่หาไม่เจอเลย แล้ว Hosting ที่เช่าอยู่ก็ไม่มี Mod ของ Apache นี้ลงอยู่ในเครื่อง มันเลยต้องตามล่าหาของ Free ใช้ไปก่อน โดยไปเจอ http://opensvn.csie.org/  เข้าซึ่งตอนนี้กำลังทดสอบอยู่ว่า มันจะ ทำอะไรได้บ้างและระบบมีความเสถียรพอหรือไม่ เพราะเดี่ยวซวยเวลาจะ Update หรือ Commit แล้วมันล่มเดี่ยวจะมีปัญหาเอา

ส่วนตอนนี้ในเครื่องก็มี SVN อยู่ใช้กับงานหลาย ๆ อย่างเหมือนกัน เพราะว่าข้อดีในการ Reversion นี่หล่ะทำให้เราเขียนโปรแกรมแล้วไม่ต้องกลัวว่า Function เก่าที่เราเขียนไป และตัวใหม่ที่เขียนเพิ่มมันจะหายหรือมีปัญหา โดยเราสามารถกลับไปใช้ตัวเก่าได้ และรวมไปถึงมันช่วยจัดการอะไร ได้หลายๆ อย่างเลยหล่ะ เดี่ยวว่าง ๆ จะมาสอนการติดตั้ง SVN บน Windows ให้ได้ใช้กัน ;)