如何在 git 存储库中列出我当前的所有 TODO 消息?
Posted
技术标签:
【中文标题】如何在 git 存储库中列出我当前的所有 TODO 消息?【英文标题】:How to list all my current TODO messages in a git repository? 【发布时间】:2014-09-22 05:42:22 【问题描述】:我想查看只有我编写的并且存在于由 git 管理的当前代码库中的所有 TODO cmets。
What I've got so far 正在打印我在整个 git 历史中创建或修改过的所有 TODO cmets:git log -p --author="My name" -S TODO | grep "\+.*TODO"
但是这个工具链列出了所有曾经编写过的 TODO cmets,甚至那些我已经解决并因此再次从代码中删除的内容。
什么是合适的工具链,可以逐行搜索当前代码库,检查它是否包含“TODO”以及这行是否由我编写打印这些行?
【问题讨论】:
【参考方案1】:您可以将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 | grep $(git config user.name) | grep TODO
。现在我可以使用same alias on every machine。因为我有不同的用户名用于工作和私人的东西。 /cc @lars-blumberg
以这种方式使用git blame
将获得您重新格式化的所有TODO(例如通过更改缩进),而不仅仅是您开始的那些。您真正想要做的是 git pickaxe (git log -S
) 和 blame
的某种组合。【参考方案2】:
我想添加 aragaer 和 Kyle 的解决方案:
使用 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:优化【讨论】:
这很好,只是它确实显示了不存在的文件。 (与@aragaer 解决方案相同) 同时搜索 FIXMEgit grep -lE 'TODO|FIXME' | xargs -n1 git blame -f -n -w | grep "Maya" | grep -iE 'TODO|FIXME' | sed "s/.\9\//" | sed "s/(.*)[[:space:]]*//"
【参考方案3】:
完成使用git config
获取您的姓名:
git grep -l TODO | xargs -n1 git blame | grep "$(git config user.name)" | grep TODO
【讨论】:
【参考方案4】:我发现用户名可以有空格,这样更容易通过电子邮件地址过滤。另外,@todo(小写)是我在文档块中添加注释的方式,所以我添加了“忽略小写/大写”标志。这是我的解决方案:
git grep -il TODO | xargs -n1 git blame -M -f -e | grep -i TODO | grep $(git config user.email)
【讨论】:
【参考方案5】:我刚刚遇到的小建议,更大的 repo 和一些二进制文件。 xargs -ni git blame
部分导致信号 13 出现意外术语。我通过在初始 git grep 上添加 -I
开关解决了这个问题。
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:]]*//"
【讨论】:
以上是关于如何在 git 存储库中列出我当前的所有 TODO 消息?的主要内容,如果未能解决你的问题,请参考以下文章