Tìm hiểu Version Control – Bài 1

0
873

Ta có thể hình dung đơn giản, công cụ này (Version Control System – VCS) giống như một chiếc nút Undo thần kì cho dự án của bạn. Nó giúp cho việc lưu trữ các phiên bản khác nhau của dự án bạn đang làm tại nhiều thời điểm (không theo bất kỳ quy tắc, thời gian cố định hay qui định gì) một cách dễ dàng. Bạn có thể dễ dàng khôi phục lại một bản lưu trước đó và so sánh nội dung với dữ liệu hiện tại để tìm ra sự khác biệt. Đồng thời, nó cũng giúp cho ta dễ dàng hợp tác làm việc với nhiều người khác trong cùng một dự án.

VCS cực kỳ hữu hiệu cho những lập trình viên hay những người làm bên mảng thiết kế đồ hoạ, thiết kế web. Cụ thể hơn, ta không cần phải nén phần dữ liệu của mình lại và gửi qua gửi lại trong lúc biên tập, chỉnh sửa khi thực hiện dự án với các đồng nghiệp khác. Tất cả đã có VS quản lý.

Hệ thống Quản lý Phiên bản Cục bộ (Local Version Control Systems)

Lấy ví dụ một anh lập trình viên thiết kế giao diện web. Anh ta sẽ liên tục chỉnh sửa layout, thiết kế lại sao cho đúng yêu cầu. Công việc này đòi hỏi phải liên tục chỉnh sửa các tập tin nên anh ta sẽ tổ chức chia các dữ liệu này vào từng thư mục tương ứng. Nếu có sự thay đổi nào anh ta lại nhân ra một phiên bản và đặt vào thư mục khác. Việc này là ý tưởng sơ khai và đơn giản nhất của một VCS nhưng cũng gây ra một nguy hại khá lớn. Nếu cứ tự tổ chức, tự quản lý với mớ thư mục và dữ liệu đó, chắc chắn trong một thời gian ngắn nó sẽ khiến anh ta nhầm lẫn và chỉnh sửa không đúng tập tin mà mình cần truy xuất.

Chỉ cần từ 10 thư mục trở lên thôi là bảo đảm công việc sẽ bắt đầu có sự nhầm lẫn.

Để giải quyết vấn đề này, các lập trình viên từ lâu đã phát triển nên một VCS cục bộ với một cơ sở dữ liệu đơn giản chỉ nhằm mục đích duy nhất: lưu giữ tất cả từng phiên bản và ghi nhận các thay đổi của từng phiên bản sau đó.

localvcs

Công cụ nổi tiếng có thể kể đến là RCS (Revision Control System), vẫn còn được sử dụng ở nhiều hiện nay. Thậm chí trong các máy tính MAC OS X nó vẫn tích hợp vào các công cụ lập trình (IDE) lệnh rcs để người dùng có thể tự quản lý các phiên bản khác nhau của dự án tại từng thời điểm.

Hệ thống Quản lý Phiên bản Tập trung (Centralized Version Control Systems)

Nhưng nếu áp dụng như cách trên vừa nói, chuyện lại nảy sinh tiếp theo là: Tui muốn chia sẻ các phiên bản dự án của mình với các đồng nghiệp khác trong cùng hệ thống (trong một công ty) thì làm thế nào? Vẫn phải tìm và copy rồi gửi cho đồng nghiệp? Việc tự quản lý các phiên bản để tránh nhầm lẫn đã giải quyết xong rồi, còn chia sẻ thế nào cho nhanh chóng lại nảy sinh.

Giải pháp VCS tập trung ra đời.

Các hệ thống này – có thể kể tên như CVS, Subversion, Perforce – đều triển khai một máy chủ chứa toàn bộ các tập tin phiên bản khác nhau của tất cả các dự án của từng người trong nội bộ công ty đang làm việc. Các đồng nghiệp này có thể truy xuất lên đây và xem của nhau đều được.

centralizedvcs

Cách này tỏ ra hiệu quả trong thời gian dài, khi mà nó giải quyết được cả 2 vấn đề là tổ chức, lưu trữ các phiên bản hiệu quả; chia sẻ và truy xuất các phiên bản của từng cá nhân khác nhau dễ dàng hơn.

Tuy nhiên nó vẫn bộc lộ một điểm yếu khác. Chuyện gì sẽ xảy ra nếu máy chủ đó gặp sự cố? Nếu nó bị ngưng hoạt động, suốt thời gian đó cho đến khi khắc phục xong, làm sao có thể truy xuất được dữ liệu trên đó để làm việc? Chuyện này cũng xảy ra tương tự với hệ thống cục bộ, khi mà bất ngờ vào một ngày…xấu trời nào đó ổ cứng máy tính chưa kịp sao lưu thì đã ra đi vĩnh viễn?

Hệ thống Quản lý Phiên bản Phân tán (Distributed Version Control Systems)

VCS phân tán sẽ giải quyết câu chuyện đau đầu trên. Có thể kể những cái tên tiêu biểu như Git, Mercurial, Bazaar hay Darcs. Ở giải pháp này, các máy truy cập tới không đơn giản chỉ tải về phiên bản mới nhất của dữ liệu, mà nó sẽ tải về toàn bộ kho chứa (Repository). Do đó, nếu có một máy chủ nào ngưng hoạt động đi nữa, thì cũng có thể truy xuất được dữ liệu dễ dàng từ một máy khác để khôi phục lại những gì đã mất.

centralizedvcs

Điểm nổi trội khác nữa có thể kể đến, đó là các hệ thống kiểu này xử lý rất hiệu quả trong việc quản lý các Repository từ xa, nhằm giúp cho một người có thể cộng tác và làm việc với nhiều người khác nhau ở bất kỳ đâu.

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com

This site uses Akismet to reduce spam. Learn how your comment data is processed.