Trước khi tìm hiểu về Git, bạn cần hiểu về thuật ngữ Hệ thống quản lý phiên bản (VCS).
VCS là gì
VCS là viết tắt của Hệ thống quản lý phiên bản, đây là một loại phần mềm giúp chúng ta quản lý sự thay đổi trong mã nguồn của dự án một cách dễ dàng và thuận tiện theo thời gian.
Bạn đang xem: VCS Là Gì, VCS Tập Trung và VCS Phân Tán Khác Nhau Như Thế Nào
VCS lưu trữ tất cả sự thay đổi trong mã nguồn của dự án trong một cơ sở dữ liệu đặc biệt. Chúng ta có thể dễ dàng tra cứu sự thay đổi trong mã nguồn của một tập tin tại bất kỳ thời điểm nào và nếu cần, chúng ta có thể dễ dàng phục hồi mã nguồn của tập tin đó về một thời điểm trước đó.
Lưu ý: Hai thuật ngữ Hệ thống quản lý phiên bản (VCS) và Quản lý mã nguồn (SCM) được sử dụng thay thế cho nhau.
Tại sao cần sử dụng VCS
VCS đặc biệt hữu ích trong các dự án lớn yêu cầu sự tham gia của nhiều lập trình viên. Ví dụ, trong cùng một thời điểm, chúng ta cần phát triển nhiều tính năng mới cho phần mềm. Mỗi thành viên trong nhóm được giao để phát triển một tính năng. Khi hai thành viên hoàn thành hai tính năng riêng biệt cùng một lúc, việc hợp nhất mã nguồn có thể gây xung đột vì cả hai đã sửa đổi cùng một đoạn mã trên cùng một tập tin.
Xem thêm : Tampon là gì? Cách sử dụng và lưu ý khi dùng như thế nào?
Trong trường hợp này, sử dụng VCS, chúng ta có thể dễ dàng kiểm tra sự thay đổi được thực hiện bởi ai và cho tính năng nào.
VCS phân tán và VCS tập trung
Theo thiết kế, VCS chia thành hai loại khác nhau là VCS tập trung (centralized) và VCS phân tán (distributed).
Trong VCS tập trung, mã nguồn của dự án được lưu trữ trên một kho tập trung (hay kho trung tâm) trên một máy chủ. Mỗi lập trình viên muốn thực hiện thay đổi cho mã nguồn lưu trữ trong kho tập trung (kho trung tâm) cần thực hiện công việc là cập nhật mã nguồn trên máy tính của mình với kho tập trung trước khi thực hiện thay đổi.
Dưới đây là ví dụ để mọi người có thể hiểu rõ sự khác biệt giữa hai loại VCS tập trung và VCS phân tán.
Trong dự án, có bốn người là A, B, C và D đang làm việc và mã nguồn của dự án này được quản lý bởi một phần mềm VCS tập trung có tên là Subversion (hay SVN).
Lúc 08:00:00 hôm nay, lập trình viên A đến công ty, mở máy tính và cập nhật mã nguồn trên máy tính của mình để đồng bộ với mã nguồn lưu trữ trên kho tập trung. Sau đó, A bắt đầu sửa một lỗi mà anh ta tìm thấy ngày hôm qua. A viết mã rất nhanh, chỉ mất 15 phút để sửa lỗi và để sửa lỗi này, A đã phải thay đổi nội dung của 50 tập tin khác nhau trong mã nguồn.
Xem thêm : Legal Document
Sau đó, A đẩy (push) mã mới của mình lên kho tập trung. Do không có ai đã sửa mã nguồn trên kho tập trung nên thay đổi của A được chấp nhận và mã nguồn trên kho tập trung được cập nhật.
Lúc 08:30:00, ba người B, C và D đến công ty, mở máy tính để tiếp tục viết code cho 3 tính năng khác nhau và cũng quan trọng của dự án.
Lúc 08:50:00, khi B tạo một phiên bản mới cho mã nguồn của mình, theo loại VCS tập trung, anh ta phải cập nhật mã trên máy tính của mình với kho trung tâm trên máy chủ trước khi có thể tạo phiên bản mới. Tuy nhiên, khi cập nhật mã trên kho tập trung, B gặp phải xung đột nội dung do anh ấy đã sửa đổi 10 tập tin mà A đã sửa đổi lúc 08:15:00 và đẩy lên kho tập trung.
Lúc 09:15:00, khi C và D muốn tạo phiên bản mới cho mã nguồn và gặp phải lỗi tương tự như B do đã sửa đổi các tập tin mà A cũng đã sửa đổi trước đó.
Vì vậy, để giải quyết xung đột, B, C và D cần xem lại sự thay đổi trong mã nguồn của mình và của A để tránh xóa nhầm mã và tạo ra lỗi mới.
Ngược lại, với VCS phân tán, mỗi lập trình viên có một kho riêng của mình và có thể tự do phát triển tính năng khác nhau và tạo phiên bản mới (commit) mà không cần đồng bộ với kho trên máy chủ. Điều này giúp lập trình viên tập trung vào việc hoàn thành tính năng hoặc sửa lỗi mà không phải lo lắng về việc cập nhật mã liên tục trên máy tính của họ để giảm xung đột. Xử lý xung đột (nếu có) sẽ được thực hiện một lần duy nhất.