사용은 git gui blame스크립트의 사용을 위해 열심히하고, 동안 git log -G과 git log --pickaxe방법 정의가 나타나거나 내가 그들에 대한 모든 변경 목록을 만들 수있는 방법을 발견하지 않은, 사라 때마다 당신을 보여줄 수있는 신체 당신의 방법을.
그러나 gitattributes및 textconv속성을 사용 하여이를 수행 하는 솔루션을 결합 할 수 있습니다 . 이러한 기능은 원래 바이너리 파일 작업을 돕기위한 것이지만 여기에서도 잘 작동합니다.
핵심은 Git이 diff 작업을 수행하기 전에 관심있는 행을 제외한 모든 행을 파일에서 제거하도록하는 것입니다. 그러면 git log, git diff등이 관심있는 영역 만 표시합니다.
다음은 제가 다른 언어로하는 일에 대한 개요입니다. 자신의 필요에 맞게 조정할 수 있습니다.
하나의 인수 (소스 파일 이름)를 취하고 해당 파일의 흥미로운 부분 만 출력하는 짧은 쉘 스크립트 (또는 다른 프로그램)를 작성하십시오 (또는 흥미로운 부분이 없으면 아무것도 출력하지 않음). 예를 들어 sed다음과 같이 사용할 수 있습니다 .
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
textconv새 스크립트에 대한 Git 필터를 정의하십시오 . (자세한 내용은 gitattributesman 페이지를 참조하십시오.) 필터 이름과 명령 위치는 원하는대로 지정할 수 있습니다.
$ git config diff.my_filter.textconv /path/to/my_script
문제의 파일에 대한 diff를 계산하기 전에 해당 필터를 사용하도록 Git에 지시하십시오.
$ echo "my_file diff=my_filter" >> .gitattributes
이제 -G.(참고 .)를 사용 하여 필터를 적용했을 때 눈에 띄는 변경 사항을 생성하는 모든 커밋을 나열하면 관심있는 커밋이 정확히 표시됩니다., 같은 Git의 diff 루틴을 사용하는 다른 옵션은 다음과 같습니다 --patch. 이 제한된보기도 얻을 수 있습니다.
$ git log -G. --patch my_file
Voilà!
유용한 개선 사항 중 하나는 필터 스크립트가 메서드 이름을 첫 번째 인수로 사용하고 파일을 두 번째 인수로 사용하도록하는 것입니다. 이렇게하면 git config스크립트를 편집 할 필요 없이을 호출하여 관심있는 새 메서드를 지정할 수 있습니다 . 예를 들어 다음과 같이 말할 수 있습니다.
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
물론, 필터 스크립트는 당신이 좋아하는 것을 할 수 있고, 더 많은 인수를 받거나, 무엇이든 할 수 있습니다. 제가 여기에서 보여준 것보다 훨씬 더 많은 유연성이 있습니다.