查找 git 分支上创建的所有 TODO 注释的脚本?

问题描述 投票:0回答:6

我有一个已经变得相当大的功能分支。我们的代码中有相当多挥之不去的 TODO 注释,但我想找到在尚未合并到 master 的提交上添加到代码中的所有 TODO(尚未删除)。我该怎么办?

git todo
6个回答
17
投票

您可以简单地将您的分支与 master 进行比较,并在输出中 grep 查找 TODO

git diff master..branch | grep "^+.*TODO"

假设 TODO 行中有足够的上下文,这对我来说非常有用。


12
投票

您可以使用它作为 Git 别名:

git --no-pager diff -U0 master | \
grep '^+.*TODO' | \
sed 's/^+//' | \
git --no-pager grep -nFf - 2> /dev/null

它显示当前分支添加/修改的 TODO 行(与

master
相比),但在使用它之前您必须
git add
(因为
git grep
)。

如果将其添加到

status
别名中,它会更有用,因此当您看到状态时,您将确保没有剩余的 TODO。

[alias]
  s = "!sh -c ' \
    [ $GIT_PREFIX ] && cd $GIT_PREFIX; \
    git status --short --branch $*; \
    git --no-pager diff -U0 master | \
    grep \"^+.*TODO\" | \
    sed \"s/^+//\" | \
    git --no-pager grep -nFf - 2> /dev/null' -"

输出示例:

$ git s
## my-branch...origin/my-branch [ahead 2]
 M README.adoc
README.adoc:12: // TODO: Add screencast
README.adoc:26: // TODO: Advertise Asciidoctor

2
投票

git grep
可以在给定的树上执行文本搜索。
git branch --no-merged $commit
为您提供未合并到指定提交中的所有分支。将两者结合起来就可以了(我知道,您不应该在脚本中使用
git branch
,但我无法快速找到一种方法来告诉
git for-each-ref
仅考虑未合并的引用。如果有人有解决方案,请随意评论/编辑)

git branch --no-merged master | cut -c3- | while read branch; do
  git grep 'TODO' "$branch"
done

1
投票

结合以上两个答案,我编写此代码以在 HEAD 提交中显示 TODO。

git --no-pager diff -U0 HEAD^..HEAD | grep -o 'TODO.*$' | xargs -I{} git --no-pager grep -wn -P '{}$' 2>/dev/null

0
投票

要扩展@bimlas的答案,请使用以下脚本来实现更好的性能:

[alias]
  s = "!sh -c ' \
    [ $GIT_PREFIX ] && cd $GIT_PREFIX; \
    git status --short --branch $*; \
    git --no-pager diff -U0 master | \
    grep \"^+.*TODO\" | \
    sed \"s/^+//\" | \
    git --no-pager grep -nFf - -- $(git --no-pager diff --name-only main) 2> /dev/null' -"

说明:

原始命令首先从 diff 中收集所有带有 TODO 的行,然后在整个存储库中搜索它们。这是极其低效的。

在理想的情况下,最终的搜索是不必要的,因为我们只需告诉

git diff
将行号和文件路径添加到 diff 输出即可。然而,因为这是不可能的,我们必须使用
git grep
来找到它们。

我们已经知道我们要查找的行只能出现在已更改的文件中。因此,为了避免搜索整个存储库,我们可以将

git grep
限制为已更改的文件。我们可以通过使用
 -- $(git --no-pager diff --name-only main)
传递已更改文件的列表来实现这一点。


0
投票

尝试使用Todoctor。它与 JS 和 TS 配合得很好:

https://github.com/azat-io/todoctor

© www.soinside.com 2019 - 2024. All rights reserved.