在 PHP 中显示当前的 Git“版本”

2022-08-30 16:48:11

我想在我的网站上显示 Git 版本。

如何显示来自 Git 的语义版本号,站点的非技术用户在提出问题时可以轻松引用?


答案 1

首先,一些获取版本信息的命令:git

  • 提交哈希长
    • git log --pretty="%H" -n1 HEAD
  • 提交哈希短
    • git log --pretty="%h" -n1 HEAD
  • 提交日期
    • git log --pretty="%ci" -n1 HEAD
  • 标记
    • git describe --tags --abbrev=0
  • 标记长,带哈希
    • git describe --tags

其次,结合上面选择的 git 命令来构建版本标识符:exec()

class ApplicationVersion
{
    const MAJOR = 1;
    const MINOR = 2;
    const PATCH = 3;

    public static function get()
    {
        $commitHash = trim(exec('git log --pretty="%h" -n1 HEAD'));

        $commitDate = new \DateTime(trim(exec('git log -n1 --pretty=%ci HEAD')));
        $commitDate->setTimezone(new \DateTimeZone('UTC'));

        return sprintf('v%s.%s.%s-dev.%s (%s)', self::MAJOR, self::MINOR, self::PATCH, $commitHash, $commitDate->format('Y-m-d H:i:s'));
    }
}

// Usage: echo 'MyApplication ' . ApplicationVersion::get();

// MyApplication v1.2.3-dev.b576fd7 (2016-11-02 14:11:22)

答案 2

如果你想在没有它的情况下做到这一点,并且你正在使用git轻量级(见下面的评论)标记:exec()

您可以从 或 获取当前的 HEAD 提交哈希值。然后,我们循环查找匹配项。首先反转数组以获得速度,因为您更有可能在更高的最近标记。.git/HEAD.git/refs/heads/master

因此,如果当前的php文件位于距离文件夹低一级的或文件夹中...public_htmlwww.git

<?php

$HEAD_hash = file_get_contents('../.git/refs/heads/master'); // or branch x

$files = glob('../.git/refs/tags/*');
foreach(array_reverse($files) as $file) {
    $contents = trim(file_get_contents($file));

    if($HEAD_hash === $contents)
    {
        print 'Current tag is ' . basename($file);
        exit;
    }
}

print 'No matching tag';

推荐