2008-09-26 31 views
52

Có cách nào để liệt kê tất cả các tệp đã thay đổi giữa hai thẻ trong CVS không?CVS: Liệt kê tất cả các tệp đã thay đổi giữa các thẻ (hoặc ngày)

Mỗi lần chúng tôi phát hành, chúng tôi áp dụng thẻ cho tất cả các tệp trong bản phát hành đó. Tôi muốn tìm tất cả các tệp đã thay đổi giữa các bản phát hành.

Nó cũng sẽ hoạt động nếu tôi có thể tìm thấy tất cả các tệp đã thay đổi giữa hai ngày.

Trả lời

31

Tôi cho rằng lệnh này sẽ giúp:

cvs diff -N -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs 

nơi RELEASE_1_0RELEASE_1_1 là tên của thẻ của bạn.

Bạn có thể tìm thêm một chút thông tin về cvs diff lệnh here

cộng nó nên được khá đơn giản để tạo ra một kịch bản để làm báo cáo suitbable hơn cho nhu cầu của bạn, ví dụ: số lượng file đã thay đổi, tạo ra xóa, vv Theo như tôi biết các cvs công cụ GUI phổ biến nhất (wincvs và rùa) không cung cấp một cái gì đó như thế này ra khỏi hộp.

Hy vọng nó giúp ;)

+2

Có một perl script gọi cvs2cl mà có thể sản xuất các phiên bản được định dạng đẹp của các bản ghi, hoặc là báo cáo đã hoàn thành hoặc dưới dạng văn bản hoặc XML để xử lý sau: http://www.red-bean.com/cvs2cl/ –

+0

Chỉ tìm thấy thông qua Google và nó đã lưu cho tôi một tải công việc, cảm ơn rất nhiều! Tôi đã cố gắng tìm hiểu thông qua lệnh 'lịch sử', quên về sự khác biệt. –

+0

'-N' đưa ra lỗi trên máy tính Windows:' cvs [server aborted]: Không thể sử dụng tên tệp đã lưu trữ 'nul' trên máy dựa trên NT ' –

4

phương pháp DLira của cung cấp cho rất nhiều chi tiết, bao gồm tất cả các thay đổi.

Để chỉ nhận được một danh sách các tập tin, các công trình này:

cvs diff -N -c -r RELEASE_1_0 -r RELEASE_1_1 | grep "Index:" > diffs 
+0

xin lỗi, tôi đã quên bình luận về độ dài và cách nhận được những gì bạn muốn. Nhưng bạn đúng! grep là một cách tuyệt vời để có được những gì bạn cần. ;) –

1

Các công cụ tốt nhất mà tôi đã tìm thấy cho điều này là một kịch bản perl gọi cvs2cl.pl. Điều này có thể tạo ra một danh sách thay đổi trong một số định dạng khác nhau. Nó có nhiều lựa chọn khác nhau, nhưng tôi đã sử dụng các tùy chọn tag-to-tag như thế này:

cvs2cl.pl --delta dev_release_1_2_3:dev_release_1_6_8 

hoặc

cvs2cl.pl --delta dev_release_1_2_3:HEAD 

Tôi cũng đã thực hiện so sánh sử dụng ngày với cùng một công cụ.

23

Tôi thích sử dụng rdiff-s tùy chọn

cvs rdiff -s -r RELEASE_1_0 -r RELEASE_1_1 module > diffs 

rdiff không đòi hỏi một sandbox; -s cung cấp cho bạn tóm tắt các thay đổi.

+0

Tôi đã thử hầu hết các tùy chọn khác ở đây và với những người khác, tôi không thể nắm bắt tất cả các thay đổi. Cảm ơn! – Victor

+0

Cái này tốt. 'cvs rdiff -s -rvxxxxx -rHEAD module 2>/dev/null' Cung cấp một bản tóm tắt "File (thay đổi từ | là mới) ...." – gaoithe

11

Để có được một danh sách các file đã thay đổi giữa một phiên bản và khác bằng cách sử dụng cvs chuẩn lệnh:

cvs -q log -NSR -rV-1-0-69::V-1-0-70 2>/dev/null >log.txt 

Hoặc cách khác, để có được một danh sách các cam kết ý kiến ​​chỉ việc kéo thả -R:

cvs -q log -NS -rV-1-0-69::V-1-0-70 2>/dev/null >log.txt 

Nơi bạn thay thế V-1-0-69V-1-0-70 bằng các bản chỉnh sửa mà bạn đang so sánh.

+0

Lệnh cuối cùng là những gì tôi đang tìm kiếm :) Chỉ cần thêm một ít grep để lọc ra những dòng tôi không muốn: grep -vE "^ chi nhánh |^RCS |^đầu |^khóa |^truy cập |^từ khóa |^tổng |^mô tả |^sửa đổi" – gregers

+0

Điều này rất tốt cho tệp thay đổi. Cờ tương tự làm việc với cvs rlog. Bạn có thể sử dụng 'cvs -q log -NS -rvxxxx ::' để hiển thị các thay đổi từ thẻ cuối cùng có ích. Đối với các tệp được thêm sau thẻ, bạn sẽ nhận được "cảnh báo: không sửa đổi" và bạn không được hiển thị các cv thêm hoặc cam kết nhận xét. – gaoithe

7
cvs log -d ">=DATE" -N -S -R > cvs.log 
+1

** Ví dụ **: 'cvs -q log -NSRd"> = 2013-10-20 "'. Xóa 'R' nếu bạn cũng muốn tóm tắt commit. –

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