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

时间:2014-06-13 19:10:08

标签: git

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

3 个答案:

答案 0 :(得分:8)

你可以简单地将你的分支与master和grep的输出

中的TODO区分开来
git diff master..branch | grep "^+.*TODO"

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

答案 1 :(得分:2)

git grep可以在给定树上执行文本搜索。 git branch --no-merged $commit为您提供未合并到命名提交的所有分支。结合这两个并且你很高兴(我知道,你不应该在脚本中使用git branch,但我无法快速找到一种方法告诉git for-each-ref只考虑不-merged refs。如果有人有解决方案,请随时评论/编辑)

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

答案 2 :(得分:2)

您可以将其用作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