git log -G<regex> -p
là một công cụ tuyệt vời để tìm kiếm lịch sử của một cơ sở mã cho những thay đổi phù hợp với mẫu đã chỉ định. Tuy nhiên, có thể quá sức để xác định vị trí của hunk có liên quan trong sản lượng diff / patch trong một biển của những con chó săn chủ yếu không liên quan.
Tất nhiên có thể tìm kiếm đầu ra của git log
chuỗi / regex ban đầu, nhưng điều đó không làm giảm tiếng ồn thị giác và mất tập trung của nhiều thay đổi không liên quan.
Đọc tiếp git log
, tôi thấy có --pickaxe-all
, điều hoàn toàn trái ngược với những gì tôi muốn: nó mở rộng đầu ra (cho toàn bộ thay đổi), trong khi tôi muốn giới hạn nó (với hunk cụ thể).
Về cơ bản, tôi đang tìm cách "phân tích" một cách thông minh các khác biệt / vá thành các khối riêng lẻ và sau đó thực hiện tìm kiếm theo từng khối (chỉ nhắm mục tiêu các dòng đã thay đổi), loại bỏ các khối không khớp và xuất ra các khối điều đó
Có một công cụ như tôi mô tả tồn tại? Có một cách tiếp cận tốt hơn để có được hunk phù hợp / bị ảnh hưởng?
Một số nghiên cứu ban đầu tôi đã thực hiện ...
Nếu có thể với
grep
đầu ra diff / patch và làm cho các giá trị tùy chọn ngữ cảnh động động nói, thông qua biểu thức chính quy thay vì đếm dòng có thể đủ. Nhưnggrep
không được xây dựng chính xác theo cách đó (tôi cũng không nhất thiết phải yêu cầu tính năng đó).Tôi tìm thấy bộ patchutils , ban đầu nghe có vẻ phù hợp với nhu cầu của tôi. Nhưng sau khi đọc các
man
trang của nó , các công cụ dường như không xử lý các khối tương ứng dựa trên biểu thức chính quy. (Họ có thể chấp nhận một danh sách những người đi săn, mặc dù ...)Cuối cùng tôi đã tìm thấy splitpatch.rb , có vẻ như xử lý tốt việc phân tích cú pháp của bản vá, nhưng nó sẽ cần được tăng cường đáng kể để xử lý các bản vá đọc thông qua
stdin
, khớp với các hunk mong muốn, và sau đó xuất ra các hunk.