2011-10-23 26 views
9

Tôi vừa tìm thấy một dự án mã nguồn mở vẫn sử dụng CVS. Tôi tự hỏi liệu có còn lý do gì để thích CVS hơn SVN hay Git ngày nay. (Tôi không tính là quá lười biếng để di chuyển như một câu trả lời! ;-))Lý do thích CVS hơn SVN hoặc Git

CVS có bất cứ điều gì mà hai người kia thiếu không? Nói, hỗ trợ cho $ OS hoặc $ fancy_tool?

Trong “What are the advantages of using SVN over CVS?” có các câu trả lời được giải thích tại sao không sử dụng CVS. Nhưng tôi muốn hỏi theo cách khác. CVS không thể xấu được. Hoặc là nó?

Trả lời

21

Tôi vẫn sử dụng CVS cho một số nội dung cá nhân của riêng mình.

Không giống như với Git, bạn có thể dễ dàng chỉ kiểm tra một tập con của kho lưu trữ.

Và CVS gán số phiên bản tuần tự (1.1, 1.2, 1.3, ...) cho mỗi tệp. Trong Git, số phiên bản là tổng kiểm tra thập lục phân 40 ký tự. Trong SVN, các số sửa đổi được tuần tự trên toàn bộ kho lưu trữ; một số đã cho áp dụng cho toàn bộ kho lưu trữ.

Và CVS cho phép bạn mở rộng số phiên bản vào từng tệp khi kiểm tra, giúp dễ dàng xác định phiên bản tệp nào không tham chiếu đến kho lưu trữ. Vì vậy, tôi thấy CVS (và đôi khi thậm chí RCS) thuận tiện khi kho lưu trữ tập hợp các tệp không liên quan và tôi quan tâm nhiều hơn đến việc theo dõi các thay đổi trên các tệp riêng lẻ, nhưng các bản sửa đổi toàn bộ kho lưu trữ không phải là đặc biệt có ý nghĩa.

(Đó sẽ không phải là trường hợp nếu các kho chứa file nguồn sử dụng để xây dựng một chương trình đơn lẻ hoặc thư viện;. Trong trường hợp đó, bạn muốn có một lịch sử thống nhất cho toàn bộ dự án)

Cuối cùng, CVS lưu trữ lịch sử cho từng tệp trong một tệp (với cùng định dạng được RCS sử dụng) với định dạng tương đối đơn giản. Ít nhất một lần, tôi đã phải tự tạo lại một tệp CVS đã lưu đã bị hỏng. Tôi không chắc làm thế nào tôi có thể làm điều đó với SVN hay Git.

CẬP NHẬT: Câu hỏi này đã rút ra một số nhược điểm không giải thích được. Tôi chỉ có thể đoán tại các lý do (và tôi không lo lắng nhiều về các downvote thường xuyên), nhưng có lẽ một số độc giả nghĩ rằng tôi ủng hộ CVS như một hệ thống tốt hơn SVN hoặc Git. Tôi không; Tôi chỉ đơn thuần chỉ ra rằng CVS có thể có một số lợi thế trong một số trường hợp khá hẹp.

4

Điều duy nhất tôi gặp phải trong việc sử dụng CVS hạn chế là CVS xử lý các chi nhánh và thẻ khác nhau và cũng coi chúng như những gì chúng có và không chỉ là các thư mục mà SVN thực hiện. Có những lệnh cụ thể cho những điều này và chúng được coi là công dân hạng nhất của hệ thống điều khiển phiên bản. Làm thế nào để bạn tạo một chi nhánh trong SVN? svn copy. Nhãn? tương tự. Sự khác biệt là gì? Không có gì thực sự, ngoại trừ cách bạn đối xử với họ. Trong khi người ta có thể nói rằng mô hình của SVN dẫn đến sự đơn giản, nó gây ra các công cụ khác nhau để hiểu sai chúng và không nhận được bối cảnh của các thư mục. Nếu bạn thấy Git, nó tương tự như CVS theo cách này.

Nhưng chắc chắn, không có lý do gì để sử dụng CVS ngay bây giờ-một-ngày, ngoài những lý do kế thừa. Nhiều người nói rằng SVN được xây dựng để trở thành một CVS tốt hơn và trong hầu hết mọi khía cạnh, SVN là tốt hơn và được sử dụng rộng rãi.

6

Bạn phải hiểu rằng Subversion được viết để thay thế trực tiếp CVS và các vấn đề mà nhà phát triển có với CVS. Subversion được viết, để người dùng CVS có thể dễ dàng chuyển đổi từ CVS sang Subversion vì họ sử dụng cùng một luồng công việc và nhiều khái niệm tương tự.

Điều này giống như yêu cầu MS-DOS vượt trội so với Windows như một hệ điều hành. Tôi có thể đưa ra một số lý do không có thật ("Vâng ... ... uh ... MS-DOS cần ít bộ nhớ hơn."). Tuy nhiên, cuối cùng, Windows đã được viết để chăm sóc các bản sao ngắn của MS-DOS.

Một số lý do tại sao CVS là tốt hơn để Subversion đơn giản là không giữ lên khi bạn hiểu được lý luận:

  • Trong CVS, thẻ và các chi nhánh là hai khái niệm hoàn toàn khác nhau. Trên thực tế, không có nhiều sự khác biệt giữa thẻ hoặc chi nhánh. Trong tệp CVS ,v, các chi nhánh và thẻ đều được đặt biệt hiệu cho các bản sửa đổi cụ thể ở đầu tệp. Trên thực tế, bạn đã sử dụng cùng một lệnh: cvs tag để tạo chi nhánh hoặc thẻ. Đó là một trong những lý do tại sao Subversion không phân biệt được giữa hai khái niệm. Tuy nhiên, bằng cách xử lý các chi nhánh và thẻ như nhau, Subversion đã cung cấp cho bạn một cách để theo dõi lịch sử của một chi nhánh hoặc thẻ. Ai đã tạo ra nó và khi nào? Bản sửa đổi nào được dựa trên? Nó có thay đổi không? Subversion cũng cung cấp cho bạn một cách dễ dàng để xem tất cả các thẻ hoặc các chi nhánh trong kho lưu trữ của bạn. Trong CVS, bạn phải đi qua từng tệp.
  • CVS linh hoạt hơn Subversion vì Subversion ít nhiều buộc bạn phải làm việc trong toàn bộ thư mục. Trong CVS, bạn có thể kiểm tra và thực hiện các thay đổi, sau đó gắn thẻ tất cả chúng cùng một lúc. Tất nhiên, đây thực sự là một cách tồi tệ, khủng khiếp, khủng khiếp, nguy hiểm để làm việc. Điều thường xảy ra là bạn được yêu cầu làm một bản dựng dựa trên một thẻ cũ, nhưng sau đó đặt nửa tá hoặc thay đổi tệp này vào. Sau đó, tạo một thẻ mới. Vui vẻ và hứng thú xảy ra khi bạn cố gắng làm theo các hướng dẫn này. Bạn đã tạo thẻ mới trên bản sửa đổi 1.3.4.2.3.2.5.2 hoặc 1.3.2.4.3.2.5.2?
  • CVS cho phép bạn gắn thẻ và phân nhánh thưa thớt. Bạn có thể có thẻ cơ sở, sau đó thêm các thẻ khác lên trên đó. Tất nhiên, lý do hầu hết các trang web đã làm điều này là bởi vì nó có thể mất nhiều giờ để chi nhánh hoặc gắn thẻ một kho CVS thực sự lớn. Subversion làm điều tương tự trong một micro giây.
  • CVS sử dụng định dạng tệp RCS chuẩn, vì vậy bạn có thể khắc phục sự cố trong kho lưu trữ của mình. Tuy nhiên, hầu hết thời gian, bạn sẽ tạo ra nhiều vấn đề hơn là bạn đang sửa chữa.

CVS là một cải tiến lớn so với RCS. Trong CVS, bạn không phải khóa một tệp trước khi thay đổi nó. Trong CVS, bạn có thể kiểm tra toàn bộ các subtrees mà không cần viết một số loại giao diện người dùng hệ thống. RCS được phát triển cho các tệp riêng lẻ của phiên bản. CVS đã phiên bản toàn bộ kho lưu trữ của bạn thành một dự án duy nhất.

Bản thân RCS là một cải tiến trên SCCS. Định dạng kho lưu trữ RCS dễ hiểu hơn. Mở rộng từ khóa hoạt động tốt hơn và ít khó hiểu hơn. Bạn có thể có các chi nhánh của các chi nhánh trong khi SCCS đã để lại cho bạn với chỉ một cấp chi nhánh duy nhất. RCS đã xây dựng khái niệm về thẻ trong khi SCCS yêu cầu bạn tự theo dõi thẻ.

Và SCCS tốt hơn nhiều so với việc không sử dụng kho lưu trữ nguồn.

Sự thật là CVS đã được thay thế bởi Subversion, kể từ khi Subversion xuất hiện hơn một thập kỷ trước, tất cả công việc trên CVS đều bị dừng lại. Tôi thậm chí không nghĩ rằng lỗi đang được sửa thêm nữa trên CVS.

-1

CVS, git và subversion có các thiết kế quy trình làm việc khác nhau. Không chính xác và gây hiểu lầm khi nói (git/subversion được thiết kế để khắc phục sự cố với cvs). Thay vào đó, lật đổ đã được viết, bởi vì ai đó muốn có một quy trình làm việc khác với CVS/RCS hoạt động tốt nhất với. Và sau đó git được viết bởi vì ai đó muốn có một quy trình làm việc khác.

hời hợt, lật đổ và CVS có phần tương tự. Đi từ bộ nhớ, CVS là tốt cho những người muốn sử dụng RCS trong kho lưu trữ mã cục bộ của họ. RCS là tốt đẹp ở chỗ nó đòi hỏi phải kiểm tra bắt buộc ra khỏi một tập tin. Nó làm cho bạn nhận thức rõ ràng những tập tin bạn đang chạm vào bất cứ lúc nào. Do đó, tránh bạn "vô tình" chạm vào phần của người khác của mã.

+0

Vượt qua vì, vì Luke Skywalker sẽ nói, "Tuyệt vời. Mọi từ đó đều sai." –

+0

wow. ấn tượng. bạn làm tôi kinh ngạc bởi sự thật và logic của bạn. theo đó tôi có nghĩa là, bạn đã viết ZERO sự thật và logic, nhưng downvoted anyway. Bạn đã từng sử dụng CVS và RCS cho công việc trên cơ sở bền vững chưa? Tôi đã sử dụng tất cả 3: CVS, RCS và lật đổ, trên các dự án mở rộng, cho công việc. –

+0

Có, tôi đã sử dụng cả CVS và SVN trên các dự án công việc. Bạn muốn danh sách các lỗi bạn đã thực hiện? Đây rồi. "Đó là không chính xác và gây hiểu nhầm để nói (git/subversion được thiết kế để khắc phục vấn đề với cvs)." SAI RỒI. SVN được thiết kế rõ ràng để trở thành CVS tốt hơn (có nghĩa là, để khắc phục vấn đề với CVS, nhưng chủ yếu là làm việc theo cách tương tự). Git, OTOH, * được * thiết kế cho một quy trình làm việc khác. • "Đi từ bộ nhớ, CVS là tốt cho những người thích sử dụng RCS trong kho lưu trữ mã cục bộ của họ." SAI RỒI. CVS sử dụng các tệp RCS làm định dạng lưu trữ dữ liệu, nhưng không hoạt động như RCS. –

Các vấn đề liên quan