git责备使用grep命令过滤的所有文件中的特定行

时间:2015-02-25 16:17:21

标签: git blame vim-fugitive git-blame git-grep

我知道如何在文件中运行gblame。

我知道如何在目录中的所有文件中grep内容。

我希望看到包含内容的特定行周围的gblame。例如:

$ blame -R "content" ./

我看到了一个文件列表。我想要了解所有主题,并了解谁触及了这些代码行。

3 个答案:

答案 0 :(得分:10)

你可以使用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"

答案 1 :(得分:0)

查找带针的文件,每个文件责备,以及每个blame输出搜索针

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

答案 2 :(得分:0)

我写了这个小脚本来完成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