Concept SVN แบบงูๆปลาๆ
ก่อนอื่น ออกตัวก่อนว่าผมไม่ได้เรียนสายคอม บทความนี้ไม่ได้เขียนขึ้นเพื่อสอนใคร แต่เขียนขึ้นเพื่อเก็บไว้เป็นความทรงจำ และเผื่อว่าท่านสมาชิกจะได้ประโยชน์จากการนำไปประยุกต์ใช้เท่านั้น
อย่าง ที่กล่าวไปแล้วว่าไม่ได้เรียนมาตรงสายดังนั้นความรู้ที่ได้ จะไม่ถูกต้อง 100% ซึ่งอย่านำไปอ้างอิงเพื่อส่งรายงานหรืออะไรแบบนั้น แต่ผมเขียนขึ้นมาเพื่อให้เหมาะกับความเข้าใจและการเอาไปประยุกต์ใช้เท่านั้น โดยผมอธิบายตามที่ผมเข้าใจ และตามที่ผมได้รับประโยชน์จากมัน ซึ่งมันอาจจะมีมากกว่านี้ก็ขอให้ท่านค้นหาได้ด้วยตัวท่านเอง
หากเข้าใจแล้วเรามาเริ่มกันเลยครับ
จากที่เคยกล่าวกันไปแล้วถึงเรื่อง SVN ว่ามันมีประโยชน์ในการเก็บความเปลี่ยนแปลงของชุดโปรแกรมของเรา ทำให้เราสามารถ track ย้อนหลังได้เมื่อมีการเปลี่ยนแปลงอะไรไป อีกทั้งยังสามารถทำการย้อนหลังถอย version กลับมาได้อีกด้วย
ประโยชน์ ของ SVN ถูกเอามาใช้เพื่อติดตามการเปลี่ยนแปลงของไฟล์ต่างๆ โดยจะจัดเก็บรูปแบบหน้าตา ลักษณะ และโครงสร้างไฟล์นั้นๆเอาไว้ เช่น วันนี้เราเขียนโค้ด 10 บรรทัด เราสั่งให้เก็บไว้ใน SVN พรุ่งนี้เขียนเพิ่มอีกเป็น 100 บรรทัด เราก็สั่งให้เก็บเอาไว้อีก วันถัดมาแก้ไฟล์จนกระทั่งเว็บเกิดปัญหา ต้องการย้อนคืนกลับไปเป็นของเมื่อวานก็สามารถย้อนไปได้ทันที จะได้ไฟล์ที่หน้าตาเหมือนเดิมเปี้ยบ
หรืออีกประโยชน์นึงก็อย่างที่เคยเล่า นั่นคือการตรวจสอบการพัฒนา ในแต่ละ version ของไฟล์ เช่น เราอาจจะพัฒนาเว็บมา 10 วัน มี 10 version (ที่แต่ละ version ถูกพัฒนาต่อๆกันมาเรื่อยๆ) จนเสร็จ แต่ปรากฏว่าเราก็ทิ้งไว้ไม่ได้ทำอีกเลยเป็นเวลา 1 ปีผ่านไป ต้องการกลับมาแก้โค้ด เราก็อาจจะงงไปแล้ว ว่าเราเคยแก้อะไรตรงไหนบ้าง หรือโค้ดบางจุดนี้มาจากไหน มีมาเพื่ออะไรเป็นต้น
หรืออีกประโยชน์นึง หากเราพัฒนาเว็บเป็นทีม 10 คน จนกระทั่งเว็บเสร็จเรียบร้อย เราก็ตั้งให้เป็น v 1.0 หากมีวันหนึ่ง คนที่ 9 พัฒนาต่อออกมาเป็น 1.1 แล้วปรากฏเว็บมีปัญหา แล้วไม่สามารถติดต่อคนที่ 9 ได้อีกเลย คำถามคือเราจะรู้ได้อย่างไรว่าคนที่ 9 แก้อะไรไปแล้วบ้าง? แล้วต้องแก้คืนตรงไหนบ้าง? ข้อนี้คือจุดกำเนิดของ SVN เลยก็ว่าได้ครับ เพราะว่ามันสามารถย้อนกลับให้เป็น v 1.0 ได้แบบง่ายๆ โดยที่เราไม่ต้องเปิดไฟล์เลยด้วยซ้ำ ว่าไฟล์ใดบ้าง และจุดใดบ้างที่ถูกแก้ไปจนเกิดปัญหา......
เริ่มต้นเรื่อง SVN ตรงการทำงานของมันก่อนเลย การทำงานของระบบ SVN นั้นจะแบ่งการทำงานออกเป็น 2 ส่วนหลักๆ นั่นคือส่วนที่เป็น SVN server และส่วน SVN Client
SVN server หน้าที่ของมันก็คือ ทำการเก็บความเปลี่ยนแปลงต่างๆที่เกิดขึ้นในแต่ละ version พร้อมทั้งรายละเอียดต่างๆ เพื่อเป็นฐานข้อมูลสำหรับการค้นหาย้อนหลังในอนาคต หรือเพื่อเป็นการกู้คืนเมื่อการเปลี่ยนแปลงที่พึ่งจะทำไป ทำให้เกิดความผิดพลาดต่อระบบที่เรากำลังพัฒนา โดยจะจัดเก็บในลำดับที่เพิ่มขึ้นเรื่อยๆ เรียกว่า REV. เช่น เริ่มต้นเราเริ่มเขียนไฟล์บรรทัดแรก เราก็ save แล้วก็กำหนดให้ SVN server บันทึกว่าเป็น REV 0 หลังจากนั้นเราเขียนได้อีก 1 function เราก็กำหนดให้เป็น REV 1 ไปเรื่อยๆ หรือว่าจะเขียนรวดเดียว 10 function แล้วค่อยให้เก็บ เป็น REV 1 ก็ได้ ซึ่ง SVN ก็จะเก็บรูปแบบ ลักษณะของไฟล์ในแต่ละ REV เอาไว้� ซึ่งการทำงานหลักๆของส่วน server ก็คือการเก็บ และค้นหานั่นเอง โดยอ้างอิงจากเลข REV ที่แต่ละ REV จะไม่ซ้ำกัน
SVN client หน้าที่ของมันก็คือ ทำการติดต่อกับ SVN server เพื่อตรวจสอบถึงการเปลี่ยนแปลงของไฟล์ต่างๆที่เกิดขึ้น โดยเราสามารถดูได้ว่าตอนนี้ไฟล์ถูกเขียนมาถึง version อะไรแล้ว แล้วสามารถเปรียบเทียบย้อนหลังได้อีกด้วย เช่น เราอาจจะย้อนไป 3 version ก็ได้ว่าไฟล์ที่เราต้องการดูนั้นเกิดการเปลี่ยนแปลงอะไรไปบ้าง โดย svn client ก็จะไปติดต่อ server เพื่อเรียกข้อมูลเหล่านี้ขึ้นมาดูอีกที และอีกหน้าที่ของ svn client ก็คือการติดต่อกับเรา เพื่อให้เราใช้งานได้ง่ายๆ ก็คือด้วยการคลิกเม้าส์นั่นแหล่ะ โดยอาจจะมีส่วน log การเปลี่ยนแปลง โดยไล่มาทีละ version เลยว่าแต่ละ version นั้นไฟล์ใดถูกแก้บ้าง และแก้ตรงไหนบ้าง บรรทัดไหนเพิ่มมาบรรทัดไหนหายไป บรรทัดไหนถูกแก้จากอะไรเป็นอะไร พร้อมทั้ง comment การแก้ไขแต่ละครั้งที่เราเป็นคนเขียนใส่เข้าไปอีกด้วย
ดังนั้นแล้ว ถ้าเราจะใช้ SVN ได้ เราก็จะเป็นต้องติดตั้งทั้งสองส่วนเลยครับ
สำหรับ การพัฒนาเว็บ ในความเป็นจริงก็คือตัวเว็บของเราเก็บอยู่บน server (hosting) ซึ่งแน่นอนว่าตัว SVN server จะมาติดตั้งอยู่ในเครื่องของผู้พัฒนาคนใดคนหนึ่งไม่ได้(ถ้าจะได้ต้องเปิด online standby ตลอดเวลา) นั่นก็แปลว่า server (hosting) ต้องติดตั้ง SVN server (service) ด้วยนั่นเอง แต่.... ในความเป็นจริง หาได้ยากมากที่จะมีผู้ให้บริการ server บริการ SVN service ด้วย นั่นเป็นเพราะว่าคนใช้งานน้อย อีกทั้งการใช้งานในแบบ Unix,Linux จะต้องอาศัยการ คีย์command เพื่อสั่งงาน SVN ซึ่งต้อง shell เข้าระบบถึงจะใช้ได้ และการ shell เข้าระบบ ก็เป็นอันตรายต่อตัว server จึงทำให้มีไม่กี่ที่เท่านั้นที่มีบริการ เท่าที่ผ่านตาผมในวงการ hosting ในไทย ไม่มีผู้ให้บริการรายใดเลย ที่เปิด SVN แม้แต่เจ้าเดียว......� แต่ของต่างประเทศมีแต่หายากอยู่เหมือนกัน......
ดังนั้นผมเองก็เลย คิดอ้อมๆไปว่า งั้นเราเปลี่ยนแนวคิดใหม่ จากที่ SVN server ต้องไปอยู่บน host ก็ให้มาอยู่ในเครื่องเราแทน โดยเอาตัว svn server มาติดตั้งในเครื่องเรา แล้วเราก็ใช้ svn client ที่ติดตั้งในเครื่องเราอีกเช่นกันทำหน้าที่บันทึก version ใส่ svn server ในเครื่องเราเองให้เรียบร้อยก่อนเอาขึ้น server จริงก็คงให้ผลที่เหมือนกัน คือเบ็ดเสร็จในเครื่องเราให้หมด
ซึ่งแนวคิดนี้ให้ผลดีในกรณีที่พัฒนาเว็บคนเดียวครับ...... เพราะว่าคนอื่นจะมา access svn server ที่อยู่ในเครื่องเราทำได้ยาก ก็ลักษณะคล้ายๆว่าเราจะทำ radio online จากเครื่องเราเองนี่แหล่ะครับ มองมุมนั้นเลย.....
แต่อย่างไรก็ดี น่าเชื่อได้ว่าหลายท่านก็พัฒนาเว็บคนเดียวอยู่แล้ว ดังนั้น SVN ก็น่าจะต้องมีประโยชน์ต่อท่านบ้างล่ะครับ
บทความต่อไป เราจะมาแนะนำการติดตั้ง และการใช้งานกัน บทความนี้ขอให้เข้าใจ concept และการทำงาน การเชื่อมโยง และประโยชน์ของมันก่อน จะได้ไม่งง ว่ามันคืออะไร เอาไว้ทำอะไรครับ.......
อย่าง ที่กล่าวไปแล้วว่าไม่ได้เรียนมาตรงสายดังนั้นความรู้ที่ได้ จะไม่ถูกต้อง 100% ซึ่งอย่านำไปอ้างอิงเพื่อส่งรายงานหรืออะไรแบบนั้น แต่ผมเขียนขึ้นมาเพื่อให้เหมาะกับความเข้าใจและการเอาไปประยุกต์ใช้เท่านั้น โดยผมอธิบายตามที่ผมเข้าใจ และตามที่ผมได้รับประโยชน์จากมัน ซึ่งมันอาจจะมีมากกว่านี้ก็ขอให้ท่านค้นหาได้ด้วยตัวท่านเอง
หากเข้าใจแล้วเรามาเริ่มกันเลยครับ
จากที่เคยกล่าวกันไปแล้วถึงเรื่อง SVN ว่ามันมีประโยชน์ในการเก็บความเปลี่ยนแปลงของชุดโปรแกรมของเรา ทำให้เราสามารถ track ย้อนหลังได้เมื่อมีการเปลี่ยนแปลงอะไรไป อีกทั้งยังสามารถทำการย้อนหลังถอย version กลับมาได้อีกด้วย
ประโยชน์ ของ SVN ถูกเอามาใช้เพื่อติดตามการเปลี่ยนแปลงของไฟล์ต่างๆ โดยจะจัดเก็บรูปแบบหน้าตา ลักษณะ และโครงสร้างไฟล์นั้นๆเอาไว้ เช่น วันนี้เราเขียนโค้ด 10 บรรทัด เราสั่งให้เก็บไว้ใน SVN พรุ่งนี้เขียนเพิ่มอีกเป็น 100 บรรทัด เราก็สั่งให้เก็บเอาไว้อีก วันถัดมาแก้ไฟล์จนกระทั่งเว็บเกิดปัญหา ต้องการย้อนคืนกลับไปเป็นของเมื่อวานก็สามารถย้อนไปได้ทันที จะได้ไฟล์ที่หน้าตาเหมือนเดิมเปี้ยบ
หรืออีกประโยชน์นึงก็อย่างที่เคยเล่า นั่นคือการตรวจสอบการพัฒนา ในแต่ละ version ของไฟล์ เช่น เราอาจจะพัฒนาเว็บมา 10 วัน มี 10 version (ที่แต่ละ version ถูกพัฒนาต่อๆกันมาเรื่อยๆ) จนเสร็จ แต่ปรากฏว่าเราก็ทิ้งไว้ไม่ได้ทำอีกเลยเป็นเวลา 1 ปีผ่านไป ต้องการกลับมาแก้โค้ด เราก็อาจจะงงไปแล้ว ว่าเราเคยแก้อะไรตรงไหนบ้าง หรือโค้ดบางจุดนี้มาจากไหน มีมาเพื่ออะไรเป็นต้น
หรืออีกประโยชน์นึง หากเราพัฒนาเว็บเป็นทีม 10 คน จนกระทั่งเว็บเสร็จเรียบร้อย เราก็ตั้งให้เป็น v 1.0 หากมีวันหนึ่ง คนที่ 9 พัฒนาต่อออกมาเป็น 1.1 แล้วปรากฏเว็บมีปัญหา แล้วไม่สามารถติดต่อคนที่ 9 ได้อีกเลย คำถามคือเราจะรู้ได้อย่างไรว่าคนที่ 9 แก้อะไรไปแล้วบ้าง? แล้วต้องแก้คืนตรงไหนบ้าง? ข้อนี้คือจุดกำเนิดของ SVN เลยก็ว่าได้ครับ เพราะว่ามันสามารถย้อนกลับให้เป็น v 1.0 ได้แบบง่ายๆ โดยที่เราไม่ต้องเปิดไฟล์เลยด้วยซ้ำ ว่าไฟล์ใดบ้าง และจุดใดบ้างที่ถูกแก้ไปจนเกิดปัญหา......
เริ่มต้นเรื่อง SVN ตรงการทำงานของมันก่อนเลย การทำงานของระบบ SVN นั้นจะแบ่งการทำงานออกเป็น 2 ส่วนหลักๆ นั่นคือส่วนที่เป็น SVN server และส่วน SVN Client
SVN server หน้าที่ของมันก็คือ ทำการเก็บความเปลี่ยนแปลงต่างๆที่เกิดขึ้นในแต่ละ version พร้อมทั้งรายละเอียดต่างๆ เพื่อเป็นฐานข้อมูลสำหรับการค้นหาย้อนหลังในอนาคต หรือเพื่อเป็นการกู้คืนเมื่อการเปลี่ยนแปลงที่พึ่งจะทำไป ทำให้เกิดความผิดพลาดต่อระบบที่เรากำลังพัฒนา โดยจะจัดเก็บในลำดับที่เพิ่มขึ้นเรื่อยๆ เรียกว่า REV. เช่น เริ่มต้นเราเริ่มเขียนไฟล์บรรทัดแรก เราก็ save แล้วก็กำหนดให้ SVN server บันทึกว่าเป็น REV 0 หลังจากนั้นเราเขียนได้อีก 1 function เราก็กำหนดให้เป็น REV 1 ไปเรื่อยๆ หรือว่าจะเขียนรวดเดียว 10 function แล้วค่อยให้เก็บ เป็น REV 1 ก็ได้ ซึ่ง SVN ก็จะเก็บรูปแบบ ลักษณะของไฟล์ในแต่ละ REV เอาไว้� ซึ่งการทำงานหลักๆของส่วน server ก็คือการเก็บ และค้นหานั่นเอง โดยอ้างอิงจากเลข REV ที่แต่ละ REV จะไม่ซ้ำกัน
SVN client หน้าที่ของมันก็คือ ทำการติดต่อกับ SVN server เพื่อตรวจสอบถึงการเปลี่ยนแปลงของไฟล์ต่างๆที่เกิดขึ้น โดยเราสามารถดูได้ว่าตอนนี้ไฟล์ถูกเขียนมาถึง version อะไรแล้ว แล้วสามารถเปรียบเทียบย้อนหลังได้อีกด้วย เช่น เราอาจจะย้อนไป 3 version ก็ได้ว่าไฟล์ที่เราต้องการดูนั้นเกิดการเปลี่ยนแปลงอะไรไปบ้าง โดย svn client ก็จะไปติดต่อ server เพื่อเรียกข้อมูลเหล่านี้ขึ้นมาดูอีกที และอีกหน้าที่ของ svn client ก็คือการติดต่อกับเรา เพื่อให้เราใช้งานได้ง่ายๆ ก็คือด้วยการคลิกเม้าส์นั่นแหล่ะ โดยอาจจะมีส่วน log การเปลี่ยนแปลง โดยไล่มาทีละ version เลยว่าแต่ละ version นั้นไฟล์ใดถูกแก้บ้าง และแก้ตรงไหนบ้าง บรรทัดไหนเพิ่มมาบรรทัดไหนหายไป บรรทัดไหนถูกแก้จากอะไรเป็นอะไร พร้อมทั้ง comment การแก้ไขแต่ละครั้งที่เราเป็นคนเขียนใส่เข้าไปอีกด้วย
ดังนั้นแล้ว ถ้าเราจะใช้ SVN ได้ เราก็จะเป็นต้องติดตั้งทั้งสองส่วนเลยครับ
สำหรับ การพัฒนาเว็บ ในความเป็นจริงก็คือตัวเว็บของเราเก็บอยู่บน server (hosting) ซึ่งแน่นอนว่าตัว SVN server จะมาติดตั้งอยู่ในเครื่องของผู้พัฒนาคนใดคนหนึ่งไม่ได้(ถ้าจะได้ต้องเปิด online standby ตลอดเวลา) นั่นก็แปลว่า server (hosting) ต้องติดตั้ง SVN server (service) ด้วยนั่นเอง แต่.... ในความเป็นจริง หาได้ยากมากที่จะมีผู้ให้บริการ server บริการ SVN service ด้วย นั่นเป็นเพราะว่าคนใช้งานน้อย อีกทั้งการใช้งานในแบบ Unix,Linux จะต้องอาศัยการ คีย์command เพื่อสั่งงาน SVN ซึ่งต้อง shell เข้าระบบถึงจะใช้ได้ และการ shell เข้าระบบ ก็เป็นอันตรายต่อตัว server จึงทำให้มีไม่กี่ที่เท่านั้นที่มีบริการ เท่าที่ผ่านตาผมในวงการ hosting ในไทย ไม่มีผู้ให้บริการรายใดเลย ที่เปิด SVN แม้แต่เจ้าเดียว......� แต่ของต่างประเทศมีแต่หายากอยู่เหมือนกัน......
ดังนั้นผมเองก็เลย คิดอ้อมๆไปว่า งั้นเราเปลี่ยนแนวคิดใหม่ จากที่ SVN server ต้องไปอยู่บน host ก็ให้มาอยู่ในเครื่องเราแทน โดยเอาตัว svn server มาติดตั้งในเครื่องเรา แล้วเราก็ใช้ svn client ที่ติดตั้งในเครื่องเราอีกเช่นกันทำหน้าที่บันทึก version ใส่ svn server ในเครื่องเราเองให้เรียบร้อยก่อนเอาขึ้น server จริงก็คงให้ผลที่เหมือนกัน คือเบ็ดเสร็จในเครื่องเราให้หมด
ซึ่งแนวคิดนี้ให้ผลดีในกรณีที่พัฒนาเว็บคนเดียวครับ...... เพราะว่าคนอื่นจะมา access svn server ที่อยู่ในเครื่องเราทำได้ยาก ก็ลักษณะคล้ายๆว่าเราจะทำ radio online จากเครื่องเราเองนี่แหล่ะครับ มองมุมนั้นเลย.....
แต่อย่างไรก็ดี น่าเชื่อได้ว่าหลายท่านก็พัฒนาเว็บคนเดียวอยู่แล้ว ดังนั้น SVN ก็น่าจะต้องมีประโยชน์ต่อท่านบ้างล่ะครับ
บทความต่อไป เราจะมาแนะนำการติดตั้ง และการใช้งานกัน บทความนี้ขอให้เข้าใจ concept และการทำงาน การเชื่อมโยง และประโยชน์ของมันก่อน จะได้ไม่งง ว่ามันคืออะไร เอาไว้ทำอะไรครับ.......
เขียน: 2009-04-02 22:18:43 แก้ไข : 2009-04-02 22:18:43 อ่าน : 3356
tag :
tag :