Mercurial - tất cả các tệp đã thay đổi trong một tập hợp thay đổi?


97

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

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

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


Câu trả lời:


149

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

hg status --change REV

13
+1, nhưng OP có lẽ cũng muốn cờ -n/ --no-status.
Niall C.

7
Để dễ dàng sao chép:hg status --no-status --change REV
zastrowm

+1 Điều này dễ dàng hơn nhiều so với hg status --rev REV~1:REVnhững gì tôi đã từng làm.
Patrick Oscity

3
sử dụng '.' cho REV hiện tại. có nghĩa là -hg status --change .
zaxy78

16

Chỉ cần xóa pkhỏi hg log -vprsẽ hiển thị danh sách các tệp. -pnghĩa là hiển thị bản vá. Bạn cũng có thể sử dụng một mẫu để định dạng đầu ra theo sở thích của bạn.


3
Tôi nghĩ rằng bạn sẽ cần những mẫu sau: --template 'file: {file} \ n'
Tôn Plomp

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

2
hg log -r. --template '{tham gia (tác phẩm, "\ n")}' để xuống dòng tách các tập tin
Foxichu

1
@Foxichu bình luận có tác dụng với tôi, nhưng hơi khó hiểu. thực sự là câu trả lời trên - hg status --change .làm việc tốt hơn và đã đưa ra một tiền tố hành động tập tin (A \ M \ D vv) và đường dẫn tương đối tốt hơn
zaxy78

13

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

hg status --rev 1 --rev 10 -m

2
Xấu kinh khủng. Các tệp, được sửa đổi trong phạm vi hg log -r BEGIN:END --template "{files}\n"giống như @ geoffrey-zheng và @ton đã viết hai năm trước !!!
Lazy Badger

Xin lỗi vì điều đó. Giả sử câu trả lời của họ là cho một tập hợp thay đổi.
Nick DeVore

1
Theo tôi câu trả lời này không có gì ghê gớm lắm. hg status --rev BEGIN --rev ENDlà: 1. dễ nhớ hơn nhiều so với hg log -r BEGIN:END --template "{files}\n"; 2. nó in các tệp trong các dòng riêng biệt mà không cần sử dụng sed(@Eric Lawler) hoặc join()(@Foxichu); 3. không có -mcờ, nó không chỉ hiển thị các tệp được sửa đổi, mà còn được thêm và xóa (màu tiêu chuẩn đẹp cũng áp dụng ở đây); 4. có -a-rcờ cho phép lọc khác nhau; 5. nếu một người không muốn tiền tố trạng thái, có -ntùy chọn, loại bỏ nó.
Michał Wróbel

9

Bản sửa đổi đã cam kết hiện tại

hg status --change .

.là viết tắt của vòng quay hiện tại, giống như @HEADtrong Git

Bản sửa đổi chưa được chấp nhận hiện tại

hg status

Bản sửa đổi được cam kết tùy ý

hg status --change REV_ID

1
câu trả lời đơn giản và chính xác nhất!
zaxy78

2

Tìm thấy câu hỏi này thông qua Google cho một khái niệm tương tự. Để hiển thị tất cả các tệp đã thay đổi thông qua một loạt các tập hợp thay đổi , thật 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ẽ hiển thị cho bạn danh sách từng tệp đã được thay đổi hoặc thêm vào trong mỗi tập thay đổi, từ [start rev] đến [end rev], với các tệp của mỗi tập thay đổi 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 đã sửa đổi, thêm hoặc xóa.
  2. sed -e 's/ /\n/g' sẽ chia tất cả các tệp để hiển thị trên các 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 bằng uniq
  4. uniq sẽ lọc danh sách để loại bỏ các tệp trùng lặp — các tệp đã thay đổi trong nhiều bản sửa đổi.

Giải pháp này kết dính bản sửa đổi cuối cùng với tệp được thêm đầu tiên lại với nhau. Ngoài ra, nó không xử lý đúng cách với khoảng trắng trong tên tệp. --templateGiải pháp dựa trên A không có những thiếu sót này có thể được xây dựng join()theo đề xuất của @Foxichu.
Michał Wróbel

1

Tôi biết câu hỏi này là một câu hỏi cũ và tôi rất ngạc nhiên khi không ai cung cấp mẫu mã sửa đổi OP. Tôi đã nhận được một danh sách các tệp đã sửa đổi / thêm / xóa (mặc dù 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 cam kết gần nhất (bao gồm cả những tệp mà tôi chưa đẩy lên repo).


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

-2

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 các thay đổi. Nếu bạn biết số vé và muốn tìm tất cả các cam kết được liên kết với vé đó (giả sử bạn bao gồm số vé trong thông báo cam kết), bạn có thể sử dụng:

hg log -k TICKET_NUMBER

Điều này hiển thị tất cả các bản sửa đổi liên quan đến 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 để lấy danh sách các tệp được liên kết với các bản sửa đổi.

Tuy nhiên, để đơn giản hơ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ác tệp đã thay đổi:

hg log -vk TICKET_NUMBER

Điều này có liên quan đến câu hỏi. Người đăng đã hỏi làm thế nào để lấy các tệp trong một bộ thay đổi. Các thay đổi thường liên quan đến vé. Giải pháp của tôi chỉ ra cách lấy các tệp liên quan đến các tập thay đổi được liên kết với một vé.
iDimensionz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.