หน้าเว็บ

About me

Hi, I'm cheer. My interest relates to artificial intelligence, machine learning, computer vision, network communication, security algorithm.

วันอาทิตย์ที่ 11 กรกฎาคม พ.ศ. 2553

Subversion Tutorial

หลังจากที่ สร้าง svn repository ในบทความนี้จะแนะนำการใช้งาน svn เบื้องต้น โดยจะประกอบด้วยคำสั่ง import, checkout, commit

อนุญาตให้ users สามารถเขียนไฟล์ใน repository ได้

ก่อนที่ users สามารถที่จะใส่ไฟล์เข้าไปใน repository ที่ root เป็นคนสร้างไว้ ต้องเปลี่ยน permission ของไดเร็คทอรีที่สร้างขึ้นก่อน ในที่นี้คือ /var/svn/test_svn/

[root@svn ~]# cd /var/svn/

[root@svn svn]# chmod -R g+w test_svn/
[root@svn svn]# chgrp -R users test_svn/
[root@svn svn]# ls -l

total 4
drwxrwxr-x 7 root users 4096 2008-11-27 23:37 test_svn

svn import – เริ่มต้นใส่ข้อมูล

ทดสอบโดยใช้ user01 เขียนโปรแกรมขึ้นมาเก็บไว้ในไดเร็คทอรี my-scripts/ และในนี้มีไฟล์ที่สร้างขึ้นสองไฟล์ คือ index.php และ README

[user01@svn ~]$ ls -lR my-scripts/

my-scripts/:
total 8
-rw-r--r-- 1 user01 users 25 2008-11-27 23:51 index.php
-rw-r--r-- 1 user01 users 7 2008-11-27 23:51 README

ตัวอย่างไฟล์ที่สร้างขึ้น

[user01@svn ~]$ cat my-scripts/index.php

echo "hello";
?>

ใช้คำสั่ง svn import เพื่อใส่ไฟล์ที่สร้างขึ้นเข้าไปใน repository ได้ ดังตัวอย่าง

[user01@svn ~]$ svn import my-scripts file:///var/svn/test_svn/my-scripts -m "Initial import"

Adding my-scripts/index.php
Adding my-scripts/README
Committed revision 1.

คำอธิบาย

  • my-scripts ส่วนแรกเป็นการระบุไดเร็คทอรี ที่เราเพิ่งสร้างไฟล์ขึ้น
  • my-scripts อันหลังจะเป็นการระบุชื่อที่เก็บไว้ใน repository
  • ออปชั่น -m เป็นคำอธิบายในการเปลี่ยนแปลงข้อมูลใน repository เพื่อการอ้างอิงย้อนหลังได้
  • file:///var/svn/test_svn ระบุที่อยู่ของ repository โดยเริ่มต้นเราจะทดสอบบน local disk ข้อสังเกต มีเครื่องหมาย / สามอัน

หลังจากที่ import ไฟล์เข้าไปแล้ว แนะนำให้เก็บสำรอง ไฟล์ดั้งเดิมเอาไว้ก่อน ในตัวอย่างนี้จะเปลี่ยนชื่อเป็น .bak

[user01@svn ~]$ mv my-scripts my-scripts.bak

[user01@svn ~]$ ls -l
total 4
drwxr-xr-x 2 user01 users 4096 2008-11-27 23:51 my-scripts.bak

svn checkout – ดึงไฟล์ออกมาจาก repository

ใช้คำสั่ง svn checkout เพื่อดึงไฟล์ที่ต้องการออกมา โดยต้องระบุ path ให้ถูกต้อง ตามที่ระบุไว้ตอนที่ import เข้าไป

[user01@svn ~]$ svn checkout file:///var/svn/test_svn/my-scripts

A my-scripts/README
A my-scripts/index.php
Checked out revision 1.
[user01@svn ~]$ ls -l

total 8
drwxr-xr-x 3 user01 users 4096 2008-11-28 00:03 my-scripts
drwxr-xr-x 2 user01 users 4096 2008-11-27 23:51 my-scripts.bak

เราจะได้ไดเร็คทอรี่ และไฟล์ที่เราเพิ่งใส่เข้าไปกลับคืนมา ในที่นี้คือ my-scripts

ลองตรวจสอบไฟล์ที่อยู่ในนี้ จะเห็นว่ามี ไดเร็คทอรี่ พิเศษเพิ่มเติมขึ้นมา ชื่อว่า .svn/ โดยจะเป็นส่วนที่เก็บคอนฟิกและการตรวจสอบการเปลี่ยนแปลงไฟล์ของ subversion ห้ามลบทิ้ง

[user01@svn ~]$ cd my-scripts

[user01@svn my-scripts]$ ls -la
total 20
drwxr-xr-x 3 user01 users 4096 2008-11-28 00:03 .
drwx------ 6 user01 users 4096 2008-11-28 00:03 ..
-rw-r--r-- 1 user01 users 25 2008-11-28 00:03 index.php
-rw-r--r-- 1 user01 users 7 2008-11-28 00:03 README
drwxr-xr-x 6 user01 users 4096 2008-11-28 00:03 .svn
[user01@svn my-scripts]$ ls -l .svn/

total 24
-r--r--r-- 1 user01 users 438 2008-11-28 00:03 entries
-r--r--r-- 1 user01 users 2 2008-11-28 00:03 format
drwxr-xr-x 2 user01 users 4096 2008-11-28 00:03 prop-base
drwxr-xr-x 2 user01 users 4096 2008-11-28 00:03 props
drwxr-xr-x 2 user01 users 4096 2008-11-28 00:03 text-base
drwxr-xr-x 5 user01 users 4096 2008-11-28 00:03 tmp

svn info – ตรวจสอบเวอร์ชั่นของไฟล์

ใช้คำสั่ง svn info เพื่อตรวจสอบเวอร์ชั่น (Revision) และข้อมูลการเปลี่ยนแปลงล่าสุดของไฟล์ได้

[user01@svn my-scripts]$ svn info

Path: .
URL: file:///var/svn/test_svn/my-scripts
Repository Root: file:///var/svn/test_svn
Repository UUID: 1b23135d-c21e-4acd-826f-e74e671c30c9
Revision: 1
Node Kind: directory
Schedule: normal
Last Changed Author: user01
Last Changed Rev: 1
Last Changed Date: 2008-11-27 23:56:16 +0700 (Thu, 27 Nov 2008)

svn status – ตรวจสอบสถานะการแก้ไขไฟล์

ทดลองแก้ไขไฟล์ index.php ในที่นี้จะแก้เป็น

[user01@svn my-scripts]$ cat index.php

echo "hello";

echo "world";
echo "test subversion";
?>

ใช้คำสั่ง svn status เพื่อตรวจสอบการแก้ไข

[user01@svn my-scripts]$ svn status

M index.php

ผลลัพธ์ที่ได้จากคำสั่ง svn status จะแสดงรายชื่อไฟล์ที่มีการเปลี่ยนแปลง พร้อมทั้งตัวอักษรย่อ เช่น

  • M ไฟล์มีการแก้ไข
  • A ไฟล์ถูกสร้างขึ้นมาใหม่
  • D ไฟล์ถูกลบไป
  • ? ยังไม่มีข้อมูลของไฟล์

svn commit – ปรับปรุงการแก้ไขไฟล์เข้าไปใน repository

หลังจากที่แก้ไขไฟล์ต่างๆ เสร็จเรียบร้อย ใช้คำสั่ง svn commit เพื่อใส่ข้อมูลการเปลี่ยนแปลง กลับเข้าไปใน repository อีกครั้ง ระบุออปชั่น ‘-m’ เพื่อใส่คำอธิบายการแก้ไข

[user01@svn my-scripts]$ svn commit -m "added more lines"

Sending index.php
Transmitting file data .
Committed revision 2.

svn add – เพิ่มไฟล์ใหม่

หากต้องการสร้างไฟล์ใหม่ขึ้นมา ก็สามารถสร้างได้ตามปกติ แล้วใช้คำสั่ง svn add เพื่อเพิ่มไฟล์ใหม่นี้เข้าไปใน repository

[user01@svn my-scripts]$ ls -l

total 12
-rw-r--r-- 1 user01 users 63 2008-11-28 00:10 index.php
-rw-r--r-- 1 user01 users 40 2008-11-28 00:16 new-file1.php
-rw-r--r-- 1 user01 users 7 2008-11-28 00:03 README
[user01@svn my-scripts]$ svn status

? new-file1.php
[user01@svn my-scripts]$ svn add new-file1.php

A new-file1.php
[user01@svn my-scripts]$ svn commit -m "added a new file 1"

Adding new-file1.php
Transmitting file data .
Committed revision 3.

svn delete – ลบไฟล์ออก

หากต้องการลบไฟล์ สามารถทำได้โดยใช้คำสั่ง svn delete ไฟล์จะถูกลบออกทั้งจาก ไดเร็คทอรี และจาก repository

[user01@svn my-scripts]$ svn delete new-file1.php

D new-file1.php
[user01@svn my-scripts]$ svn commit -m "deleted a new file 1"

Deleting new-file1.php
Committed revision 4.

[user01@svn my-scripts]$ ls -l
total 8
-rw-r--r-- 1 user01 users 63 2008-11-28 00:10 index.php
-rw-r--r-- 1 user01 users 7 2008-11-28 00:03 README

คำแนะนำการ commit

จะเห็นว่ากการ commit แต่ละครั้ง ตัวเลข Revision จะเพิ่มทีละหนึ่ง ซึ่งอาจเกินความจำเป็นและจะยากต่อการอ้างอิงเพื่อดึงข้อมูลย้อนหลัง (revert) คำแนะนำคือ ให้ commit หลังจากที่ปรับปรุงโปรแกรมไปพอสมควร เช่นแก้ไขปัญหาที่เกิดขึ้นจบไป หรืออาจจะวันละครั้ง ใส่คำอธิบายหรือเหตุผลของการเปลี่ยนแปลง และให้แน่ใจว่าสิ่งที่แก้ไขไปนั้นโปรแกรมสามารถรันได้โดยไม่มีข้อผิดพลาด แล้วค่อย commit กลับเข้าไปใน repository เผื่อว่าเวลามาดึงข้อมูลย้อนหลังจะได้นำมาใช้งานได้เลย


credit : http://spalinux.com/2008/11/basic_using_subversion