【问题标题】:Use git to list TODOs in code sorted by date introduced使用 git 列出按引入日期排序的代码中的 TODO
【发布时间】:2017-05-09 13:40:34
【问题描述】:

我想显示我的代码中所有 TODO 的列表,但通过使用历史记录 (Git) 进行排序并首先显示最新的。

有点像这里显示的结果:git – order commits introducing "TODO"s by date

但显示的是 TODO 的行,而不是哈希。

应该是这样的:

Fri May 22 11:22:27 2015 +0200 - // TODO: Refactor this code
Fri Apr 25 17:32:13 2014 +0200 - // TODO: We should remove this when tests pass
Sat Mar 29 23:11:39 2014 +0100 - // TODO: Rename to FooBar

我认为git log 无法证明这一点,但我不确定,而且我自己也没有 Git CLI mojo 来解决这个问题。有什么想法吗?

【问题讨论】:

  • 在 git log 命令中有一个 -S 标志,用于 greps 文件 cotnent 中的更改:git log --oneline --date-order -STODO。希望这会有所帮助。

标签: git todo


【解决方案1】:

这是一个近似的解决方案;格式不完全符合您的要求,因此您需要通过 awk 或类似的方式对其进行管道传输,以重新排序字段(如果这很重要)。

git ls-tree -r -z --name-only HEAD -- . | xargs -0 -n1 git blame -c | grep TODO | sort -t\t -k3

它的工作原理如下:

  • git ls-tree -r -z --name-only HEAD -- . 获取仓库中的所有文件名
  • xargs -0 -n1 git blame -c 为每个文件调用 git blame-c 告诉它在输出中的每个字段之间使用一个制表符(稍后用于排序)——这两部分基于this question 的最佳答案
  • grep TODO 过滤掉不包含 TODO 文本的行
  • sort -t\t -k3 使用制表符作为分隔符,按第三个字段(应该是日期)排序

请注意,这会完全忽略时区(即,它只是按原始日期排序,而不考虑 +0000 部分)。

【讨论】:

  • 哇!就快到了。它不处理我的名字('Name FamilyName'),所以排序功能在这一点上失败了,但它并不远。
  • 这很奇怪;我测试过的 repo 中有一些空间,它在那里对我来说很好用。实际上,它似乎完全没有 -t 标志对我有用。我在 Windows 上使用 bash,因此在您的操作系统上可能会有所不同。
  • 如何在输出中包含文件路径?
  • @RichardZilahi 我希望这就是您使用--full-tree 选项得到的结果,但我还没有尝试过。见git-scm.com/docs/git-ls-tree
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多