2010-09-24 38 views
76

Làm thế nào bạn có thể xác định tất cả các tệp đã thay đổi trong một changeset đã cho?Mercurial - tất cả các tệp đã thay đổi trong một changeset?

Tôi không tìm kiếm sự khác biệt trong trường hợp này, chỉ là danh sách thêm/xóa/sửa đổi.

hg log -vprX có danh sách các khác biệt nhưng tôi chỉ muốn các tệp.

+0

Tôi giả định một trong những câu trả lời này thực sự trả lời câu hỏi :) –

Trả lời

120

Nếu bạn muốn chỉ liệt kê các file đã thay đổi thì bạn nên sử dụng "lệnh tình trạng" Sau đây sẽ liệt kê những thay đổi tập tin trong phiên bản REV

hg status --change REV 
+7

+1, nhưng OP có thể cũng muốn cờ '-n' /' --no-status'. –

+2

Để dễ dàng sao chép: 'trạng thái hg - không có trạng thái - thay đổi REV' – FriendlyGuy

+0

+1 Điều này dễ hơn nhiều so với trạng thái' hg --rev REV ~ 1: REV' mà tôi đã từng làm. –

15

Chỉ cần loại bỏ p từ hg log -vpr bạn sẽ hiển thị danh sách tệp. -p có nghĩa là hiển thị bản vá. Bạn cũng có thể sử dụng template để định dạng đầu ra theo khẩu vị của mình.

+3

Tôi nghĩ bạn sẽ cần mẫu sau: --template 'files: {files} \ n' –

+1

Tôi tin rằng {files} là một phần của mẫu cờ mặc định -v – eskhool

+2

hg log -r. --template '{join (files, "\ n")}' vào dòng mới tách các tập tin – Foxichu

9

Tôi biết câu hỏi là cho một changeset duy nhất, nhưng nếu bạn muốn có được tất cả các tập tin được sửa đổi cho một loạt các changesets, bạn có thể làm

hg status --rev 1 --rev 10 -m 
+2

Rất tệ. Các tệp, được sửa đổi trong phạm vi là 'hg log -r BEGIN: END --template" {files} \ n "' như @ geoffrey-zheng và @ton đã viết ** hai năm trước !!! ** –

+0

Xin lỗi về điều đó. Giả sử câu trả lời của họ là cho các changeset duy nhất. –

+0

Mặc dù, trong khi có lẽ không phải là tốt nhất, nó không hoạt động;) –

1

Tìm thấy câu hỏi này qua Googling cho một tương tự khái niệm. Để hiển thị tất cả các file đó đã thay đổi thông qua một loạt của changesets, đó là dễ dàng như:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq 
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" sẽ cho bạn thấy một danh sách của mỗi tập tin thay đổi hoặc bổ sung trong mỗi changeset, từ [bắt đầu rev] để [kết thúc rev], với mỗi tập tin của changeset trên một dòng mới. Hoán đổi {file_mods}{file_adds} với {files} để hiển thị tất cả các tệp được sửa đổi, thêm hoặc xóa.
  2. sed -e 's/ /\n/g' sẽ chia tất cả các tập tin để hiển thị trên dòng riêng biệt và
  3. sort sẽ, er, sắp xếp danh sách cho bạn để chúng tôi có thể lọc danh sách với uniq
  4. uniq sẽ lọc danh sách để loại bỏ bản sao-file đã thay đổi trong nhiều bản sửa đổi.
+0

Giải pháp này kết hợp với nhau lần sửa đổi cuối cùng với tệp được thêm đầu tiên. Ngoài ra, nó không đúng cách đối phó với không gian trong tên tập tin. Một giải pháp dựa trên '--template' không có những thiếu sót này có thể được xây dựng bằng cách sử dụng' join() 'như được gợi ý bởi @Foxichu. –

-1

Nếu bạn giống như hầu hết các cửa hàng, bạn sử dụng hệ thống bán vé để theo dõi thay đổi. Nếu bạn biết số lượng vé và muốn tìm tất cả các cam kết liên quan đến vé đó (giả sử bạn bao gồm số lượng vé trong thông điệp cam kết), bạn có thể sử dụng:

hg log -k TICKET_NUMBER 

này hiển thị tất cả các phiên bản kết hợp với vé. Tuy nhiên, nó không liệt kê các tập tin. Bạn có thể sử dụng một trong các câu trả lời ở trên để nhận danh sách các tệp được liên kết với bản sửa đổi.

Để làm cho nó đơn giản hơn tuy nhiên, kết hợp thông tin từ các câu trả lời trước đó, bạn có thể làm như sau để tìm kiếm các cam kết, bao gồm các file đã thay đổi:

hg log -vk TICKET_NUMBER 
+0

Nói chung, một ý tưởng hay, nhưng không liên quan đến câu hỏi. –

+0

Điều này liên quan đến câu hỏi. Các poster hỏi làm thế nào để có được các tập tin trong một changeset. Thay đổi thường liên quan đến vé. Giải pháp của tôi cho thấy làm thế nào để có được các tập tin liên quan đến các thay đổi liên quan đến một vé. – iDimensionz

0

Tôi biết câu hỏi này là một câu hỏi cũ và tôi m ngạc nhiên không ai chỉ cung cấp mẫu mã sửa đổi OP. Tôi nhận được một danh sách các tập tin đã sửa đổi/bổ sung/bị xóa (không được gắn nhãn), chỉ bằng cách chạy hg log -v. Hoặc những gì tôi thực sự cần hg log -v -l5 để xem các tệp đã được sửa đổi/thêm/xóa trong 5 lần commit cuối cùng (bao gồm cả những cái tôi chưa đẩy vào repo).

+0

"không ai chỉ cung cấp mẫu mã sửa đổi OP" - @Geoffrey Zheng đã làm chính xác ~ 1h sau khi câu hỏi đã được đăng –

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