Đánh Giá Lại Hệ Thống Kiểm Soát Phiên Bản
Trước bối cảnh việc chuyển đổi hệ thống kiểm soát phiên bản đòi hỏi nhiều công sức (đặc biệt là chi phí đào tạo), trong những ngày qua nhóm phát triển của chúng tôi đã tiến hành rà soát lại quyền quản lý kho chứa SVN, đồng thời điều chỉnh quy trình làm việc phát triển phần mềm trong tương lai. Kết quả là chúng tôi quyết định tiếp tục sử dụng SVN ít nhất cho đến khi hoàn thành giai đoạn đầu của dự án, với kỳ vọng sẽ khai thác hiệu quả hơn so với trước đây.
Tuy nhiên xuất phát từ sở thích cá nhân, tôi vẫn tiếp tục nghiên cứu các hệ thống SCM phân tán (DVCS) khác nhau, đồng thời cài đặt và trải nghiệm một số trong số chúng. Trong số này, Darcs là hệ thống gây ấn tượng mạnh nhất với tôi. Tuy nhiên xét về mức độ phổ biến, Mercurial có vẻ là lựa chọn hợp lý hơn.
Dù hiện nay trên mạng xã hội dường như phần lớn người dùng ủng hộ Mercurial (kèm theo phiên bản Tortoise hoàn thiện nhất), tôi vẫn tìm thấy một bài viết củng cố quan điểm cá nhân của mình: “Whose Distributed VCS Is The Most Distributed?” - tác phẩm được viết vào tháng 8 năm 2006. Dù thời gian đã trôi qua gần hai thập kỷ và các phần mềm mã nguồn mở luôn không ngừng phát triển, nhưng lập luận trong bài vẫn giữ nguyên giá trị tham khảo. Cá nhân tôi thừa nhận lựa chọn này xuất phát từ trực giác chứ không có cơ sở khoa học.
Tác giả bài viết đã nêu bật 8 tiêu chí lý tưởng cho một hệ thống kiểm soát phiên bản phân tán hoàn hảo - những tiêu chí hoàn toàn phù hợp với nhu cầu thực tế của tôi:
- Mô hình hợp tác cốt lõi phải dựa trên cơ chế phân nhánh (branching)
- Việc tạo phân nhánh phải đơn giản, không tốn kém tài nguyên
- Khả năng hợp nhất (merge) phân nhánh thông minh
- Các tập thay đổi (changeset) có thể hợp nhất độc lập mà không cần lịch sử cập nhật toàn bộ
- Phân nhánh đồng thời là bản sao kho chứa, giữ nguyên toàn bộ lịch sử
- Thao tác hợp nhất không làm mất thông tin lịch sử cập nhật
- Các thao tác commit, branch, merge đều thực hiện được ngoại tuyến
- Tốc độ tối ưu cho đa số ứng dụng
Về giải thích chi tiết từng tiêu chí, độc giả quan tâm có thể tìm đọc nguyên bản bài viết - tác giả trình bày rất rõ ràng mạch lạc. Về phần tôi, điều quan trọng nhất là hệ thống phải cho phép hợp tác dựa trên các phân nhánh chứ không phải từng commit đơn lẻ. Mỗi lần tôi hợp nhất các thay đổi từ nhóm phát triển (trunk) cần chứa đựng chuỗi commit cục bộ đã thực hiện. Trên nền tảng này, hệ thống cần đơn giản hóa quy trình làm việc (thay thế update/commit bằng pull/push), bảo toàn thông tin lịch sử (thời điểm phân nhánh, hợp nhất, các sửa đổi trung gian), đồng thời vận hành nhanh chóng.
Kết luận của tác giả bài viết nghiêng về Darcs, quan điểm này có thể tranh luận nhưng hoàn toàn thuyết phục. Trong khi đó SVN rõ ràng không đáp ứng được phần lớn các tiêu chí trên. Qua loạt thử nghiệm phân nhánh/hợp nhất gần đây, tôi nhận thấy SVN thiếu thân thiện với người dùng (so với thiết kế phân tán hiện đại). Lý do cốt lõi nằm ở thiết kế ban đầu của SVN - hệ thống này không được xây dựng để giải quyết bài toán hợp tác dựa trên phân nhánh.
Đáng tiếc là Darcs hiện vẫn gặp vấn đề với hỗ trợ tiếng Trung, tuy nhiên có thể khắc phục bằng cách thiết lập biến môi trường phù hợp. Bạn đọc quan tâm nên tham khảo mục “Character escaping and non-ASCII character encodings” trong tài liệu hướng dẫn chính thức của Darcs để tìm hiểu chi tiết.