Git thực hành (1) - Hệ thống quản lý phiên bản

1. Hệ thống quản lý phiên bản
1.1 Phiên bản là gì?

Trong lập trình, phiên bản (version) là các bản khác nhau của tập tin, thư mục hoặc toàn bộ mã nguồn dự án (từ đây gọi chung là dự án để tiện trình bày). 

Trong quá trình làm việc, mã nguồn của dự án luôn thay đổi, vì vậy bạn sẽ có nhu cầu xem lại hoặc khôi phục lại trạng thái của dự án tại một thời điểm nào đó trong quá khứ.

Xem hình minh họa.


1.2 Hệ thống quản lý phiên bản

Hệ thống quản lý phiên bản (Version Control System - VCS) là một phần mềm giúp chúng ta lưu lại từng thay đổi của mã nguồn dự án, và giúp lấy lại được các phiên bản trước đó nếu cần.

Một hệ thống quản lý phiên bản thường có các chức năng chính sau:

- Khôi phục lại trạng thái của dự án ở các thời điểm khác nhau trong quá khứ

- Biết được ai đã thực hiện các thay đổi trên dự án, và đã thay đổi những gì

- Dễ dàng khôi phục lại các nội dung mã nguồn bị xóa 

- Dễ dàng so sánh những thay đổi của dự án theo các mốc thời gian

Không chỉ trong lĩnh vực lập trình, hệ thống quản lý phiên bản cũng rất hữu ích trong quản lý các sản phẩm trên máy tính nói chung. Ví dụ, bạn đang thiết kế logo, việc chuyển đổi dễ dàng giữa các bản thiết kế logo khác nhau sẽ giúp bạn tiết kiệm được nhiều thời gian, và rất hữu ích trong công việc.

Dựa trên cách tổ chức và hoạt động, các hệ thống quản lý phiên bản được chia thành ba loại, gồm: 

- Hệ thống quản lý phiên bản cục bộ

- Hệ thống quản lý phiên bản tập trung

- Hệ thống quản lý phiên bản phân tán.

1.3 Hệ thống quản lý phiên bản cục bộ

Đây là phương pháp đơn giản, có thể làm thủ công mà không phải dùng tới phần mềm. Cụ thể, bạn có thể tự lưu trữ các phiên bản của thư mục dự án ở các thời điểm khác nhau trong quá trình làm việc thành các tên khác nhau. 

Để tiện theo dõi, bạn có thể đặt tên các phiên bản theo định dạng gồm: tên, thời gian, dấu hiệu nhận diện. Ví dụ TeoShop_2025_2_3_ThietLapMoiTruongTeoShop_2025_2_4_XongTrangDangKy.

Tuy nhiên, khi số lượng thư mục nhiều, liên tục thay đổi theo thời gian, cách làm này sẽ rất khó để theo dõi và quản lý. Để hỗ trợ, các lập trình viên đã tạo ra các công cụ và dùng cơ sở dữ liệu để quản lý các thay đổi.

Công cụ phổ biến được dùng để quản lý phiên bản cục bộ là RCS. Tìm hiểu thêm về RCS tại đây: https://www.gnu.org/software/rcs/

Hệ thống quản lý phiên bản cục bộ có thể lưu mỗi phiên bản trong một thư mục, sử dụng cơ sở dữ liệu để quản lý thông tin các thư mục. Tuy nhiên, hệ thống này không hỗ trợ làm việc trên môi trường cộng tác nhiều người. 

Xem hình minh họa.


1.4 Hệ thống quản lý phiên bản tập trung

Với hệ thống quản lý phiên bản cục bộ, các thành viên trong nhóm rất khó chia sẻ và cộng tác trong quá trình làm việc. Hệ thống quản lý phiên bản tập trung sẽ giải quyết được vấn đề này.

Hệ thống quản lý phiên bản tập trung (Centralized Version Control Systems – CVCS) gồm máy chủ chứa các phiên bản của thư mục dự án và danh sách các máy khách được phép thay đổi thư mục dự án trên máy chủ. Các máy khách sẽ lấy các phiên bản của thư mục dự án từ máy chủ về, thực hiện các thay đổi trên thư mục dự án và cập nhật lại các thay đổi về máy chủ.

Xem hình minh họa.


Một số hệ thống quản lý phiên bản tập trung: CVS, Subversion (SVN).

Hạn chế của hệ thống quản lý phiên bản tập trung là nếu máy chủ bị trục trặc sẽ dẫn tới gián đoạn việc cập nhật phiên bản của các thành viên, hoặc bị mất toàn bộ các phiên bản của thư mục dự án trên server.

1.5 Hệ thống quản lý phiên bản phân tán

Hệ thống quản lý phiên bản phân tán (Distributed Version Control Systems - DVCS) giúp khắc phục các hạn chế của hệ thống quản lý phiên bản tập trung.

Với hệ thống quản lý phiên bản phân tán, các máy client không chỉ chép phiên bản mới nhất của thư mục dự án từ server về, mà nó còn chép toàn bộ cả kho chứa (repository, repo), trong đó bao gồm cả lịch sử các phiên bản. Do vậy, nếu máy chủ gặp trục trặc thì vẫn có thể lấy bất kì kho chứa tại các máy client để khôi phục lại toàn bộ kho chứa cho máy server. 

Ví dụ các hệ thống quản lý phiên bản phân tán: Git, Mercurial, Darcs.

Xem hình minh họa.


Hệ thống quản lý phiên bản phân tán cũng cho phép một máy client có thể liên kết với nhiều kho chứa ở xa cùng lúc, do vậy bạn có thể cùng lúc cộng tác với nhiều nhóm làm việc khác nhau.

1.6 Bài tập

Câu 1.1 Các đặc điểm của hệ thống quản lý phiên bản cục bộ. Phát biểu nào không đúng?

A. Có thể thực hiện thủ công

B. Không hỗ trợ trong môi trường cộng tác nhiều người

C. Có thể dùng phần mềm để quản lý phiên bản kiểu cục bộ

D. Các phiên bản của dự án được lưu tập trung trên một máy server 

Câu 1.2 Các đặc điểm của hệ thống quản lý phiên bản tập trung. Phát biểu nào không đúng?

A. Các phiên bản của dự án được lưu tập trung trên máy server

B. Các máy client sẽ chứa tất cả các phiên bản của thư mục dự án cùng với lịch sử thay đổi  

C. Máy client không thể tải phiên bản của dự án về, khi máy server không hoạt động

D. Hỗ trợ làm việc cộng tác nhiều người

Câu 1.3 Các đặc điểm của hệ thống quản lý phiên bản phân tán. Phát biểu nào không đúng?

A. Các máy client sẽ chứa toàn bộ các phiên bản của dự án, cùng lịch sử thay đổi

B. Hỗ trợ làm việc cộng tác nhiều người

C. Các phiên bản của dự án được lưu trên máy server

D. Bạn không thể tạo và lưu phiên bản khi không có kết nối mạng tới máy server

Câu 1.4 Tìm trang chủ của các phần mềm quản lý phiên bản.

Tên phần mềm

Trang chủ

RCS

CVS

Subversion (SVN)

Git

Mercurial

Darcs

-----

Gợi ý làm bài tập

1.1(D), 1.2(B), 1.3(D)

-----

Cập nhật: 20/2/2025

-----

Bài sau: Git thực hành (2) - Tổng quan về Git