Kho lưu trữ Subversion đơn giản trên Windows

Đối tượng: bạn đã có biết hoặc sử dụng subversion, nắm được các khái niệm cơ bản về kho dữ liệu svn, muốn tự thiết lập kho svn đơn giản trên Windows. Trên NIX thì nếu ai đã biết dùng NIX và daemon thì cấu hình svn không khó. Mình gặp vài trục trặc nhỏ với Windows nên ghi lại đây thành các bước đơn giản.

Nội dung: thiết lập một kho dữ liệu subversion đơn giản bằng giao thức svn://, có thể sử dụng cho mạng nội bộ hoặc gia đình. Việc cấu hình truy xuất bằng ssh+svn hoặc Web-DAV không nằm trong phạm vi bài viết. Hướng dẫn sử dụng subversion, các khái niệm cơ bản về kho dữ liệu, project, version control, commit, check out, update, v.v… cũng không nằm trong phạm vi bài viết.


1. Tải gói svn-win32 mới nhất cho Windows tại website http://subversion.tigris.org (tại thời điểm của bài viết này thì version mới nhất là 1.4.5)

2. Giải nén gói svn-win32-x.y.z.zip tạo thành thư mục svn-win32-x.y.z, trong đó có các thư mục con là “bin”, “iconv”, “licenses”, “share” và file README. Giả sử thư mục svn-win32-x.y.z nằm ở thư mục gốc ổ đĩa C: (trong đó x,y,z là các con số version tương ứng)

3. Thiết lập biến môi trường PATH SVN_EDITOR

a. Thêm đường dẫn đến file thực thi của subversion vào cuối biến môi trường PATH:
– Kích vào My Computer, chọn Properties, chọn tab Advanced, kích vào “Environment Variables“.
– Trong dialog hiện ra có 2 ô “User variables for …” và “System variables“, trong mỗi ô đều đã có biến PATH, chọn biến PATH ở một trong hai ô.
– Kích vào biến đã chọn, kích tiếp “Edit“, rồi di chuyển đến phía cuối textbox. Nếu ở đó chưa có dấu chấm phẩy thì thêm vào dấu chấm phẩy, đã có rồi thì thôi.
– Thêm vào cuối textbox đường dẫn tuyệt đối đến file thực thi của subversion như sau: c:\svn-win32-x.y.z\bin. Xong rồi nhấn tất cả nút “OK” để ghi nhận và quay về cửa sổ dialog có 2 ô textbox ban đầu.
– Nhấn vào một trong hai nút New sẽ có một dialog nhỏ hiện ra với 2 ô textbox, ô phía trên thì bạn gõ vào SVN_EDITOR, ô phía dưới thì nhập vào là c:\windows\notepad.exe. Xong rồi nhấn OK để ghi nhận.

Khởi động lại máy, sau đó mở cửa sổ “command” và thực thi lệnh “svn” để kiểm tra việc cấu hình biến PATH có đúng không. Cấu hình đúng thì lệnh svn sẽ có tác dụng và hiện ra vài thông tin liên quan. Cấu hình sai thì sẽ có thông báo lỗi “‘svn’ is not recognized as an internal or external command, operable program or batch file”

4. Thiết lập repository cho subversion server:

– Repository là kho lưu trữ dữ liệu để subversion quản lý các dữ liệu, thực chất đó là một thư mục mà bên trong có chứa các file cấu hình về truy cập, chứa dữ liệu và các thông tin cần thiết của các project được subversion quản lý. Việc tạo repository khá đơn giản. Giả sử bạn muốn tạo kho lưu trữ ở thư mục gốc ổ đĩa D, tên kho là myrepos, thì sử dụng lệnh svnadmin ở cửa sổ “command line” như sau:

svnadmin create d:\myrepos

– lệnh svdadmin tạo kho lưu trữ, bên trong có các thư mục con, trong đó thư mục quan trọng nhất đối với người quản trị như bạn là “conf”, chứa các file cấu hình cho subversion.

5. Cấu hình cho subversion server:

a. Dùng trình soạn thảo, mở file “svnserve.conf” trong thư mục “d:\myrepos\conf“. Trong file đó có nhiều dòng hướng dẫn, bạn nên đọc qua để nắm sơ vài điều cơ bản. Một vài điểm đáng chú ý là:
anon-access = read (cho phép đọc) hoặc write (cho phép ghi) hoặc none (không cho phép gì cả): cấu hình cho anonymous user, là những người truy cập kho svn của bạn mà không cần đăng nhập. Giá trị mặc định là read. Nếu bạn không muốn người lạ biết thông tin trong kho thì thiết lập ‘none’.
auth-access = read (cho phép đọc) hoặc write (cho phép ghi) hoặc none (không cho phép gì cả): cấu hình cho người sử dụng có đăng nhập.
password-db = passwd : chỉ định file chứa thông tin tài khoản truy cập. Ở đây thì tên file đó là passwd do svnadmin tạo ra, bạn có thể đổi tên tùy ý.

– Chú ý: dấu # là chú thích cho nên muốn dòng nào có tác dụng thì phải bỏ dấu # ở đầu dòng đó đi.

– Một cấu hình đơn giản cho subversion server là:

[general]
anon-access = read
auth-access = write
password-db = passwd

– Lưu file svnserve.conf lại.

b. Tiếp tục mở file passwd để tạo các account người dùng cho kho dữ liệu của bạn. File passwd có cú pháp đơn giản, mỗi dòng bên dưới [users] tương ứng với một account, bao gồm username và password.

[users]
username = password

Giả sử bạn thiết lập account username là ‘friend’ và password là ‘test’ (account này sẽ dùng để minh họa việc kiểm tra ở bước 6).

[users]
friend = test

– Lưu file passwd.

6. Kiểm tra xem cấu hình bên trên có hoạt động tốt hay không.

a. Thực hiện lệnh sau ở cửa sổ “command”

svnserve -d -r d:\myrepos

– Nếu không có lỗi gì hiện ra nghĩa là subversion server đã được cấu hình đúng.

b. Mở một cửa sổ command khác để thử thao tác trên kho dữ liệu. Thực hiện lệnh sau:

svn mkdir svn://localhost/myproject -m “tao project moi” –username friend

– Subversion sẽ hỏi bạn password, bạn nhập vào chuỗi ‘test’ (không có dấu nháy) để xác nhận. Nếu thành công thì sẽ có thông báo “Committed ….”

d:\> svn mkdir svn://localhost/myproject -m “thu tao project moi” –username friend
Authentication realm: <svn://localhost:3690> 71ea84a6-2051-0643-a781-6d242300fbc9
Password for ‘friend’: ****
Committed revision 1

– Bạn cũng có thể kiểm tra bằng lệnh svn list như sau

D:\>svn list svn://localhost
myproject/

– “myproject” là kết quả trả về của subversion. Tới đây thì bạn đã tạo kho dữ liệu và cấu hình thành công. Tuy thế, để thuận tiện thì bạn sẽ tiếp tục cấu hình sao cho subversion chạy ngầm như một dịch vụ (service) của Windows ở bước kế tiếp.

7. Tạo service thực thi tự động cho subversion server (chỉ có thể thực hiện trong dòng Windows NT-based như là 2000, XP, 2003, Vista, …):

– Bạn quay lại cửa sổ có chương trình svnserve đang thực thi (ở bước 6a) dùng Ctrl-C để ngắt thực thi lệnh svnserve. Dấu nhắc lệnh sẽ hiện ra.
– Sử dụng lệnh sc (service control) trong Windows để tạo service.

sc create <name> binpath= “c:\svn-win32-x.y.z\bin\svnserve.exe –service <svn-args>” displayname= “My SVN Server” depend= Tcpip start= auto

Trong đó:
<name> : tên của service (nên đặt tên dễ nhớ và ngắn gọn để sử dụng trong các lệnh cấu hình ở command line như ‘net start/stop’, ‘sc’)
binpath= “…” : chỉ định đường dẫn thực thi và thông số của service (ở đây bạn sẽ đưa vào trọn vẹn dòng lệnh ở bước 6a với một thay đổi nhỏ là phải dùng đường dẫn trực tiếp đến file svnserve.exe).
<svn-args>: các thông số cho lệnh svnserve.exe. Như trong ví dụ bước 6a), thông số là chuỗi “-d -r d:\myrepos“, ở đây bạn phải bỏ “-d” đi
displayName= “…” : bạn cho biết tên service sẽ hiển thị trong cửa sổ quản lý Service trong Windows, ví dụ như trên thì tên hiển thị sẽ là My SVN Server
depend= Tcpip : chỉ định sự phụ thuộc vào service khác trong Windows. Vì subversion chạy trên môi trường mạng nên phụ thuộc vào service “Tcpip
start= auto : chỉ định là service sẽ tự động chạy mỗi khi Windows khởi động lên.

– Chú ý: sau mỗi dấu = là một khoảng trắng và trước mỗi dấu = không có khoảng trắng, đó là qui ước của Windows, nếu bạn không tuân thủ thì sẽ không thành công.

Như vậy, câu lệnh đầy đủ để cài đặt svn server thành service trong Windows mà bạn gõ vào cửa sổ lệnh là:

D:\> sc create mysvn binpath= “c:\svn-win32-x.y.z\bin\svnserve.exe –service -r d:\myrepos” displayname= “My SVN Server” depend= Tcpip start= auto

– Nếu không có gì sai sót nặng nề (chú ý có khoảng trắng sau dấu =, không có khoảng trắng trước dấu =, nhớ thay x, y, z bằng các con số version) thì bạn sẽ thấy thông báo sau:

[SC] CreateService SUCCESS

– Tuy nhiên, thông báo này không đồng nghĩa với việc service đã cài đặt sẽ chạy thành công. Bạn hãy kiểm tra lại bằng các lệnh như sau:

– Khởi động service

D:\>net start mysvn
The My SVN Server service is starting.
The My SVN Server service was started successfully.

hoặc

sc start mysvn

– Tắt service

D:\>net stop mysvn
The My SVN Server service is stopping.
The My SVN Server service was stopped successfully.

hoặc

sc stop mysvn

– Nếu quá trình cài đặt service chưa thành công, bạn có thể xóa service đã tạo bằng lệnh sc delete như sau:

D:\>sc delete mysvn
[SC] DeleteService SUCCESS

– Sau khi xóa xong thì bạn có thể kiểm tra sửa chữa sai sót và lặp lại việc cài đặt với lệnh sc create như trên.

– Một số lỗi hay xảy ra
– Chỉ định sai đường dẫn đến file svnserve.exe (ví dụ như copy nguyên xi ở trên mà không sửa x,y,z thành số chẳng hạn)

D:\>net start mysvn
System error 3 has occurred.
The system cannot find the path specified.

– Chưa xóa service mà tạo service trùng tên

D:\> sc create mysvn ….
[SC] CreateService FAILED 1073:
The specified service already exists.

– Muốn nhìn thấy service này rõ ràng hơn trong Windows, bạn vào Menu Start -> All Programs -> Administrative Tools -> Services. Bạn sẽ thấy tên service hiện ra là “My SVN Server”. Trong cửa sổ đó, bạn cũng có thể start/stop subversion server, nhưng không thể xóa được. Sau khi start subversion bằng service, bạn nên kiểm tra lại xem kho dữ liệu có hoạt động không bằng những hướng dẫn ở bước 6b)

Tài liệu tham khảo:
[1] http://svn.collab.net/repos/svn/tags/1.4.0/notes/windows-service.txt
[2] http://subversion.tigris.org

About Huy Trần

Just a lazy member of the blogosphere.
This entry was posted in Software, Windows Tutorial and tagged , . Bookmark the permalink.

Có 14 phản hồi tại Kho lưu trữ Subversion đơn giản trên Windows

  1. gnuman nói:

    Trên Windows, mời các bác dùng cái này cho tiện: http://svn1clicksetup.tigris.org

  2. htr3n nói:

    Cái 1-click này hay và thuận tiện. Cảm ơn bác Gnuman.
    IMHO, mình thích vọc hơn là click một phát xong rồi nó làm tất như WAMP thì ít học hỏi thêm được. Khi mình tự làm như trên thì học được ít nhất vài thứ: về tổ chức cấu trúc kho dữ liệu, sử dụng svn dòng lệnh, sử dụng lệnh service control (sc) và net start. Đó là ý đồ của mình khi đưa bài này lên.

  3. minduc nói:

    Sư huynh viết bài trên có 1 lỗi ở lệnh:
    D:\> sc create mysvn binpath= “c:\svn-win32-x.y.z\bin\svnserve.exe –-service -r d:\myrepos” displayname= “My SVN Server” depend= Tcpip start= auto

    Thanks.

  4. htr3n nói:

    Oops! Có lỗi huh bạn? Có lẽ do mình copy/paste chăng? Thế lỗi chỗ nào vậy bạn?
    Thanks trước nhen😉

  5. htr3n nói:

    Cái này mình copy và paste từ đây vào command line của Windows thì có báo lỗi, còn tự type theo đúng cú pháp thì không lỗi. Có lẽ do một vài kí tự hidden khi copy/paste từ web browser. Bạn kiểm tra lại xem nhé. Tốt nhất là tự gõ lại lệnh trên thay vì copy/paste.
    Thanks!

  6. chinhnv nói:

    d:\> svn mkdir svn://localhost/myproject -m “thu tao project moi” –username friend
    Authentication realm: 71ea84a6-2051-0643-a781-6d242300fbc9
    Password for ‘friend’: ****
    Committed revision 1
    không biết tại sao tôi làm đến phần này thì nó báo như sau
    svn: invalid option:
    Type ‘svn help’ for usage.
    các bước trên chạy đúng
    bạn có thể giúp mình trả lời câu hỏi tại sao không

  7. Toàn nói:

    vì cú pháp ở trên nó sai phải sửa lại như sau:
    d:\> svn mkdir svn://localhost/myproject -m “thu tao project moi” -–username friend

    ở chỗ username có 2 dấu –, bạn có thể xem svn help mkdir rồi xem option nó sẽ thấy

  8. Toàn nói:

    D:\> sc create mysvn binpath= “c:\svn-win32-x.y.z\bin\svnserve.exe –service -r d:\myrepos” displayname= “My SVN Server” depend= Tcpip start= auto

    Ở đây bị lỗi như cái bạn ở trên vừa nói là –service bạn thiếu 1 dấu nên tạo thành công nhưng ko start được

  9. htr3n nói:

    Thanks bạn Toàn trả lời giúp! Ngay username có hai dấu -, tuy nhiên, mình không biết vì sao mà hai dấu – thành một dấu – dài, có lẽ vì format tự động của WordPress.

  10. trungnn nói:

    Xin mọi người chỉ giup lại, đoạn của chinhnv, mình cũng làm đến đó nhưng sủa theo cái của Toan thì cũng vẫn không được(thay thành — rồi)

  11. trungnn nói:

    rồi mình chỉnh 1 lúc thì được kết quả: “Non-ASCII character detected, and unable to convert to/from UTF-8"
    hixhix, help me

  12. Tuan nói:

    Minh hiện tại cũng bị cái lỗi y chang bạn Trungnn. Các anh chị ai biết có thể vui lòng chỉ giùm được ko ạ?

  13. aladeck nói:

    Sử dụng tortoise client để tạo svnserver đơn giản là mình thấy hay nhất( cũng đơn giản nhất)
    1) vào thư mục bạn muốn tạo thành repository
    2) click chuột phải Tortoise svn -> Create Repository Here
    Thế là xong.

  14. tuandat nói:

    Ai làm ơn chỉ cho tôi biết cách tạo account bằng command line trên svn server không ?

    Trước đây tôi dùng một accoutn, đã save password lại, giờ tôi muốn đổi sang account khác dùng (dùng tortoiseSVN) thì làm thế nào hả các bác ?

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s