Câu trả lời:
Điều đó có nghĩa là khi bạn thực hiện một cam kết với hệ thống kiểm soát phiên bản, mọi thứ bạn muốn cam kết sẽ được thực hiện, HOẶC không có gì.
Trong CVS, khi bạn cố gắng cam kết, có thể cam kết thành công trên một số tệp, sau đó thất bại ở một số tệp khác (vì chúng đã thay đổi). Điều này khiến kho lưu trữ ở trạng thái không may vì một nửa số cam kết của bạn không có ở đó và có khả năng là bạn đã để mọi thứ ở trạng thái không biên dịch hoặc tệ hơn. Bây giờ bạn phải nhanh chóng tích hợp mọi thay đổi để bạn có thể cam kết các tệp khác trước khi người khác cần cập nhật và nhận bộ thay đổi bị hỏng của bạn.
Trong SVN, điều này sẽ không xảy ra - SVN sẽ cam kết mọi thứ bạn đã thay đổi hoặc sẽ thất bại trong toàn bộ thay đổi. Do đó, bạn sẽ không bao giờ rời khỏi kho lưu trữ trong trạng thái bị hỏng do các vấn đề cam kết.
Điều này được giải thích, ví dụ như trong CVS Bye-bye. Tôi đã bị lật đổ bài viết của Andy Lester :
Nếu tôi cố gắng cam kết trong Subversion, nhưng một trong các tệp có xung đột hoặc đã lỗi thời, không có tệp nào cam kết. Trong CVS, bạn đã có một bộ tệp được cam kết một nửa mà bạn phải sửa NGAY BÂY GIỜ.
Thực tế là CVS buộc lập trình viên phải sửa lỗi hợp nhất ngay lập tức là phản tác dụng. So với điều đó, một tùy chọn để trì hoãn / hủy / hợp nhất các thay đổi là một lợi ích đáng kể.
Các lợi ích khác của SVN so với CVS được giải thích trong bài viết trên là:
Phiên bản địa phương của mọi thứ bạn làm
Nếu bạn muốn cvs diff, bạn phải có khả năng kết nối với kho lưu trữ của mình. Không có kết nối mạng, không có khác biệt. Subversion lưu trữ các bản sao nguyên sơ của địa phương về những gì bạn đang làm việc, vì vậy svn diff sẽ hoạt động tốt. Bạn muốn bắt đầu lại? svn hoàn nguyên hoạt động không kết nối, quá.Tên tượng trưng của các phiên bản
CHÍNH là tên của phần đầu của thân cây trong CVS, nhưng tôi luôn muốn có thể nói ra -r-1 ″ như tôi có thể quay trở lại khi ở PVCS ngày. Với CVS, tôi phải thực hiện một bản ghi cvs về những gì tôi đang chỉnh sửa và sau đó trừ đi. Điều đó không vui chút nào. Với Subversion, tôi có thể nói svn diff -r PREV.Báo cáo trạng thái thực
Trong CVS, cách duy nhất bạn có thể thấy nếu có gì đó trên máy chủ mới hơn là cập nhật cvs và hy vọng rằng bất cứ điều gì xảy ra đều không gây ra bất kỳ xung đột nào. Với lệnh trạng thái svn, tôi nhận được trạng thái thực, vì vậy tôi có thể xem liệu có xung đột TRƯỚC KHI tôi thực hiện cập nhật hay không.Xử lý hữu ích các xung đột hợp nhất
Trong CVS, nếu có xung đột, bạn sẽ nhận được các dấu xung đột trong tệp của mình. Trong Subversion, bạn nhận được các điểm đánh dấu xung đột, CỘNG một bản sao của tệp gốc, xung đột trước, PLUS phiên bản được gửi xuống từ máy chủ, PLUS phiên bản mà bạn đang chỉnh sửa ban đầu. Sau đó, bạn phải giải quyết rõ ràng svn giải quyết filename.txt để thông báo cho Subversion rằng bạn đã khắc phục sự cố. Không còn vô tình cam kết trở lại vào CVS với các dấu hiệu xung đột vẫn còn đó.
Điều đó có nghĩa là tất cả các thay đổi đối với tất cả các tệp được cam kết trong một giao dịch, do đó, tất cả đều thành công hoặc không có gì.
Điều này có nghĩa là bạn ít có khả năng nhận được các chỉnh sửa một phần được kiểm tra vào kho lưu trữ khiến các bản dựng bị lỗi. Bạn vẫn có thể khiến mọi người quên kiểm tra tất cả các tệp có liên quan, nhưng đó là vấn đề về quy trình chứ không phải là vấn đề với hệ thống phiên bản.