【发布时间】:2012-08-04 15:22:16
【问题描述】:
'git status' 命令给出自上次提交以来更改的文件列表。
带有 mmin 或 mtime 选项的 find 命令给出在给定时间长度内保存的文件列表。但它也会包含我编辑过的文件,然后撤消更改,即内容未更改的文件。
我需要的是获取在给定时间长度内已修改(内容已更改)的文件列表。有可能吗?
谢谢
【问题讨论】:
'git status' 命令给出自上次提交以来更改的文件列表。
带有 mmin 或 mtime 选项的 find 命令给出在给定时间长度内保存的文件列表。但它也会包含我编辑过的文件,然后撤消更改,即内容未更改的文件。
我需要的是获取在给定时间长度内已修改(内容已更改)的文件列表。有可能吗?
谢谢
【问题讨论】:
你想要的是 Git whatchanged。
这是一个使用whatchanged 显示添加文件的示例(我没有碰巧在我使用的测试存储库中修改过文件,但您可以轻松地将结果限制为修改过的文件而不是添加的文件):
$ git whatchanged --after='2012-07-07 17:20' --before='2012-07-28 23:31' --diff-filter=A -r --oneline --name-only
82b9dcf F
E/F
95a02ce D
D
如手册中所述,whatchanged 在幕后使用rev-list 和diff-tree,whatchanged 还使用rev-list 和diff-tree 可用的选项。 diff-tree --diff-filter 选项将:
仅选择已添加 (A)、已复制 (C)、已删除 (D)、已修改 (M)、重命名 (R)、类型(即常规文件、符号链接、子模块...)已更改的文件(T)、未合并 (U)、未知 (X) 或它们的配对已断开 (B)。
如果你想直接使用rev-list和diff-tree(避免提交日志whatchanged想要输出),你可以使用:
$ git diff-tree --diff-filter=A -r --name-only $(git rev-list -n 1 --before='2012-07-07 17:20' HEAD) $(git rev-list -n 1 --before='2012-07-28 23:31' HEAD)
D
E/F
【讨论】:
--pretty=oneline 而不是--oneline 才能让它工作。但我认为它提供了在给定时间范围内提交的所有文件。它包括在给定时间范围之前保存的文件。