获取最新提交,以接触git存储库中的每个文件

获取最新提交,以接触git存储库中的每个文件,git,Git,我想找到涉及一组分支上曾经存在的每个文件的最后一次提交。也就是说,对于曾经存在于一个或多个指定分支上的每个文件,给我最后一次涉及它的提交 该提交可以添加文件、修改文件、删除文件等。我需要提交哈希,但最好使用相同的命令从提交(A、M、D等)、到达它的分支集和提交日期生成文件状态,这样我就不必运行更多命令来生成它。我怀疑我能一次获得所有这些,但这是我所需要的最终信息集 我知道如何获取存储库中的文件列表,但不知道如何将其简化为一组分支上存在的文件集。即使我生成了一个文件列表,但生成该列表然后返回并为每

我想找到涉及一组分支上曾经存在的每个文件的最后一次提交。也就是说,对于曾经存在于一个或多个指定分支上的每个文件,给我最后一次涉及它的提交

该提交可以添加文件、修改文件、删除文件等。我需要提交哈希,但最好使用相同的命令从提交(A、M、D等)、到达它的分支集和提交日期生成文件状态,这样我就不必运行更多命令来生成它。我怀疑我能一次获得所有这些,但这是我所需要的最终信息集

我知道如何获取存储库中的文件列表,但不知道如何将其简化为一组分支上存在的文件集。即使我生成了一个文件列表,但生成该列表然后返回并为每个文件创建git日志似乎效率低下。是否有一种方法可以一次性完成,并且至少为每个这样的文件获取最新的提交哈希

我尝试过这个基本算法:

  • 通过git日志收集所有文件--all--diff filter=A--pretty=format:--name only--date order
  • 对于每个文件,运行git log-n1--dateorder--all--pretty=format:%H--file
  • 第一步需要一段时间(也许30秒),但我可以接受,因为它只做了一次

    第2步每次调用git日志都需要3-4秒,这在处理数千个文件时太慢了

    我正在寻找更有效的方法,可能是通过管道

    或者,如果有一种加速git日志的方法,这也可能是一种解决方案。

    实现这一点的“困难”方法是通过查看日志文件实际执行回购。这会很快变得一团糟,你可能很难得到你想要的东西

    “简单”的方法是实际查看git对象。这是一个起点。其思想是,基本上可以通过查看git使用的对象来构建这些信息

    “艰难”的方式实际上更容易,但更混乱。 “简单”的方法更难,但你可能有更好的机会把它做好


    希望这能有所帮助。

    这是一大堆要求……在考虑效率之前,我会先尝试获得想要的输出

    以下是一些指针,可以组合起来创建脚本:

  • 生成跟踪文件列表(
    git ls tree
    git log
  • 获取每个(
    git日志
    )的最新提交
  • 对git status的一些变体,以获取每个git status的状态
  • 获取包含特定提交的分支(
    git分支
  • 标准命令行实用程序,可以很好地显示所有这些内容

  • 希望这有助于实现您的目标。

    这基本上是我已经做过的,但速度非常缓慢。git日志位目前占主导地位。因此,效率问题。啊,我明白了,也许在你的Q中提到你已经尝试过了(因此非常希望人们在提问之前证明他们已经尝试过了),然后重新制定你的Q,专门询问效率是否也只在1个分支上慢?如果没有,那么您可以对1个分支使用这些步骤,并为您想要的分支整体运行并行作业?我已经编辑了这个问题,以表明您尝试了一个基本算法。谢谢你的指点!只有一个分支的速度也很慢。如果我不使用--filename,它几乎是即时的,但这当然不是我想要的。