git обвиняет отдельные строки во всех файлах, отфильтрованных командой grep
Я знаю, как запустить gblame внутри файла.
Я знаю, как получить содержимое внутри всех файлов в каталоге.
Я хотел бы видеть ряд отдельных строк вокруг той, которая содержит контент. Пример:
$ blame -R "content" ./
Я вижу список файлов. Я хочу выделить всю тему и понять, кто коснулся этих строк кода.
3 ответа
Решение
Вы можете сделать это с Perl:
git grep -n 'content' | perl -F':' -anpe '$_=`git blame -L$F[1],+1 $F[0]`'
и если вы хотите создать собственную команду, вы можете добавить что-то вроде этого в gitconfig в разделе псевдонимов:
gb = "!f() { git grep -n $1 | perl -F':' -anpe '$_=`git blame -L$F[1],+1 $F[0]`'; }; f"
Я написал этот небольшой скрипт для выполнения git grep + blame:
#!/bin/bash
if [ "$1" = "" ] ; then
echo "usage: $0 <term>" 1>&2
exit 1
fi
for file in $(git grep $1 | cut -d ':' -f 1 | uniq) ; do
echo $file ::
git blame $file | grep $1
done
Найти файлы с иглой, для каждого файла обвинения, и для каждой ошибки вывода поиска иглы
for file in `grep -lr needle *`; do git blame $file |grep needle ; done
Вы можете добавить контекст с -C
for file in `grep -lr needle *`; do git blame $file |grep -C5 needle ; done