P. 1
Subversion Doc

Subversion Doc

|Views: 6|Likes:
Được xuất bản bởiPhạm Ngọc Trí
Tim hieu ve SVN
Tim hieu ve SVN

More info:

Published by: Phạm Ngọc Trí on Aug 17, 2013
Bản quyền:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/22/2014

pdf

text

original

Subversion (SVN) Lê Đình Duy

1. Tại sao cần Subversion Tôi hiện có một chương trình face detector cho phép detect faces trong images (chuyện này OpenCV cũng làm được), và cho phép detect eyes trong detected faces (OpenCV ko có chức năng này). Chương trình này tôi viết từ hồi học PhD và sử dụng khá hiệu quả cho nhiều ứng dụng khác nhau. Tuy nhiên, do chương trình vẫn có một số bugs nên sau vài lần sửa, mỗi lần lưu một nơi khác nhau mà ko có chú thích gì; hậu quả là cho đến giờ, ngồi nhìn 5 copies của chương trình này, tôi ko biết ct nào là phiên bản cuối cùng ko còn bug nữa. Đây là một ví dụ trong số rất nhiều ví dụ của tôi liên quan đến quản lí các phiên bản của chương trình trong quá trình lập trình. Cách làm thông thường là mỗi phiên bản lưu thành 1 thư mục. Sau đó, mỗi khi có project mới thì lại copy thư mục này sang thư mục của project mới, đồng thời vẫn giữ lại thư mục cũ để phòng khi có thể quay lại phiên bản cũ, nếu các cập nhật trong project mới bị lỗi. Làm tới, làm lui vài lần, cuối cùng ko biết mình sửa cái gì, ở đâu, khi nào. Đó cũng chính là lí do tôi cần có một cách quản lí hiệu quả hơn về các sự thay đổi trong quá trình tiến hóa của các code tôi viết. Các version control systems như subversion (svn) chính là giải pháp mà tôi cần tìm.

Version control is the art of managing changes to information. It has long been a critical tool for programmers, who typically spend their time making small changes to software and then undoing or checking some of those changes the next day. Imagine a team of such developers working concurrently - and perhaps even simultaneously on the very same files! - and you can see why a good system is needed to manage the potential chaos.

Có khá nhiều hệ thống hỗ trợ version control, ví dụ như cvs, subversion, git, etc. Ban đầu tôi chỉ biết cvs, nhưng sau đó mới biết thêm subversion, git. Sau khi tìm hiểu, tôi quyết định chọn subversion bởi vì subversion là "hậu duệ" của cvs, ra đời để khắc phục những hạn chế của cvs (hạn chế gì của cvs mà subversion có thể giải quyết, tôi chỉ mới nghe nói, ko hiểu gì vì chưa xài cvs và so sánh nó với subversion bao giờ!). Hiện nay subversion được sử dụng khá thông dụng trong rất nhiều dự án mã nguồn mở. Git mới ra đời gần đây, viết bởi tác giả của Linux. Trong bài nói chuyện của mình ở Google Talk, Linus chỉ trích subversion là sai về nguyên tắc cơ bản. Ý chính ở đây theo tôi hiểu đó là cách quản lí. Git của Linux dùng cơ chế phân tán (distributed), trong khi cvs và subversion dùng cơ chế tập trung (client/server). Tôi thì thích kiểu client/server hơn nên đã chọn subversion.

đây là vấn đề phức tạp nhất. Subversion cung cấp các công cụ để nhận biết sự thay đổi của các tập tin ở working copies so với repository. Working Copies đặt ở client là các phiên bản làm việc của các tập tin trong repository. Mô hình này có 2 khái niệm cơ bản: Repository đặt ở server là nơi tập trung quản lí các phiên bản của các tập tin. trong khi working copies có thể có nhiều (tương ứng với repository đó). và thao tác này gọi là merge . P2 sẽ checkout để lấy 1 phiên bản copy các file của project A này về máy cục bộ của mình (gọi là working copies). . anh ta sẽ dùng lệnh update.c. mỗi tập tin sẽ có dạng Name-Revision.c-rev1 và foo. Cứ mỗi lần commit. dù chỉ thay đổi một tập tin sau lệnh commit. Mỗi khi P1 muốn các thay đổi trên các tập tin của project A ở máy cục bộ của mình cập nhật lên repository. toàn bộ repository sẽ có một con số revision mới (mỗi con số này là duy nhất và số của revision sau lớn hơn số của revision trước). anh ta sẽ dùng lệnh commit. Repository thì chỉ có một. nhưng toàn bộ các tập tin của repository sẽ có cùng một con số revision. Do đó. Sau đó. Nếu P2 muốn thấy những thay đổi của P1 trên repository cập nhật xuống phiên bản đang dùng của mình.c-rev2 phải có nội dung khác nhau.c-rev1 và foo. Trường hợp P1 và P2 cùng cập nhật một tập tin. Nói một cách đơn giản. để hệ thống có thể quản lí được sự thay đổi của các tập tin.Mô hình client/server Một kịch bản thường thấy là các tập tin của project A được lưu ở repository.c-rev2 là 2 revision của tập tin foo.2. ko nhất thiết là foo. mỗi thành viên của project A. Để quản lí các phiên bản khác nhau. đồng thời cũng cung cấp công cụ để giúp việc merge được dễ dàng. Hình 1 . Ví dụ foo. Một số khái niệm Subversion dựa trên mô hình quản lí tập trung kiểu client/server. Một điểm cần lưu ý là trong subversion. ví dụ P1. subversion dùng khái niệm revision.

hoặc IIS (nếu xài Windows). hãy lấy một mô hình thông dụng về client/server đó là www. Các bước cài đặt Để cho dễ hình dung. ví dụ như dùng nút Del trong Explorer. Những note này sẽ được lưu vào history để sau này khi view lên có thể nhận biết được hiện trạng của từng revision. etc đều phải thông qua subversion. Trong mô hình này. ví dụ như Firefox hay IE. người ta thường note lại những thay đổi này trước khi commit. thì mọi thao tác liên quan đến tập tin đó. trong trường hợp này chính là giao thức http. thay vào đó nên dùng lệnh xóa của các subversion clients. để thực hiện các yêu cầu tương ứng với phần mềm server (request). sửa. 3. để khi muốn quay trở lại trạng thái trước đó cũng rất dễ dàng.Hình 2 . và một phần mềm client. Client và server phải có một số qui ước chung cho việc trao đổi với nhau. ví dụ như xóa. để có thể nhận biết được những thay đổi qua mỗi lần commit. Một lưu ý rất căn bản đó là nếu bạn muốn subversion quản lí các phiên bản/thay đổi của một tập tin nào đó. . Nói một cách khác. để đứng trung gian giữa người dùng và phần mềm server. ví dụ như Apache HTTP server. bạn nên tránh xóa một tập tin trong working copies bằng chức năng thông thường của file manager. tạo mới.Minh họa về các revision của một repository Thông thường. để cung cấp (serve) các dịch vụ Web. bạn cần phải có một phần mềm server.

Ví dụ Subclipse được tích hợp vào Eclipse (xem hình 3). cuối cùng thì cũng có một vài phương án khả dĩ. 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. Stand-alone clients là loại đứng như một ứng dụng độc lập. Ubuntu hay Fedora. và một phần mềm client (xem hình 1). khi dùng subversion (svn). Nếu bạn dùng Debian. Ví dụ như TortoiseSVN tích hợp vào Windows File Explorer. Tuy nhiên. .Mô hình client/server của subversion Cũng tương tự như vậy. bỏ cái nào. 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. 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). bạn cần phải có một phần mềm server. IDE plug-in clients là loại tích hợp vào các môi trường lập trình (IDE). 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. Desktopintergrated clients là loại được tích hợp vào các phần mềm desktop. nghĩa là không phụ thuộc vào phần mềm nào khác.Hình 1 . Các phần mềm svn client có thể chia làm 3 loại chính: stand-alone clients. Tôi cũng mất cả tuần nhưng cũng không có được câu trả lời ưng ý. desktopintegrated clients và IDE plug-in clients. thì phải nói là ko có gì đơn giản hơn.

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. thì TortoiseSVN có lẽ là lựa chọn số 1. Nếu bạn dùng Ubuntu Linux. thì kdesvn cũng là một sự lựa chọn. rất nhanh.TortoiseSVN tích hợp với Windows Explorer Hình 3 . 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://.Hình 2 . 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. Tôi đã xài thử qua thấy rất tiện.

Cài đặt và sử dụng khá đơn giản. 4. Bằng cách này tôi khỏi phải mất công chép tới chép lui code. Tôi ko dùng Visual Studio nữa nên ko biết client nào là tốt cho VS. hoặc khi chuyển sang project mới. Nói chung. Lúc cài đặt ban đầu. nếu tôi xài máy Linux thì khi lập trình trong Eclipse.2. Nếu bạn lập trình bằng Eclipse. Do đó. chắc là vì tôi dùng gnome chứ ko phải kde cho máy Linux của mình). Codes Đây là tình huống thông dụng nhất. svn được dùng cho mục đích này. chạy khá nhanh. tôi checkout về để cập nhật. rồi tiếp tục thử nghiệm tiếp. sau đó commit lên lại. Nếu thử nghiệm sai. cũng cần có cách để lưu lại các trạng thái stable của hệ thống. chứ thao tác thì chậm ơi là chậm. 4. đồ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). Trong hoàn cảnh của tôi. Eclipse Eclipse là IDE để lập trình. 4. phải cài thêm plug-ins. lại quay lại trạng thái trước đó một cách dễ dàng. tôi xài subclipse. Bạn có thể tạo nhiều repository cho mình. 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). tôi lại checkout ra trên máy Linux. quan điểm là những gì độc . Sau đó nếu dùng máy Windows. Tôi thì xài server Linux của lab để đặt repository. tôi đặt thư mục Eclipse để cho svn quản lí. Khi chọn client. Nếu muốn hỗ trợ lập trình C++ hay PHP. nhất là khi code thay đổi xoành xoạch vì có bug. 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). 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. mỗi repository cho một mục đích khác nhau. Một số kịch bản sử dụng 4. ví dụ cài thử vài svn client lên để thử. Có vẻ như AnkhSVN cũng là một lựa chọn không tồi. Eclipse chỉ hỗ trợ lập trình Java. Mỗi khi install xong môi trường nào chạy thấy ổn định là commit. nên chọn loại có thể hỗ trợ nhiều giao thức một chút. một repository để lưu virtual appliance và một repository để lưu codes của project XYZ. Về client. nếu tôi dùng máy Windows thì tôi xài TortoiseSVN. dịch và chạy trên đó. tôi có thể thử nghiệm nhiều thứ.1. Ví dụ repository để lưu eclipse. Khi muốn chạy ứng dụng trên Linux. hiệu chỉnh code.nhưng tôi xài thì thấy rất khó chịu vì nó cực kì chậm.3. Do đó. code được viết để chạy cả trên Windows và Linux. Cũng tương tự như trường hợp Eclipse kể trên. ngoài ra thì xài kdesvn (Tôi dùng kdesvn chỉ vì nó rất tiện cho phần authentication. subclipse cũng khá tốt. Do đó tôi để code tập trung trên repository. Virtual appliance Tôi dùng virtual appliance cho máy ảo Linux. 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.

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. Đối với code. Bạn chỉ có thể thấy. . còn những gì liên quan với nhau thì để chung trong một repository. Phải dùng svn clients mới có thể xem được.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. nếu xem ở ngoài file manager. cũng như những gì mình lưu trong repository. branches và tags. 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. ví dụ như tập tin của máy ảo. Giả sử tập tin này là rất lớn. Sẽ đến một lúc nào đó. Tôi vẫn ko hiểu một số chuyện: . 5. svn cũng tương tự.lập thì tách riêng thành các repository khác nhau. 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.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ó. 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 sẽ ko thể nào thấy được cấu trúc repository của mình. Hi vọng là ở post sau. Lê Đình Duy http://ledduy.com . thì ko biết làm cách nào. svn khuyên nên tổ chức thành 3 thư mục con trong repository đó là trunk.blogspot. thao tác và export các tables khi dùng các lệnh theo đúng cú pháp của mySQL. 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). 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.

You're Reading a Free Preview

Tải về
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->