按特定模式

时间:2017-03-22 08:01:57

标签: git intellij-idea

我有git存储库。我想找到我写的特定行。

例如,我想看看我的所有文字行:TODO,todo,FIXME,fixme。

我知道git grep,但它显示了所有作者的界限。但我想只看到我的TODO。

我使用IDEA,但作者没有在TODO中使用过滤器。

我很困惑。有人能帮助我吗?

UPD IDEA:目前无法与TODO进行VCS集成

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此简单命令,使用git grep获取结果,然后使用awk拆分结果,在awk内,使用grep blame获取更多信息,最后使用grep来过滤输出。

$ git grep -n "TODO" | awk -F: '{system("git blame -f -L "$2","$2" "$1)}' |grep "The Author Name"

答案 1 :(得分:0)

不是一个确切的答案:

你可以查看你创建的提交(作者),以及diff引入新“TODO”的地方:

git log --author="My Name" -S TODO -p

第二种方式可能是:

  • 查找标有TODO标签的文件
  • 在每个文件上运行git blame
  • 并保留行,TODO标记,以及作为作者提及的地方

类似的东西:

# get file list :
grep -r . -i -E "(TODO|FIXME)" -l   > list.txt
# check each file :
cat list.txt | while read file; do
    git blame $file | grep "My Name" | grep -i -E (TODO|FIXME)
done

请注意,如果其他人编辑了该行(例如:重新缩放该行),git blame会将此其他人的姓名称为作者。
反过来说:如果您修改了这样一行,您的名字将显示在git blame的输出中。

如果未在TODO行中指定作者姓名,则必须将文件内容与git中文件的历史记录交叉 - 以便能够匹配此行的作者。 IDE必须做同样的工作。

问题是,以一种精确的方式执行此操作很难(如果不是不可能):通常会在git的历史中重写提交(rebase,squash,...),尽管git尝试在有意义的情况下保留提交的作者,有时提交的“原始”作者可能会丢失。