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

时间:2010-11-17 14:52:16

标签: git githooks

试着弄清楚在Git post-commit钩子中提交花了多长时间。

我有一个post-commit git hook,它通过API提交有关提交的信息。我想要做的是弄清楚在提交上花了多长时间。大致。

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:0)

进行了一些研究,发现git log --name-only -n1是最好的方法。获得最低分并不难。最多通过执行一些字符串匹配并使用Python os.stat模块来标记文件中的时间戳。

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