如何搜索有人用git更改的字符串



我想使用git grep搜索特定的字符串,但我想通过使用git blame过滤结果,以知道我要查找的字符串是由特定的人更改的。

我只是不知道如何将它们组合在一起才能得到我想要的结果。

谢谢你的帮助。

您可以编写一个小的shell脚本来实现这一点:

git rev-list --author=Doe HEAD |
while read rev; do
    if git show -p $rev | grep "PATTERN" >/dev/null; then
        echo $rev
    fi
done

这将输出HEAD可以访问的SHA,这些SHA的作者为"Doe",并且提交内容中有"PATTERN"。

这应该是您想要的。

author="Some User"
searchstring=string
searchfiles=(file1 file2 file3) # Leave empty for all files.
while IFS= read -rd '' file; read -rd '' nr; read -r line; do
    if git annotate -p -L "$nr,$nr" -- "$file" | grep -q "$author"; then
        printf '%s:%s:%sn' "$file" "$nr" "$line"
    fi
done < <(git grep -nz "$searchstring" -- "${searchfiles[@]}")

这是否比Jonathan更好/更快。Brink的答案将取决于该行的匹配量、历史的大小、作者的提交在历史中的位置、变化是在作者的最近还是不太最近的提交中,等等。

使用git grep -z对任意文件名是安全的,使用read -d ''读取那些由NUL分隔的字段。

使用git annotate -L来限制需要注释的行。

输出是原始的git grep -n输出,但仅用于作者匹配行。

相关内容

  • 没有找到相关文章

最新更新