2008-10-28 20 views
51

Tôi đã sử dụng cả SVN và CVS một chút, nhưng sẽ cần phải chọn một cho một dự án mới mà tôi sẽ bắt đầu.Subversion vs CVS

Có thể ai đã sử dụng rộng rãi, vui lòng cung cấp một số ưu điểm và nhược điểm mà họ nghĩ là tốt hơn? Tài nguyên học tập tốt nhất cũng sẽ được đánh giá cao.

Điều này sẽ dành cho một dự án nhỏ, chỉ cần một hoặc hai nhà phát triển bắt đầu.

+0

có một câu hỏi tương tự http://stackoverflow.com/questions/1261/what-are-the-advantages-of-using-svn-over-cvs – hayalci

+0

@hayalci: Tại sao bạn không trả lời nhận xét của mình câu hỏi? :) – Pistos

+1

@Pistos: thêm nó vào câu trả lời của tôi. – hayalci

Trả lời

68

Tôi đã sử dụng cả hai. Không có so sánh; bạn muốn svn. Lý do duy nhất để sử dụng CVS là vì bạn đang nhập hoặc chiếm một hệ thống cũ với quản lý không muốn thay đổi trạng thái. Nếu bạn đang bắt đầu một dự án mới, nó hầu như là một điều không thể hợp lý để cho rằng CVS là tốt hơn so với Subversion.

Nếu bạn google xung quanh, bạn sẽ tìm thấy nhiều so sánh và lý do để sử dụng Subversion trên CVS. Một số trong những lợi thế của Subversion qua CVS:

  • có thể di chuyển hoặc đổi tên tập tin hoặc thư mục sạch
  • cam kết nguyên tử
  • "giá rẻ" sao chép và phân nhánh
  • cam kết là changesets trên toàn bộ cây (không chỉ lịch sử trên các tệp riêng lẻ)

Có nói tất cả điều này, tôi khuyên bạn cũng nên khám phá một số VCS được phân phối như Bazaar, Mercurial và git. Cá nhân tôi sử dụng git trên tất cả các dự án của tôi.

+3

Điều "sao chép và phân nhánh" rẻ tiền mà bạn đề cập là gì? Sao chép và phân nhánh tốt hơn như thế nào trong Subversion (so với CVS)? cảm ơn! – Lazer

+0

http://www.pushok.com/software/svn-vscvs.html –

1

Phiên bản phụ giống như `CVS tốt hơn '. Nó xử lý các tập tin di chuyển và thư mục tốt. Nó có hỗ trợ phân nhánh, mặc dù đó là kém hơn VCS phân tán.

Bạn cũng có thể xem xét sử dụng VCS được phân phối như git, bazaar hoặc mercurial.

Edit: Đây là một link to a similar question

2

Bạn sẽ nhận được rất nhiều câu trả lời cho điều này, tôi nghi ngờ. Họ thậm chí có thể đồng ý.

Giữa hai lựa chọn này, tôi tin rằng không có câu hỏi nào là bạn nên sử dụng Subversion. Subversion được xây dựng như một "CVS tốt hơn" và kết quả là, không ai chủ động duy trì CVS nữa. Subversion có khả năng đổi tên và di chuyển tệp mà không mất lịch sử, hỗ trợ commit nguyên tử, có định dạng kho lưu trữ mạnh hơn, có nhiều phương thức truy cập hiện đại hơn, hỗ trợ công cụ của bên thứ ba tốt hơn và danh sách tiếp tục.

8

Gọi cho tôi là lỗi thời, nhưng tôi rất thích mô hình phân nhánh/gắn thẻ trong CVS.

Trong CVS, các chi nhánh và thẻ khác nhau điều. Thẻ là nhãn cho bản sửa đổi. Chúng cực kỳ hữu ích cho những thứ như đánh dấu một thẻ PRODUCTION để các tệp đồng bộ hóa với máy chủ web của bạn. Bạn không phải hợp nhất để cập nhật các tệp PRODUCTION - bạn chỉ cần di chuyển thẻ.

Chi nhánh sống trong cùng một 'không gian tên' làm tệp chính - thật dễ dàng để theo dõi tất cả các mod của một tệp cụ thể.

Trong SVN, không có thẻ như vậy. Chỉ có các chi nhánh. Nếu bạn muốn thẻ, bạn cần phải tạo một chi nhánh và giả vờ là một thẻ.Chi nhánh về cơ bản là bản sao của các tệp. Lần trước tôi sử dụng SVN cho các nhánh/sáp nhập, bạn phải ghi lại bản sửa đổi của tập tin được phân nhánh trước nếu bạn muốn hợp nhất lại với nhau (lưu ý, tôi không phải là chuyên gia SVN, vì vậy điều này có thể đã thay đổi).

Điều đó đang được nói, tôi nghĩ SVN là tốt hơn trong mọi khía cạnh khác và bạn có lẽ không nên bắt đầu một dự án mới với CVS.

14

Mặc dù tôi sẽ chọn Subversion qua CVS trong hầu hết các trường hợp, bạn nên biết những gì bạn đang thiếu với Subversion:

  • CVS thấy thẻ và các chi nhánh như những thứ khác nhau; Subversion không. Điều này có nghĩa là các công cụ của bên thứ ba được xây dựng trên Subversion (ví dụ: IDE có tích hợp điều khiển nguồn) có công việc khó khăn hơn khi biết sự khác biệt. Bạn thường phải thực hiện một số cấu hình đặc biệt để cho biết vị trí của các thẻ và nhánh của bạn và bạn phải đảm bảo rằng người dùng của bạn gắn bó với một bố cục hệ thống tệp nhất định.

  • Subversion không thể xem tệp và cho bạn biết tại thời điểm ai đó đã tạo chi nhánh hoặc thẻ từ đó. Các công cụ như CVSGraph có thể sử dụng thông tin này để vẽ một cây lịch sử của tệp. Để làm điều đó với Subversion, bạn cần phải tìm kiếm tất cả các thư mục chi nhánh/thẻ, và tôi đã không thấy bất kỳ công cụ nào làm tốt điều này.

  • CVS đã lâu hơn và các công cụ của bên thứ ba ổn định hơn theo trải nghiệm của tôi.

+0

Bạn có thể xem khá đồ thị với phiên bản lật đổ quá bằng cách sử dụng TortoiseSVN mà tiếc là chỉ có sẵn trong Windows. –

+0

Về sự ổn định của công cụ của bên thứ ba trong kinh nghiệm hạn chế cá nhân của tôi, tôi không thấy rằng công cụ của bên thứ ba CVS ổn định hơn. –

+1

Tại thời điểm này, chúng có lẽ là bằng nhau. Tôi đã suy nghĩ cụ thể về việc tích hợp CVS Eclipse, đó là đá rắn. Các công cụ Subversion của Eclipse là tốt, nhưng vẫn là loại lỗi. Họ có một biểu đồ chi nhánh, như TortioiseSVN, nhưng vì SVN không theo dõi các điểm chi nhánh, nên mất nhiều thời gian hơn để tính toán so với đồ thị CVS. –

22

Subversion có một số chiến thắng đáng kể so với CVS:

  1. tốt tùy chọn từ xa http/https/svn vs pserver
  2. cam kết nguyên tử
  3. công cụ hỗ trợ phổ biến
  4. đổi tên
  5. thư mục versioning

Tuy nhiên, nó có những thiếu sót nghiêm trọng. Lớn nhất từ ​​trước đến nay là Branches và Tags không phải là công dân hạng nhất trong svn, chúng chỉ là các thư mục tuân theo quy ước. Ngoài việc mất đi một số lợi ích của việc phân nhánh và gắn thẻ thực sự (được đề cập trong các nhận xét khác), vấn đề lớn nhất mà nó tạo ra là nếu làm cho nó rất dễ bị xáo trộn.

Việc sử dụng quy ước của Subversion thay vì cấu hình có nghĩa là bạn cần phải suy nghĩ về cấu trúc kho lưu trữ của bạn trước và đảm bảo rằng mọi người tuân thủ cấu trúc đó. Khác bạn tạo ra một thế giới của tổn thương cho các thế hệ tương lai, hãy để một mình bất kỳ công cụ cần phải grok repo của bạn.

Hợp nhất và phản chiếu gần như không tồn tại (hỗ trợ tốt) trước 1.5. 1.5 đã thực hiện các bước để giải quyết cả hai vấn đề này, nhưng vẫn còn chỗ để cải thiện. Hợp nhất trong lật đổ vẫn còn khó khăn hơn nó cần.

SVN trên CVS gần như không có trí tuệ. Tuy nhiên, bạn sẽ không hài lòng khi xem xét những gì DVCS cung cấp (Git, Hg, Bzr) hoặc nếu ngân sách của bạn cho phép có những công cụ thương mại với danh tiếng xuất sắc (Accurev, Perforce).

Subversion có lẽ là lựa chọn đúng đắn, nhưng bạn phải làm bài tập ở nhà để có kết quả tốt nhất. Bắt đầu với Sách Đỏ http://svnbook.red-bean.com/

+2

pte: Bạn dường như ngụ ý rằng CVS có một số ưu điểm so với SVN, điều này hoàn toàn sai. – Arafangion

+5

arafangion: Nếu bạn tin rằng SVN là tốt hơn là superiour trong mọi cách để CVS bạn không phải đã sử dụng CVS rất nhiều và/hoặc bạn không làm rất nhiều gắn thẻ hoặc sáp nhập trong SVN. Chỉ một ví dụ - khả năng "di chuyển" thẻ của CVS là tốt hơn đáng kể so với bản sao của SVN vào thư mục pita. – pte

+5

@Arafangion: Tệp lưu trữ CVS là các tệp định dạng rcs mà bạn có thể dễ dàng hiểu và thao tác với trình chỉnh sửa văn bản. Các tệp kho SVN xuất hiện với tôi thành các đốm màu đục. Nếu hệ thống tập tin bị hỏng một phần, bạn có thể tốt hơn với CVS. –

1

Nói chung là Subversion .. Tuy nhiên, bạn nên xem các vấn đề về tài nguyên.

Khi tôi đang làm việc cho một công ty trò chơi, chúng tôi có một vài thư mục chứa hàng trăm tệp nhỏ và các thư mục khác chứa vài trăm meg tệp. Khi chúng tôi đổi từ CVS sang Subversion, tốc độ kiểm tra repo giảm từ một giờ xuống còn bốn hoặc năm giờ. Cập nhật cũng chậm đáng kể. Điều này gần như chắc chắn là do sử dụng http hoặc ssh để truyền dữ liệu tệp, so với máy chủ csv gốc của máy chủ, tuy nhiên vì việc cài đặt svn trên ssh hoặc webdav dễ dàng không dễ nghĩ đến chi phí giao thức. Tuy nhiên bạn có thể sử dụng một giao thức svn bản địa và điều này sẽ làm giảm bớt vấn đề, chúng tôi đã không kiểm tra điều này tại công ty cũ của tôi.

Một vấn đề khác thường bị bỏ qua là dung lượng lưu trữ, chúng tôi nhận thấy rằng lật đổ đã sử dụng nhiều lần lưu trữ cục bộ dưới dạng CVS. Tôi dường như nhớ lại rằng nó lưu trữ một bản sao cục bộ của dữ liệu repo để tăng tốc độ diffing, điều này sẽ không là một vấn đề lớn trừ khi bạn lưu trữ vài gigabyte trong kho của bạn.

+0

thử git, nó có thể sẽ hoạt động tốt hơn rất nhiều. – DGM

0

Tôi đã sử dụng phiên bản lật đổ trong 3,5 năm, bây giờ tôi đã chuyển sang công ty khác sử dụng CVS để kiểm soát nguồn. Lúc đầu, không có nhiều sự khác biệt giữa hai, nhưng đến để hợp nhất hoạt động (đó là đầu mối quan tâm nhất của tôi) tôi có thể nói rằng CVS đã làm một công việc tốt hơn. Các khái niệm về các nhánh/thẻ trong SVN gây nhầm lẫn trong khi rất rõ ràng trong CVS. cũng hợp nhất (trong trường hợp của tôi, tích hợp một nhánh) dễ dàng hơn nhiều trong CVS so với trong SVN. Điểm yếu của CVS cho đến nay trong ý tưởng của tôi chỉ là cam kết nguyên tử. nếu không, nó sẽ là lựa chọn tốt.