在 git post-commit 挂钩中,如何获取已更改文件的列表?

问题描述 投票:0回答:3

尝试找出 Git 提交后挂钩中的提交花费了多长时间。

我有一个提交后 git 挂钩,它通过 API 提交有关提交的信息。我想做的是弄清楚提交花费了多长时间。大致。

我的假设是,可以通过找到所涉及文件的所有创建时间和修改时间的最小值并与最大创建时间和修改时间进行比较来计算出粗略值。

我可以在 Python 脚本中轻松完成此操作。如果有人告诉我这是文件“foo.txt”、“bar.txt”和“path/bla.txt”,我可以在基于这些文件的脚本中快速进行一些算术运算。

那么,在 git post-commit 挂钩中,如何获取已更改的文件列表?

git githooks
3个回答
14
投票

围绕 git 编写脚本时,您应该尝试坚持使用 plumbing 命令——它们的格式不太可能改变并且更容易解析。这是一个命令,它输出在提交中更改的路径的名称:

git diff-tree -r --name-only --no-commit-id <tree-ish>

除此之外,您可能希望检查索引,因为它包含有关文件暂存时间的时间戳,这可能会给您带来额外的优势;但是,我不认为有办法访问这些信息。


1
投票

做了一些研究,发现

git log --name-only -n1
是最好的方法。获得最小值并不难。和最大。通过进行一些字符串匹配并使用 Python
os.stat
模块来从文件中获取时间戳。

作为通用解决方案,它仍然不是很好,因为文件的修改时间并不能真正反映实际花费的时间的现实。


0
投票

感谢@JoshLee他的回答

我尝试完成它:

git diff-tree -r --name-only --diff-filter=ACMRTUXB --no-commit-id HEAD
© www.soinside.com 2019 - 2024. All rights reserved.