Việc sử dụng git gui blame
rất khó để sử dụng trong các tập lệnh, và trong khi git log -G
và git log --pickaxe
mỗi tập lệnh có thể hiển thị cho bạn khi nào định nghĩa phương thức xuất hiện hoặc biến mất, tôi không tìm thấy bất kỳ cách nào để liệt kê tất cả các thay đổi được thực hiện đối với phần thân phương thức của bạn.
Tuy nhiên, bạn có thể sử dụng gitattributes
và textconv
tài sản để ghép thành một giải pháp thực hiện điều đó. Mặc dù ban đầu các tính năng này nhằm giúp bạn làm việc với các tệp nhị phân, nhưng chúng hoạt động tốt ở đây.
Điều quan trọng là phải xóa Git khỏi tệp tất cả các dòng ngoại trừ những dòng bạn quan tâm trước khi thực hiện bất kỳ thao tác khác biệt nào. Sau đó git log
, git diff
v.v. sẽ chỉ thấy khu vực bạn quan tâm.
Đây là phác thảo những gì tôi làm bằng ngôn ngữ khác; bạn có thể điều chỉnh nó cho nhu cầu của riêng bạn.
Viết một tập lệnh shell ngắn (hoặc chương trình khác) lấy một đối số - tên của tệp nguồn - và chỉ xuất phần thú vị của tệp đó (hoặc không có gì nếu không có phần nào thú vị). Ví dụ, bạn có thể sử dụng sed
như sau:
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
Xác định textconv
bộ lọc Git cho tập lệnh mới của bạn. (Xem gitattributes
trang man để biết thêm chi tiết.) Tên của bộ lọc và vị trí của lệnh có thể là bất cứ thứ gì bạn thích.
$ git config diff.my_filter.textconv /path/to/my_script
Yêu cầu Git sử dụng bộ lọc đó trước khi tính toán khác biệt cho tệp được đề cập.
$ echo "my_file diff=my_filter" >> .gitattributes
Bây giờ, nếu bạn sử dụng -G.
(lưu ý .
) để liệt kê tất cả các cam kết tạo ra các thay đổi có thể nhìn thấy khi bộ lọc của bạn được áp dụng, bạn sẽ có chính xác các cam kết mà bạn quan tâm. Bất kỳ tùy chọn nào khác sử dụng các thói quen khác biệt của Git, chẳng hạn như --patch
, sẽ cũng nhận được chế độ xem bị hạn chế này.
$ git log -G. --patch my_file
Voilà!
Một cải tiến hữu ích mà bạn có thể muốn thực hiện là đặt tập lệnh bộ lọc của bạn lấy tên phương thức làm đối số đầu tiên (và tệp là đối số thứ hai của nó). Điều này cho phép bạn chỉ định một phương pháp quan tâm mới chỉ bằng cách gọi git config
, thay vì phải chỉnh sửa tập lệnh của bạn. Ví dụ, bạn có thể nói:
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
Tất nhiên, tập lệnh bộ lọc có thể làm bất cứ điều gì bạn thích, lấy thêm đối số hoặc bất cứ điều gì: có rất nhiều sự linh hoạt ngoài những gì tôi đã trình bày ở đây.