24

我想查看只有我编写的所有 TODO 注释,这些注释存在于 git 管理的当前代码库中。

到目前为止,我所得到的是打印我在完整的 git 历史中创建或修改的所有 TODO 注释:git log -p --author="My name" -S TODO | grep "\+.*TODO"

但是这个工具链列出了所有曾经写过的 TODO 注释,甚至那些我已经解决并因此再次从代码中删除的注释。

什么是合适的工具链,可以逐行搜索当前代码库,检查它是否包含“TODO”以及该行是否由我编写并打印这些行?

4

5 回答 5

27

You can combine git blame with grep.

Like this (not the best one, but should work)

git grep -l TODO | xargs -n1 git blame | grep 'Your name' | grep TODO

Improved versions might combine line numbers found by first grep with git blame's ability to show only given lines.

于 2014-07-30T15:08:22.263 回答
17

我想添加aragaerKyle的解决方案:

  • 使用 grep config 获取您的姓名
  • 显示 TODO 注释的文件名和行号
  • 删除提交 SHA、作者姓名和提交时间戳
git grep -l TODO | xargs -n1 混帐责备 -f -n -w | grep "$(git config user.name)" | grep 待办事项 | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"

这打印:

Cpp/CoolClass.cpp 123 //TODO: 我们真的需要这个吗?
Cpp/AnotherClass.cpp 42 //TODO: 我们错过了什么吗?
Java/MyListener.java 23 //TODO:优化
于 2014-07-30T16:34:21.153 回答
4

我发现用户名可以有空格,这样更容易通过电子邮件地址过滤。此外,@todo(小写)是我在文档块中添加注释的方式,所以我添加了“忽略小写/大写”标志。这是我的解决方案:

git grep -il TODO | xargs -n1 git blame -M  -f -e | grep -i TODO | grep $(git config user.email)
于 2017-03-14T16:02:58.187 回答
4

我刚刚遇到的小建议,更大的回购和一些二进制文件。该xargs -ni git blame部分导致信号 13 出现意外术语。我通过-I在初始 git grep 上添加一个开关来解决这个问题。

FWIW 这是完整的错误(去谷歌)

xargs: git: terminated by signal 13

这是我使用的一个示例(也删除了我的 grep 以查看全部)

git grep -I -l TODO | xargs -n1 git blame -f -n -w | grep TODO | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"
于 2019-01-11T04:54:26.197 回答
2

完成使用git config来获取您的姓名:

git grep -l TODO | xargs -n1 git blame | grep "$(git config user.name)" | grep TODO
于 2016-09-03T15:40:58.630 回答