Version Control System (VCS) là một phần mềm mà giúp các lập trình viên phần mềm làm việc với nhau và duy trì một lịch sử đầy đủ công việc của họ. Dưới đây là mục tiêu của một Version Control System
- Cho phép các lập trình viên phần mềm làm việc tương tác với nhau;
- Không viết đè lên thay đổi của mỗi thành viên tạo ra;
- Duy trì lịch sử của mỗi phiên bản.
Một VCS được chia thành hai kiểu
- Hệ thống quản lý phiên bản tập trung (CVCS), và
- Hệ thống quản lý phiên bản phân phối/phân cấp (DVCS).
Trong phần hướng dẫn này, chúng ta sẽ chỉ tập trung vào hệ thống phiên bản tập trung mà đặc biệt là Subversion. Subversion sử dụng một máy chủ trung tâm để giữ tất cả các file và cung cấp quyền hợp tác của team.
Thuật ngữ kiểm soát phiên bản (Version control) trong SVN
Hãy cùng bàn về một số mục mà chúng ta sử dụng trong phần hướng dẫn này:
- Repository (Kho chứa): Một repository là trái tim của bất cứ hệ thống quản lý phiên bản. Nó là khu vực trung tâm để các lập trình viên giữ tất cả công việc của họ. Kho lưu không chỉ lưu các file mà còn lưu giữ cả lịch sử làm việc. Kho lưu được truy cập thông qua mạng, thực hiện vai trò như một máy chủ và công cụ điều khiển phiên bản là một máy khách. Các máy khách có thể kết nối với repository và sau đó họ có thể giữ/lấy lại những thay đổi họ thực hiện tới/từ repository. Bằng cách giữ các thay đổi , một khách tạo các thay đổi này tới người khác và bằng cách lấy lại những thay đổi, một khách có thể nhận được các thay đổi được thực hiện bởi người khác như là một bản sao công việc.
- Trunk (Thân): Một thân là một thư mục tại đó tất cả các phát triển chính xảy ra và thường được kiểm tra bởi các lập trình viên làm việc trên dự án.
- Tags (Thẻ): Thư mục các thẻ được sử dụng để giữ các ảnh chụp nhanh (snapshot) được đặt tên của dự án. Hoạt động thẻ cho phép đặt các tên để mô tả và dễ ghi nhớ cho các phiên bản cụ thể trong repository. Ví dụ, LAST_STABLE_CODE_BEFORE_EMAIL_SUPPORT thì dễ ghi nhớ hơn 7ceef8cb-3799-40dd-a067-c216ec2e5247 của repository UUID và Revision: 13
- Branches (Nhánh): Hoạt động nhánh được sử dụng để tạo một tiến trình khác của sự phát triển. Nó hữu ích khi bạn muốn tiến trình phát triển của bạn phân theo hai hướng khác nhau. Ví dụ, khi bạn công bố phiên bản 5.0, bạn có thể muốn tạo ra một nhánh để phát triển các tính năng phiên bản 6.0 mà được giữ riêng rẽ với phiên bản 5.0.
- Working copy (Bản sao công việc ): Bản sao công việc là hình chụp nhanh (snapshot) của repository. Kho lưu được chia sẻ bởi cả team, nhưng người ta không thể sửa nó một cách trực tiếp. Thay vào đó mỗi nhà lập trình kiểm tra bản sao công việc. Bản sao công việc là khu vực làm việc riêng, tại đó các nhà lập trình có thể thực hiện công việc của họ riêng rẽ một mình, cách biệt với phần còn lại của team.
- Các thay đổi commit: Commit là tiến trình của việc giữ các thay đổi từ khu vực làm việc riêng tới máy chủ trung tâm. Sau khi commit, các thay đổi sẵn sàng được sử dụng bởi các thành viên khác trong team. Các thành viên khác có thể lấy lại các thay đổi này bằng cách cập nhật bản sao công việc. Commit là một hoạt động nguyên tử (atomic operation) tức là không thể chia nhỏ hoạt động đó được. Hoặc là nó thành công hoặc là thất bại. Bạn không bao giờ nhìn thấy một commit hoàn thành giữa chừng.