我想找到触及一组分支上曾经存在的每个文件的最后一次提交。也就是说,对于在一个或多个指定分支上存在的每个文件,给我最后一次触及它的提交。
该提交可以添加文件,修改文件,删除文件等。我需要提交哈希,但从提交(A,M,D等)生成文件状态会很好,到达它的分支集和使用相同命令的提交日期,所以我不必再运行更多命令来生成它。我怀疑我可以一次性完成所有这些,但这是我需要的最终信息。
我知道如何获取存储库中的文件列表,但不知道如何将其减少到一组分支上曾经存在的文件集。即使我生成了一个文件列表,生成它似乎效率低下,然后返回并为每个文件执行git日志。有没有办法一次性完成,至少为每个这样的文件获取最新的提交哈希值。
我尝试过这个基本算法:
第1步需要一段时间(也许是30秒),但我可以忍受,因为它只进行了一次。
每次调用git log时,步骤2需要3-4秒,这在处理数千个文件时速度太慢。
我正在寻找一些方法来更有效地做到这一点,可能是通过管道。
或者,如果有办法加速git日志也可以作为解决方案。
答案 0 :(得分:0)
" hard"这样做的方法是通过查看日志文件来实际执行repo。这会很快变得混乱,你可能很难得到你想要的东西。
" easy"方法是实际查看git对象。这是一个起点。我们的想法是,您可以通过查看git使用的对象来基本构建此信息。
" hard"方式实际上更容易但更麻烦。 " easy"方式更难,但你可能有更好的机会正确。
希望这有帮助。
答案 1 :(得分:0)
这相当多的要求......在尝试提高效率之前,我先尝试获得想要的输出。
以下是一些可以放在一起创建脚本的指针:
git ls-tree
或git log
)git log
)git status
的某些变体,以获取每个git branch
)希望有助于实现目标。