9

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

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

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

$ blame -R "content" ./

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

4

3 回答 3

19

你可以用 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"
于 2016-12-28T09:47:11.650 回答
0

用 needle 查找文件,为每个文件责备,并为每个责备输出搜索针

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
于 2015-02-25T16:31:09.437 回答
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 
于 2017-04-27T17:52:01.543 回答