2011-03-16 15 views
20

Có cách nào trong mercurial để tìm một thay đổi bằng cách đưa ra một mô hình trong chỉnh sửa (thay đổi mã), trái ngược với thông điệp tường trình hoặc tên tập tin?Tìm các thay đổi trong mercurial bằng cách grepping các miếng vá

Tôi đã nhìn khá kỹ lưỡng trong "hg giúp revsets" và tôi nghĩ rằng không có cách nào tốt để làm điều này. Đây là hack tốt nhất tôi đã đưa ra, nhưng tôi hy vọng tôi bỏ lỡ một khả năng, hoặc ai đó có thể làm tốt hơn một chút.

hg log -M -u goldberg -p | grep '(^changeset:\|<pattern>) '| grep -C 1 '<pattern>'

(và sau đó tự chọn số sửa đổi cho công việc sau này với những sửa đổi)

+0

vì tôi đã chỉnh sửa đề xuất của riêng mình một chút (dưới dạng hàm zsh. Nên hoạt động trong bash) Tôi nghĩ mình sẽ theo dõi. Ngoài ra thêm một số cuộc thảo luận dưới đây .... hg_find_patch() {hg log -M -u goldberg -p --style mặc định | grep '\ (^ changeset: \ |^[+ -]. *' $ {1} '\)' | grep -B 1 $ {1}} –

Trả lời

30

Bạn nên có một cái nhìn tại hg grep.

Search revisions of files for a regular expression. 

This command behaves differently than Unix grep. It only accepts 
Python/Perl regexps. It searches repository history, not the working 
directory. It always prints the revision number in which a match appears. 

By default, grep only prints output for the first revision of a 
file in which it finds a match. To get it to print every revision that 
contains a change in match status ("-" for a match that becomes a non-match, 
or "+" for a non-match that becomes a match), use the --all flag. 

Returns 0 if a match is found, 1 otherwise. 

Bạn có thể gõ hg grep --help để biết thêm thông tin.

+0

Cảm ơn! Tôi đã không thấy điều đó. –

+0

Điều này khiến tôi gần gũi hơn. Nếu tôi hiểu đúng, hg grep sẽ cho bạn biết liệu toàn bộ tệp có chứa hay không chứa mẫu (vì vậy bạn có thể thấy khi toàn bộ tệp thực tế đó thay đổi). Tôi đang tìm tất cả các chỉnh sửa của tôi có mẫu đó. Ví dụ, tôi có thể chọn một biến mà tôi đã làm việc trong một tuần và kéo tất cả những thay đổi có liên quan, mặc dù biến đã tồn tại trong nhiều năm. Tôi có phải là hg grep không thể làm điều đó? –

+0

Bạn có thể sử dụng '--all' để tìm kiếm tất cả các thay đổi trong kho lưu trữ hoặc' -r' để chỉ định một phạm vi sửa đổi. Ví dụ, nếu bạn làm 'hg grep --all" $ myvariable "path/tofile.php', mercurial sẽ xem xét tất cả các phiên bản của tập tin đã cho cho mẫu" $ myvariable "in bản sửa đổi tương ứng, nơi anh ta tìm thấy mẫu cho lần đầu tiên. – krtek

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