我想在我的网站上显示git版本

时间:2013-05-02 09:15:00

标签: php git github versioning

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

我发现这是一个提交哈希,这不适合非技术用户参考。

我创建了这个类来显示这个脚本当前git本地的版本'number'。

6 个答案:

答案 0 :(得分:38)

首先,一些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

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

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)

答案 1 :(得分:14)

要点:https://gist.github.com/lukeoliff/5501074

<?php

class QuickGit {

  public static function version() {
    exec('git describe --always',$version_mini_hash);
    exec('git rev-list HEAD | wc -l',$version_number);
    exec('git log -1',$line);
    $version['short'] = "v1.".trim($version_number[0]).".".$version_mini_hash[0];
    $version['full'] = "v1.".trim($version_number[0]).".$version_mini_hash[0] (".str_replace('commit ','',$line[0]).")";
    return $version;
  }

}

答案 2 :(得分:7)

如果您想在没有exec()的情况下执行该操作,并且您正在使用git标记:

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

因此,如果当前的php文件位于距public_html文件夹一层的www.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 = file_get_contents($file);

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

print 'No matching tag';

答案 3 :(得分:2)

简单方法:

  • 短哈希$rev = exec('git rev-parse --short HEAD');
  • 完整哈希$rev = exec('git rev-parse HEAD');

答案 4 :(得分:1)

我只是这样做:

substr(file_get_contents(GIT_DIR.'/refs/heads/master'),0,7)

资源友好,与我在日食下显示的一样

答案 5 :(得分:0)

在终端中运行git tag预览标签并说出自己的名字,即

v1.0.0
v1.1.0
v1.2.4

这是获取最新版本 v1.2.4

的方法
function getVersion() {
  $hash = exec("git rev-list --tags --max-count=1");
  return exec("git describe --tags $hash"); 
}
echo getVersion(); // "v1.2.4"

巧合(如果您的标签已订购),因为exec仅返回最后一行,我们可以这样做:

function getVersion() {
  return exec("git tag");
}
echo getVersion(); // "v1.2.4"

要获取所有行字符串,请使用shell_exec

function getVersions() {
  return shell_exec("git tag");
}
echo getVersions(); // "v1.0.0
                    // v1.1.0
                    // v1.2.4"

要获取数组:

$tagsArray = explode(PHP_EOL, shell_exec("git tag"));

按日期对标签进行排序:

git tag --sort=committerdate

Docs: git-for-each-ref#_field_names

出于排序目的,具有数字值的字段按数字顺序(对象大小,作者日期,提交日期,创建者日期,标记日期)进行排序。所有其他字段均按其字节值顺序进行排序。