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
Другие вопросы по тегам