【发布时间】:2015-09-20 11:57:59
【问题描述】:
我想找到最后一次提交,该提交触及了曾经存在于一组分支上的每个文件。也就是说,对于曾经存在于一个或多个指定分支上的每个文件,给我最后一次提交。
该提交可能已经添加了文件、修改了文件、删除了文件等。我需要提交哈希,但最好从提交中生成文件状态(A、M、D 等),到达它的分支集和使用相同命令的提交日期,因此我不必运行更多命令来生成它。我怀疑我是否可以一次获得所有这些信息,但这是我需要的最终信息集。
我知道如何获取存储库中的文件列表,但不知道如何将其减少到曾经存在于一组分支上的文件集。即使我生成了一个文件列表,生成它然后返回并为每个文件做一个 git 日志似乎效率低下。有没有办法一次性完成并至少获取每个此类文件的最新提交哈希。
我已经尝试过这个基本算法:
- 通过 git log --all --diff-filter=A --pretty=format: --name-only --date-order 收集所有文件
- 对于每个文件,运行 git log -n1 --date-order --all --pretty=format:%H -- file
第 1 步需要一段时间(可能需要 30 秒),但我可以忍受,因为它只完成了一次。
第 2 步每次调用 git log 需要 3-4 秒,这在处理数千个文件时太慢了。
我正在寻找更有效的方法,可能是通过管道。
或者,如果有一种方法可以加快 git log 的速度,这也是一种解决方案。
【问题讨论】:
标签: git