Saturday, March 14, 2009

[Sofware Engineering] - Subversion (SVN) - 2


3. Các bước cài đặt

Để cho dễ hình dung, hãy lấy một mô hình thông dụng về client/server đó là www. Trong mô hình này, bạn cần phải có một phần mềm server, để cung cấp (serve) các dịch vụ Web, ví dụ như Apache HTTP server, hoặc IIS (nếu xài Windows); và một phần mềm client, để đứng trung gian giữa người dùng và phần mềm server, để thực hiện các yêu cầu tương ứng với phần mềm server (request), ví dụ như Firefox hay IE. Client và server phải có một số qui ước chung cho việc trao đổi với nhau, trong trường hợp này chính là giao thức http.

Hình 1 - Mô hình client/server của subversion

Cũng tương tự như vậy, khi dùng subversion (svn), bạn cần phải có một phần mềm server, và một phần mềm client (xem hình 1). Danh sách các phần mềm server tương ứng với các hệ điều hành có thể xem ở đây. Nếu bạn dùng Debian, Ubuntu hay Fedora, thì phải nói là ko có gì đơn giản hơn, chỉ cần một lệnh từ command line: apt-get install subversion (nếu là Debian hay Ubuntu).

Chọn phần mềm client mới là mệt mỏi. Nếu bạn nhìn vào danh sách này thì sẽ thấy hoa cả mắt không biết chọn cái nào, bỏ cái nào. Tôi cũng mất cả tuần nhưng cũng không có được câu trả lời ưng ý. Tuy nhiên, cuối cùng thì cũng có một vài phương án khả dĩ.

Các phần mềm svn client có thể chia làm 3 loại chính: stand-alone clients, desktop-integrated clients và IDE plug-in clients. Stand-alone clients là loại đứng như một ứng dụng độc lập, nghĩa là không phụ thuộc vào phần mềm nào khác. Desktop-intergrated clients là loại được tích hợp vào các phần mềm desktop. Ví dụ như TortoiseSVN tích hợp vào Windows File Explorer, mỗi khi bạn click chuột phải trong màn hình của Windows File Explorer sẽ thấy các chức năng của svn client (xem hình 2). IDE plug-in clients là loại tích hợp vào các môi trường lập trình (IDE). Ví dụ Subclipse được tích hợp vào Eclipse (xem hình 3).

Hình 2 - TortoiseSVN tích hợp với Windows Explorer

Hình 3 - Subclipse tích hợp với Eclipse

Subversion hỗ trợ khá nhiều giao thức để kết nối giữa client và server. Ví dụ bạn có thể dùng các giao thức của ứng dụng web như http:// hoặc https://, hay các giao thức của svn như svn:// hoặc svn+ssh://, hoặc nếu phần mềm client và server cài chung trên 1 máy thì có thể dùng file:///. Việc cho phép server hỗ trợ giao thức nào phụ thuộc vào lúc cấu hình.

Nếu bạn dùng Windows, thì TortoiseSVN có lẽ là lựa chọn số 1. Tôi đã xài thử qua thấy rất tiện, rất nhanh. Nếu bạn dùng Ubuntu Linux, thì kdesvn cũng là một sự lựa chọn, nhưng tôi xài thì thấy rất khó chịu vì nó cực kì chậm. Khi chọn client, nên chọn loại có thể hỗ trợ nhiều giao thức một chút, đồng thời cung cấp các hỗ trợ tiện lợi cho authentication (kiểm tra định danh khi bạn truy cập máy khác).

Nếu bạn lập trình bằng Eclipse, subclipse cũng khá tốt. Cài đặt và sử dụng khá đơn giản, chạy khá nhanh. Tôi ko dùng Visual Studio nữa nên ko biết client nào là tốt cho VS. Có vẻ như AnkhSVN cũng là một lựa chọn không tồi.

Tôi thì xài server Linux của lab để đặt repository. svn thì đã cài sẵn và có hỗ trợ giao thức svn+ssh nên tôi chỉ xài giao thức này để liên lạc giữa client và server (Thực sự là tôi ko biết cấu hình server như thế nào mặc dù có đọc qua tài liệu cấu hình server. Tuy nhiên tôi nghĩ nếu xài máy Linux cho phần mềm server và chọn giao thức svn+ssh để hỗ trợ thì việc cấu hình ko có gì khó khăn vì mọi cái đều theo mặc định mà làm).

Về client, nếu tôi dùng máy Windows thì tôi xài TortoiseSVN, nếu tôi xài máy Linux thì khi lập trình trong Eclipse, tôi xài subclipse, ngoài ra thì xài kdesvn (Tôi dùng kdesvn chỉ vì nó rất tiện cho phần authentication, chứ thao tác thì chậm ơi là chậm, chắc là vì tôi dùng gnome chứ ko phải kde cho máy Linux của mình).

4. Một số kịch bản sử dụng

4.1. Eclipse

Eclipse là IDE để lập trình. Lúc cài đặt ban đầu, Eclipse chỉ hỗ trợ lập trình Java. Nếu muốn hỗ trợ lập trình C++ hay PHP, phải cài thêm plug-ins. Mỗi lần cài như vậy có thể sẽ có những vấn đề liên quan đến tương thích. Do đó, tôi đặt thư mục Eclipse để cho svn quản lí. Mỗi khi install xong môi trường nào chạy thấy ổn định là commit, rồi tiếp tục thử nghiệm tiếp. Nếu thử nghiệm sai, lại quay lại trạng thái trước đó một cách dễ dàng.

4.2. Virtual appliance
Tôi dùng virtual appliance cho máy ảo Linux. Cũng tương tự như trường hợp Eclipse kể trên, tôi có thể thử nghiệm nhiều thứ, ví dụ cài thử vài svn client lên để thử. Do đó, cũng cần có cách để lưu lại các trạng thái stable của hệ thống. svn được dùng cho mục đích này.

4.3. Codes
Đây là tình huống thông dụng nhất. Trong hoàn cảnh của tôi, code được viết để chạy cả trên Windows và Linux. Do đó tôi để code tập trung trên repository. Sau đó nếu dùng máy Windows, tôi checkout về để cập nhật, hiệu chỉnh code, sau đó commit lên lại. Khi muốn chạy ứng dụng trên Linux, tôi lại checkout ra trên máy Linux, dịch và chạy trên đó. Bằng cách này tôi khỏi phải mất công chép tới chép lui code, nhất là khi code thay đổi xoành xoạch vì có bug, hoặc khi chuyển sang project mới.

Cũng xin nói thêm một ý không kém phần quan trọng đó là tổ chức repository (xem chi tiết ở đây). Bạn có thể tạo nhiều repository cho mình, mỗi repository cho một mục đích khác nhau. Ví dụ repository để lưu eclipse, một repository để lưu virtual appliance và một repository để lưu codes của project XYZ. Nói chung, quan điểm là những gì độc lập thì tách riêng thành các repository khác nhau, còn những gì liên quan với nhau thì để chung trong một repository. Đối với code, svn khuyên nên tổ chức thành 3 thư mục con trong repository đó là trunk, branches và tags. Tôi đã đọc qua cũng hiểu vấn đề nhưng chưa trải qua dùng thực sự nên ko muốn viết ở đây. Hi vọng là ở post sau.

5. Một số điều bàn thêm

Giống như khi bạn dùng một hệ quản trị csdl nào đó ví dụ như mySQL để quản lí các tables của mình, bạn sẽ ko thể nào "nhìn thấy" các tables này ở ngoài file manager thông thường (ví dụ Windows Explorer). Bạn chỉ có thể thấy, thao tác và export các tables khi dùng các lệnh theo đúng cú pháp của mySQL. svn cũng tương tự, nếu xem ở ngoài file manager, bạn sẽ ko thể nào thấy được cấu trúc repository của mình, cũng như những gì mình lưu trong repository. Phải dùng svn clients mới có thể xem được.

Tôi vẫn ko hiểu một số chuyện:
- svn lưu lại mọi thay đổi trong quá trình bạn thao tác trên các tập tin. Sẽ đến một lúc nào đó, kích thước của repository sẽ lớn lên. Nếu tôi muốn xóa các revision cũ hơn, thì ko biết làm cách nào. Có vẻ cũng ko đơn giản vì phải xài svndump và thêm mấy thứ lằng nhằng khác.
- các phần mềm client ví dụ như TortoiseSVN có vẻ như tự động phát hiện sự thay đổi của tập tin nằm dưới sự kiểm soát của nó. Giả sử tập tin này là rất lớn, ví dụ như tập tin của máy ảo, việc kiểm soát sự thay đổi nếu tập tin máy ảo được cập nhật thường xuyên có làm hệ thống chạy chậm đi hay không (giống như cài Norton Anti Virus vào thì copy dữ liệu cực chậm vì mỗi thao tác đọc/ghi đều phải qua NAV để kiểm tra virus).

Lê Đình Duy

Xem đầy đủ bài viết tại http://ledduy.blogspot.com/2009/03/sofware-engineering-subversion-svn-2.html

No comments:

Post a Comment

Popular Posts