2008-11-26 2 views
8

Nhóm của tôi làm việc trên một dự án trong cvs chứa khoảng 20.000 tệp Java. Vì số lượng tệp, phải mất một thời gian để cập nhật cvs. Tôi thường giữ khoảng 5 bản sao của toàn bộ cây được kiểm tra, để dễ dàng kiểm tra các yêu cầu khác nhau mà không phải lo lắng về những tệp nào đã được sửa đổi cho từng tệp. Đó là một nỗi đau thực sự để giữ cho tất cả 5 cây được cập nhật và đồng bộ với nhau.Là git với cvs nhanh hơn cvs một mình?

Tôi đã đọc khá dễ sử dụng git cục bộ với máy chủ cvs từ xa và git nhanh. Sẽ git đáng kể tăng tốc độ cập nhật của cây địa phương của tôi?

Tôi nhận ra giới hạn dưới là thời gian thực hiện cập nhật cvs. Nhưng tôi nghĩ rằng khi cây đầu tiên được cập nhật, có thể nhanh chóng đồng bộ 4 cái kia với lệnh đầu tiên, thay vì thực hiện thêm 4 lệnh cập nhật cvs. Tôi có hiểu git đúng không?

Trả lời

8

Tôi sử dụng Git làm ứng dụng Subversion trên một dự án lớn (theo thứ tự tệp 10k). Git nhanh, rất nhanh. Nó nhanh đến nỗi tôi chỉ giữ lại một bản sao hoạt động và chuyển đổi giữa các nhánh tính năng trong cùng một bản sao đó. Giống như bạn, khi tôi sử dụng Subversion tôi sẽ có hai hoặc ba lần kiểm tra tương tự và sẽ chuyển đổi giữa chúng thường xuyên khi tôi có nhiều thứ đang tiến hành đồng thời. Đôi khi nó khá là khó hiểu. Với các tính năng của Git như các nhánh nhẹ, stash và "git add -p", tôi thấy rằng tôi không còn cần nhiều lần kiểm tra nữa. Tôi có thể làm mọi thứ trong một thư mục và không phải lo lắng nhiều về việc mất các thay đổi mà tôi đã quên hoặc vô tình ghi đè.

Tôi đã không sử dụng Git với CVS, nhưng nếu tích hợp của nó là bất cứ điều gì như git-svn thì nó sẽ không có vấn đề gì.

+0

Sự tích hợp của git như CVS _client_ là kém so với SVN (ít nhất nó từng là, các dự án tôi đã theo dõi sử dụng CVS đã di chuyển ra khỏi nó, vì vậy tôi không có kinh nghiệm gần đây). Có một CVS _server_ đang chạy như một lối vào kho lưu trữ git trong các nguồn, nhưng tôi đã luôn luôn coi đó chỉ là kết quả đầu ra của một tâm trí bị bệnh, vì vậy ...). – vonbrand

10

Chúng tôi làm điều gì đó tương tự tại nơi làm việc. Về cơ bản, chúng tôi sử dụng chi nhánh master trong git như một phiên bản CVS được cập nhật duy nhất của mã; chúng tôi không thực hiện bất kỳ phát triển nào ở đó, chỉ cần cập nhật CVS. Sau đó, tất cả các dự án phát triển của chúng tôi diễn ra trên các chi nhánh tính năng mà chúng tôi đã rebase. Khi chúng tôi cập nhật CVS trên chi nhánh master, chúng tôi cam kết những thay đổi đó thành master và sau đó rebase các chi nhánh phát triển khác của chúng tôi chống lại master.

Nó không lý tưởng - nó làm cho việc chia sẻ chi nhánh với những người khác khó khăn. Tuy nhiên, chúng tôi có thể quản lý một số dự án phát triển cùng một lúc và thực hiện các chi nhánh, sáp nhập và chống lại chúng một cách dễ dàng. Và, chúng tôi chỉ tương tác với CVS trên một chi nhánh master, nếu cần.

+0

Nghe khá hay. Là bước rebase nhanh hơn so với cvs lên? –

+0

Vâng, đó là một tấn nhanh hơn bởi vì nó là tất cả các địa phương. Về cơ bản nó tạo ra sự khác biệt từ chi nhánh của bạn và áp dụng chúng cho người đứng đầu mới của chi nhánh. –

+0

@ CraigP.Motlin, các hoạt động như vậy trong git có xu hướng gần như tức thời. Kiểm tra phiên bản hiện tại từ CVS là chậm (có lẽ chậm hơn so với CVS gốc). Whay là một con gấu thực sự là lần kiểm tra đầu tiên (hoặc CVS ​​hoặc SVN), nó sẽ hút xuống _all_ các sửa đổi. Điều đó có thể dễ dàng có nghĩa đen ngày cho một kho lưu trữ lớn. Quá trình này là khá mong manh, trong đó nó mất kết nối với máy chủ và phải được khởi động lại (và nó chưa hoàn thành, không có gì được kiểm tra, đừng hoảng sợ, tiếp tục). Một khi bạn có một bản sao của kho lưu trữ CVS nhân bản, bạn chỉ có thể sao chép thư mục xung quanh. – vonbrand