Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不使用“git”命令获取git提交详细信息_Php_Git - Fatal编程技术网

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

Php 不使用“git”命令获取git提交详细信息,php,git,Php,Git,首先,我看过并阅读过 在没有执行任何git命令的情况下,如何在git repo中获取当前头提交的日期?示例:我正在执行来自PHP的命令,无法调用exec,但我想获得当前提交的详细信息 我可以访问此repo的.git文件夹,但它似乎对提交详细信息没有帮助。我只能得到: 当前分支来自.git/HEAD 当前提交id SHA来自.git/refs/heads/ 但没有提交消息和提交日期。有没有办法从文件集中获取它?你不能 嗯,你也许可以,但是有太多复杂的问题 具体地说,每个Git对象都存储在所有对象的

首先,我看过并阅读过

在没有执行任何git命令的情况下,如何在git repo中获取当前头提交的日期?示例:我正在执行来自PHP的命令,无法调用exec,但我想获得当前提交的详细信息

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

当前分支来自.git/HEAD 当前提交id SHA来自.git/refs/heads/ 但没有提交消息和提交日期。有没有办法从文件集中获取它?

你不能

嗯,你也许可以,但是有太多复杂的问题

具体地说,每个Git对象都存储在所有对象的数据库中,由哈希ID键索引。有些对象是松散的:存储为单独的文件。这样的文件是zlib deflated。任何zlib充气器都可以读取此文件,并将压缩数据转换为可读、有用的数据,如果使用提交哈希ID执行此操作,您将看到实际的提交对象内容:

$git cat文件-p头| sed's/@/' 树1fd4a47af4942cbdee0bdcb4375612ab521a4a51 父级5571d085b3c9c2aa9470a10bcf2b8518d3e4ec99 作者Junio C Hamano 1531941857-0700 提交人Junio C Hamano 1531941857-0700 第三批2.19周期 签字人:Junio C Hamano 在这里,我使用了Git命令来完成这项工作,这违反了您的规则。日期是作者和提交人行上的两个时间戳。您可以随意解码它们,不过也要记住使用时区偏移量,-0700。内部内容以头作为前缀,在本例中为commit\0,因为所有Git对象都有头

但松散并不是存储对象的唯一方式。一旦一个对象被释放了一段时间,Git最终会将该对象打包到一个打包文件中。包文件的格式相当复杂。它是有文档记录的,请参阅-但它可能会发生更改,当git cat file-p已经为您完成所有工作时,它不值得编码


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

使用PHP库访问Git存储库如何?我相信libgit2会有一些PHP绑定。