使用 git 列出代码中按引入日期排序的 TODO
Use git to list TODOs in code sorted by date introduced
我想显示我的代码中所有 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 来自己解决这个问题。有什么想法吗?
这是一个近似解;格式不完全符合您的要求,因此如果这很重要,您需要通过 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 部分)。
我想显示我的代码中所有 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 来自己解决这个问题。有什么想法吗?
这是一个近似解;格式不完全符合您的要求,因此如果这很重要,您需要通过 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 部分)。