我想查看所有仅由我编写且存在于当前Git管理的代码库中的TODO注释。
到目前为止,我的做法是打印我在整个Git历史中创建或修改过的所有TODO注释:git log -p --author="My name" -S TODO | grep "\+.*TODO"
但这个工具链会列出所有曾经编写的TODO注释,即使我已经解决了它们并从代码中删除了它们。
有什么合适的工具链可以逐行搜索当前代码库,检查是否包含“TODO”,并打印那些由我编写的行?
我想查看所有仅由我编写且存在于当前Git管理的代码库中的TODO注释。
到目前为止,我的做法是打印我在整个Git历史中创建或修改过的所有TODO注释:git log -p --author="My name" -S TODO | grep "\+.*TODO"
但这个工具链会列出所有曾经编写的TODO注释,即使我已经解决了它们并从代码中删除了它们。
有什么合适的工具链可以逐行搜索当前代码库,检查是否包含“TODO”,并打印那些由我编写的行?
git blame
与grep结合使用。git grep -l TODO | xargs -n1 git blame | grep 'Your name' | grep TODO
改进版可以将首次grep找到的行号与git blame
仅显示给定行的能力相结合。
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: 我们真的需要这个吗? Cpp/AnotherClass.cpp 42 //TODO: 我们漏掉了一些东西吗? Java/MyListener.java 23 //TODO: 优化
git grep -lE 'TODO|FIXME' | xargs -n1 git blame -f -n -w | grep "Maya" | grep -iE 'TODO|FIXME' | sed "s/.\{9\}//" | sed "s/(.*)[[:space:]]*//"
- Ahmed Hegazy我发现用户名可以包含空格,所以按电子邮件地址进行过滤更容易。此外,@todo(小写)是我在文档块中添加注释的方式,因此我添加了“忽略大小写”标志。这是我的解决方案:
git grep -il TODO | xargs -n1 git blame -M -f -e | grep -i TODO | grep $(git config user.email)
xargs -ni git blame
时出现了意外的信号13。我通过在最初的git grep上添加-I
开关来解决这个问题。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:]]*//"
使用 git config
命令来设置您的姓名:
git grep -l TODO | xargs -n1 git blame | grep "$(git config user.name)" | grep TODO
git grep -l TODO | xargs -n1 git blame | grep $(git config user.name) | grep TODO
。现在我可以在每台机器上使用相同的别名。因为我的工作和私人账户使用不同的用户名。/cc @lars-blumberg - DerZyklopgit blame
这种方式将获取您重新格式化的任何 TODO(例如通过更改缩进),而不仅仅是您开始的 TODO。您真正想要做的是一些 git pickaxe (git log -S
) 和blame
的组合。 - C S