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

Ben*_*lts 12 git

我有一个功能分支,它已经变得非常大.在我们的代码中有很多挥之不去的TODO注释,但是我想在尚未合并到master中的提交中找到添加到代码中(并且尚未删除)的所有TODO.我怎么能这样做?

bim*_*las 9

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

git --no-pager diff -U0 master | \
grep '^+.*TODO' | \
sed 's/^+//' | \
git --no-pager grep -nFf - 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

它显示了当前分支添加/修改的 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' -"
Run Code Online (Sandbox Code Playgroud)

输出示例:

$ git s
## my-branch...origin/my-branch [ahead 2]
 M README.adoc
README.adoc:12: // TODO: Add screencast
README.adoc:26: // TODO: Advertise Asciidoctor
Run Code Online (Sandbox Code Playgroud)


Nei*_*eil 8

您可以简单地将分支与master和grep区分开来,以便输出中的TODO

git diff master..branch | grep "^+.*TODO"
Run Code Online (Sandbox Code Playgroud)

这对我来说很有用,假设在TODO线上有足够的上下文.

  • 这不会给出文件位置 (2认同)

kni*_*ttl 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
Run Code Online (Sandbox Code Playgroud)