我希望看到 仅我 所写的所有TODO评论,以及当前存在于git托管代码库中的评论。
What I've got so far正在打印我在完整的git历史记录中创建或修改的所有TODO评论:git log -p --author="My name" -S TODO | grep "\+.*TODO"
但是这个工具链列出了所有写过的TODO评论,甚至是那些我已经解决并因此从代码中再次删除的评论。
是否有可以逐行搜索当前代码库的工具,检查它是否包含“TODO”以及此行是否由我创作然后打印这些行?
答案 0 :(得分:17)
您可以将git blame
与grep结合使用。
像这样(不是最好的,但应该有效)
git grep -l TODO | xargs -n1 git blame | grep 'Your name' | grep TODO
改进版本可能会将第一个grep找到的行号与git blame
仅显示给定行的能力结合起来。
答案 1 :(得分:13)
我想添加 aragaer & Kyle 的解决方案:
git grep -l TODO | xargs -n1 git blame -f -n -w | grep "$(git config user.name)" | grep TODO | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"
打印:
Cpp/CoolClass.cpp 123 //TODO: Do we really need this? Cpp/AnotherClass.cpp 42 //TODO: Do we miss something? Java/MyListener.java 23 //TODO: Optimize
答案 2 :(得分:4)
我发现用户名可以包含空格,因此通过电子邮件地址过滤更容易。另外,@ todo(小写)是我在docblocks中添加注释的方式,所以我添加了"忽略低/大写"旗。这是我的解决方案:
git grep -il TODO | xargs -n1 git blame -M -f -e | grep -i TODO | grep $(git config user.email)
答案 3 :(得分:2)
完成使用git config
获取您的姓名:
git grep -l TODO | xargs -n1 git blame | grep "$(git config user.name)" | grep TODO
答案 4 :(得分:2)
这里有个小建议,就是我遇到了更大的存储库和一些二进制文件。 xargs -ni git blame
部分导致信号13出现意外情况。我通过在初始git grep上添加-I
开关来解决此问题。
FWIW这是完整错误(请转到Google)
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:]]*//"