Archive

Posts Tagged ‘Source Control’

SVN#04: Edit log message–> Repository has not been enabled to accept revision propchange

Hôm nay, vào show log của dự án (Click phải lên dự án –> TortoiseSVN –> Show Log). Xem lại log thì thấy một số cái message không hợp lý. Tính sửa lại, click phải lên revision dự định sửa, chọn Edit log message. Sau khi sửa xong, nhấn OK, thì nhận được lỗi từ TortoiseSVN là: “Repository has not been enabled to accept revision propchange; ask the administrator to create pre-revprop-change hook” (hình dưới).

image

Giải quyết lỗi trên như thế nào: google thôi và tôi đã tìm ra cách giải quyết như sau:

1. Truy cập lên server, mở thư mục hooks trong Repository ra.
2. Trong thư mục này, tạo file pre-revprop-change.bat.
3. Mở file trên bằng notepad và gõ nội dung sau vào file:

REM Only allow log messages to be changed
if "%4" == "svn:log" exit 0
echo Property "%4" cannot be changed >&2
exit1

Tham khảo:
1. Matt Refghi’s Blog
2. TortoiseSVN Document

Advertisements
Categories: Source Control Tags: ,

Subversion(SVN)#03: Authentication

Xem thêm các bài về SVN tại: https://trinhvanchung.wordpress.com/category/th%E1%BB%A7-thu%E1%BA%ADt-tin-h%E1%BB%8Dc/source-control/

Trong các bài trước, tôi đã hướng dẫn các bạn cài đặt, cấu hình đơn giản, tạo repository, sử dụng một số lệnh cơ bản của giao thức SVN để thao tác với Repository.

Vấn đề đặt ra là trong trường hợp dự án có nhiều thành viên tham gia, có nhiều team cùng tham gia dự án và role của mỗi team hoặc mỗi thành viên là khác nhau trên từng dự án, thậm chí trên từng thư mục con của dự án.

Vậy làm sao để phân quyền truy cập cho các thành viên, các team đó trong SVN.

Với VisualSVN, mọi việc rất dễ dàng, tuy nhiên trong bài này tôi không có ý định hướng dẫn các bạn tạo user và cấu hình xác thực trong VisualSVN. Trong phạm vi bài này, tôi sẽ giới thiệu với các bạn cách cấu hình Authentication cho các user, các team truy cập vào Repository và các dự án bằng text file.

Để thực hiện việc phân quyền trong SVN, các bạn sử dụng file authz trong thư mục conf của repository. Để chỉ định việc kiểm tra quyền được cấu hình trong file authz, bạn phải mở chỉ thị trong authz-db trong file svnserve.conf ra. Khi đó, bạn có được file svnserve.conf như sau:

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

Nào, bây giờ hãy bắt đầu với authz. Để bất đầu hãy mở file authz bằng notepad và xóa trắng nó đi.

– Phân nhóm user

Trong svn, việc phân nhóm user trong file authz được thực hiện trong 1 session, dòng đầu tiên của session này là [groups]. Các dòng tiếp theo của session này là định nghĩa các nhóm tham gia vào dự án (sẽ được phân quyền để truy cập vào repository). Cấu trúc của 1 dòng như sau:

group_name = user_name1, user_name2

Các user name ngăn cách nhau bởi dấu phẩy (,) và hãy chắc chắn rằng các user này đã được tạo trong file passwd.

Ví dụ, bạn tạo ra 2 nhóm tham gia dự án, khi đó session groups sẽ như sau:

[groups]
dev_team = dev1, dev2, dev3
test_team = test1, test2

– Phân quyền cho user hoặc nhóm user

Trước khi phân quyền, bạn cần biết: Trong SVN, quyền truy cập vào 1 thư mục nào đó có 2 mức: read (r)write(w). Việc phân quyền cho user được access vào thư mục ở quyền nào được gán bởi các ký tự đại diện r hoặc w.

Để gán quyền cho các user hoặc group access vào một thư mục nào đó trong repository, bạn hãy tạo ra 1 session với tên session là đường dẫn tới thư mục cần phân quyền [đường dẫn] (trong trường hợp phân quyền truy cập cho repository (thư mục gốc) thì tên session sẽ để trống [/]). Trong 1 file authz có thể có nhiều session phân quyền khác nhau.

Ngay phía dưới tên, các dòng tiếp theo trong session sẽ thể hiện quyền của user hay nhóm.

Ví dụ, tôi phân quyền cho user admin toàn quyền trên toàn repository này thì sử dụng thì sử dụng session [/] như sau:

[/]
admin = rw

Phân quyền cho user1 có toàn quyền trên dự án AP thì như sau:

[/ap]
user1=rw

Phân quyền cho nhóm dev đã tạo ở trên toàn quyền trên thư mục src của dự án AP và nhóm test chỉ có quyền read trên thư mục src này. (chú ý đặt đấu @ trước tên nhóm)

[/ap/src]
@dev=rw
@test=r

Phân quyền cho tất cả mọi người đều được truy cập vào thư mục docs của dự án AP.

[/ap/docs]
*=rw

Kết quả, file authz sẽ như sau:

[groups]
dev=dev1,dev2,dev3
test=test1,test2

[/]
admin=rw

[/ap]
user1=rw

[/ap/src]
@dev=rw
@test=r

[/ap/docs]
*=rw

Bạn hãy thử sử dụng lệnh ls để kiểm tra hiệu lực của quyền read, lệnh mkdir để kiểm tra hiệu lực của lệnh write xem sao nhé. Cách sử dụng cách lệnh thì đã được giới thiệu trong bài trước rồi. https://trinhvanchung.wordpress.com/2010/11/05/subversionsvn02-m%E1%BB%99t-s%E1%BB%91-l%E1%BB%87nh-c%C6%A1-b%E1%BA%A3n/

OK. chúc các bạn thành công.

Categories: Source Control Tags: ,

Subversion(SVN)#1: Setup, create repository, config, create project, create svn service

image

1. Đặt vấn đề

Kỳ này có tham gia tại trường học phần Công cụ và môi trường Phát triển phần mềm, trong đó có giới thiệu với các bạn công cụ quản lý mã nguồn Subversion.

Rằng thì là chẳng bao giờ dùng SVN nên nhiều khi demo cứ hay quên mấy cái 1 trừ hay 2 trừ.  Viết cái chủ đề này phần để cho các bạn tham khảo phần để tra cứu lại khi cần thiết.

2. Giới thiệu về Subversion

Anh em chịu khó wiki hay nhờ “anh hai google” cho nó rõ nghĩa nhé. Mình chỉ đại khái thôi.

Subversion là một phần mềm cung cấp các chức năng quản lý phiên bản mã nguồn và tài liệu. Hiểu đơn giản nó cũng chỉ là một trình quản lý file, thư mục. Tuy nhiên, nó cao cấp hơn ở chỗ nó cho phép quản lý nhiều phiên bản của cùng 1 file, có thể rollback lại khi có sai sót; quản lý lịch sử sửa đổi; quản lý người dùng . Hỗ trợ giải quyết đụng độ, tranh chấp … và nhiều thứ mà nói thật mình cũng chưa tìm hiểu hết.

Tóm lại, anh em cứ google là ra hết hoặc là vào trang chủ của nó mà nghiên cứu http://subverion.tigris.org

3. Cài đặt SVN

B1. Download và cài đặt.

Download SVN tại: http://subverion.tigris.org (đừng có nói là vào đó xong hổng biết download ở đâu nhé :), còn nếu không biết thật thì vào đây http://sourceforge.net/projects/win32svn/). Sau khi download về máy ta được file svn-win32-3.5.6.zip (phiên bản có thể khác, nhưng cách cài thì như nhau).

Có thể dùng VisualSVN cũng được, nhưng để hiểu rõ hơn bản chất của nó mình sẽ giới thiệu về svn-win32 và quản lý nó bằng Command-line và text file.

Giải nén svn-win32-3.5.6.zip vào đâu đó (trong ví dụ này mình giải nén vào ổ C), được thư mục C:\svn-win32-3.5.6\ (xem hình)

image

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

Mục đích của việc thiết lập biến môi trường là để trên cửa sổ command có thể truy xuất trực tiếp tới các thư viện của svn mà không cần phải gõ đường dẫn.

Thêm các biến môi trường như sau:

+ Right-click lên My Computer, chọn Properties.
+ Trong màn hình System Properties chọn tab Advanced.
+ Trong tab Advanced Click vào nút lệnh Environtment Variables.
+ Tại cửa sổ Environtment Variables có 2 phần (user variables và system variables).
+ Trong phần system variables, tìm đến dòng có tên Variable là “Path”, chọn dòng đó và nhấn nút edit.  (ở đây bạn có thể thêm vào user variable hoặc system variable đều được).
+ Sau khi nhấn nút Edit, trong màn hình Edit system variable, tại ô Variable value, bạn đưa con trỏ tới cuối ô; trong trường hợp cuối ô chưa có dấu “;” thì bạn thêm dấu “;” vào, sau đó thêm đường dẫn tới thư mục Bin của svn (thêm C:\svn-win32-1.5.6\bin). Đây là thư mục chứa các tập tin exe của svn.
+ Tiếp theo các bạn thêm biến SVN_EDITOR bằng cách tại vùng User variables hoặc System variables trên của sổ Environment variables, nhấn nút New
+ Trong cửa sổ New variable, thêm như hình sau, sau đó nhấn nút OK.

image

4. Tạo kho lưu trữ tài liệu, mã nguồn (Repository)

Kho lưu trữ tài liệu, mã nguồn (Repository) là thư mục chứa dữ liệu về dự án của bạn và các cấu hình truy cập các dữ liệu đó.

Để tại kho lưu dữ liệu, bạn sử dụng svnadmin, trong cửa sổ cmd của window, gõ lệnh sau:


svnadmin create <đường dẫn kho lưu>

Ví dụ:

svnadmin create C:\ARDRepository\

Sau khi thực hiện xong, SVN sẽ tạo ra trong ổ đĩa của bạn thư mục kho lưu (thư mục chứa dữ liệu các phiên bản tài liệu, mã nguồn, các cấu hình truy cập kho). Bên trong thư mục kho lưu, SVN đã tạo sẳn ra một số thư mục. Là người quản trị, bạn quan tâm đến thư mục Conf.

image5. Cấu hình đơn giản trong Repository

Trong phạm vi bài này, tôi chỉ giới thiệu các bạn tạo user và phân quyền đơn giản cho repository. (Bài sau sẽ giới thiệu chi tiết hơn về Authentication trong SVN)

Như phần trên tôi đã nói, các bạn quan tâm đến thư mục conf. Trong thư mục conf, SVN đã tạo sẵn cho các bạn 3 file: svnserve.conf, passwd, authz.

Điều đầu tiên các bạn làm là chỉnh sửa file svnserve.conf

Các bạn có thể đọc hoặc xóa trắng file svnserve.conf đi và cấu hình lại từ đầu (vì thực chất nó cũng đơn giản – có mấy dòng thôi).

Trong phạm vi bài này, bạn chỉ quan tâm đến 4 dòng sau:

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

[general]: đánh dấu bắt đầu session

anon-access: Cấu hình truy cập khi truy cập vào repository lưu không xác thực (không thông qua đăng nhập username, password). Có các giá trị hiệu lực tăng dần: none, read, write (chắc ko cần nói ý nghĩa của các giá trị này nhỉ 🙂 )

auth-access: Cấu hình khi truy cập vào repository có xác thực (đăng nhập bằng username, password). Các giá trị tương tự như trên

password-db: Tên file chứa thông tin username và password truy cập vào kho lưu. Trong trường hợp trên là file passwd (đã được svn tạo sẵn).

Bạn có thể xóa trắng file svnserve.conf và copy 4 dòng trên paste vào là ok.

Việc tiếp theo bạn làm là tạo ra một vài user truy cập vào repository.

Để tạo user truy cập vào repository, bạn mở file passwd  đã có sẵn trong thư mục conf (mở bằng trình soạn thảo văn bản) và xóa trắng đi, gõ lại từ đầu (cho nó chuyên nghiệp 🙂 )

Tạo một vài user (trong ví dụ sau tôi sẽ tạo user admin mật khẩu là nimda, user1 mật khẩu 1resu, user2 có mật khẩu 2resu

[users]
admin = nimda
user1 = 1resu
user2 = 2resu

Bắt đầu bằng dòng báo hiệu session cấu hình User [users], mỗi dòng tiếp theo sẽ là username và password của mỗi user. Cấu trúc Username = password

Phù, như thế là xong phần cấu hình đơn giản.

Hãy test lại xem cấu hình của bạn có OK hay không, hãy mở cmd lên, gõ lệnh sau vào để chạy service của SVN.

svnserve –d –r C:\ARDRepository

Enter, nếu không có báo gì thì là OK (đừng hụt hẫng nhé, tưởng không báo gì lại tưởng cấu hình sai)

6. Tạo dự án để lưu trữ trong Repository

Giữ nguyên cửa sổ cmd đang chạy service SVN ở trên (đừng tắt đi nhé) và mở một cửa sổ CMD khác để thao tác với các lệnh của giao thức SVN.

Mở 1 cửa sở cmd khác, gõ lệnh sau để tạo mới 1 Project lưu trong ARDRepository.

svn mkdir svn://localhost/<tên dự án> –m “<Mô tả thông tin về dự án>” ––username  <tên user> ––password <password>

Ví dụ:

svn mkdir svn://localhost/AS –m “Asia Standard” ––username admin ––password nimda

Khi đó, nếu thành công bạn sẽ nhận được:

Committed revision 1.

Có thể không cần sử dụng tham số password

 

svn mkdir svn://localhost/AP –m “Asia Professional” ––username admin

Khi đó, sau khi enter, SVN yêu cầu bạn phải nhập password cho admin, bạn nhập mật khẩu xong, nếu thành công nó cũng sẽ báo commited.

 

C:\Documents and Settings\Chungtv>svn mkdir svn://localhost/AP –m “Asia Professional” ––username admin
Authentication realm: <svn://localhost:3690> 58a7a8ca-296d-2d48-a4a5-f5420ae2ca80
Password for ‘admin’: *****

Committed revision 2.

Kiểm tra lại danh sách dự án bạn mới tạo bằng lệnh list (hoặc ls) của SVN.

svn ls svn://localhost

6. Tạo service trong window để chạy svn service

Bước tiếp theo, các bạn tạo 1 service để chạy svn service cho repository bạn đã tạo.

Tại sao phải tạo service? ở bước trên, các bạn để ý là muốn sử dụng được các lệnh của giao thức SVN (mkdir, list …) thì không được tắt cửa sổ cmd đang chạy lệnh svnserve –d –r C:\ARDRepository

Như vậy là mỗi khi khởi động lại máy chủ, muốn cho các máy trạm có thể truy cập vào repository của bạn thì bạn phải lên server và chạy lệnh đó để start service svn (bất tiện quá đúng không). Bước này, bạn sẽ tạo 1 service khởi động cùng window.

Bạn tắt của sổ cmd đang chạy service SVN đi để tiếp tục.

Để tạo service, bạn sử dụng lệnh SC (chú ý là bạn phải có quyền admin trên máy này nhé, nhất là các bạn đang dùng win7, hãy righ-click vào cmd.exe và Run as Administrator trước khi tiếp tục).

Trong cửa sổ cmd, bạn gõ lệnh sau để tạo service.

 

sc create <ARDSVN> binpath= “c:\svn-win32-3.5.6\bin\svnserve.exe ––service –r C:\ARDRepository” displayname= “ARD SVN Server” depend= TCPIP start= auto

+ ARDSVN: Tên của service.
+ binpath= “…”: Đường dẫn thực thi service và chỉ định các tham số (chú ý là sau dấu = có khoảng trắng còn trước nó thì không nhé)
+ displayname= “…”: Tên của service sẽ hiện thị trong Services Management (cũng chú ý khoảng trắng sau dấu ‘=).
+ depend = TCPIP: Danh sách các service Dependencies, cần thiết để sử dụng service svn (trong trường hợp này cần phải có service TCPIP)|
+ start= auto: Xác định service này sẽ tự động chạy khi khởi động window.

OK, nếu không có gì sai sót thì sau khi ENTER, bạn sẽ nhận được thông báo:

[SC] CreateService SUCCESS

Tạo xong chưa chắt đã chạy được (vì thế thể cấu trúc trong binpath của bạn sau – thiếu dấu “-“ trước service chẳng hạn)

Bây giờ bạn thử chạy service đó lên bằng lệnh sau:

sc start ARDSVN

Nếu thành công bạn sẽ nhận được thông báo thông tin của service.

Trong trường hợp không thành công, bạn có thể xóa service đi bằng lệnh sc delete ARDSVN và tạo lại từ đầu.

Phù, thế là xong. Chúc các bạn thành công.

Categories: Source Control Tags: ,