【问题标题】:In a git post-commit hook how do I get a list of the files that were changed?在 git post-commit 钩子中,如何获取已更改文件的列表?
【发布时间】:2010-11-17 14:52:16
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我忘了说,我实际上知道如何使用--name-only 获取文件名,但其中还包括一堆我不关心的提交信息。
  • 我不确定文件的修改时间与提交所花费的时间有什么关系。唯一真正与之相关的是它的时间戳和下一个最近的提交时间戳之间的差异(如果你在多个分支上工作,它可能不是它的父级)。

标签: git githooks


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。比我的 git log 方法好得多。
【解决方案2】:

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

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

【讨论】:

  • 通常最好等待其他人回答,然后再宣布您已找到最佳方法; jleedev 的回答避免了额外的信息。
猜你喜欢
  • 2021-11-30
  • 2012-04-27
  • 2011-06-20
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2014-12-12
  • 2012-03-09
相关资源
最近更新 更多