代码之家  ›  专栏  ›  技术社区  ›  The Godfather

不使用“git”命令获取git提交详细信息

  •  -1
  • The Godfather  · 技术社区  · 7 年前

    首先,我看过 Git commit date

    如何在git repo中获取当前HEAD commit的日期 没有 执行任何“git”命令?示例:我从PHP执行命令,无法调用 exec ,但我想获取当前提交的详细信息。

    我可以访问此repo的.git文件夹,但它似乎对提交详细信息没有帮助。我只能得到:

    • 当前分支来自 .git/HEAD
    • 当前提交id(SHA)来自 .git/refs/heads/<branch>

    但没有提交消息和提交日期。有没有办法从文件集中找到它?

    1 回复  |  直到 7 年前
        1
  •  4
  •   torek    7 年前

    你不能。

    可以

    具体来说,每个Git 对象 宽松: 作为单独的文件存储。这样的文件是zlib deflated。任何zlib充气器都可以读取此文件并将压缩数据转换为可读的有用数据,如果使用commit hash ID执行此操作,您将看到的是实际的commit对象内容:

    $ git cat-file -p HEAD | sed 's/@/ /'
    tree 1fd4a47af4942cbdee0bdcb4375612ab521a4a51
    parent 5571d085b3c9c2aa9470a10bcf2b8518d3e4ec99
    author Junio C Hamano <gitster pobox.com> 1531941857 -0700
    committer Junio C Hamano <gitster pobox.com> 1531941857 -0700
    
    Third batch for 2.19 cycle
    
    Signed-off-by: Junio C Hamano <gitster pobox.com>
    

    (这里我使用了Git命令来完成这项工作,这违反了您的规则。)日期是 author committer -0700 也在这儿。(在本例中,内部内容的前缀是头 commit <size>\0 ,因为所有Git对象都有标题。)

    但是 不是存储对象的唯一方式。一旦一个对象松了一段时间,Git最终会 包装 把物体变成 . 包文件的格式相当复杂。它 the Git technical documentation file 但它可能会改变,不值得编码 git cat-file -p 已经为你做了所有的工作。

    所以,只要使用Git命令。这确实意味着您需要安装Git,但您可能无论如何都需要它。

    推荐文章