i want to display the git version on my site

非 Y 不嫁゛ 提交于 2019-12-03 02:48:11

问题


I want to display the git version number on my site.

I found that it was a commit hash and this wasn't suitable for non-technical users to reference.

I have created this class to display the version 'number' of the current git local to this script.


回答1:


Firstly, some git commands to fetch version information:

  • commit hash long
    • git log --pretty="%H" -n1 HEAD
  • commit hash short
    • git log --pretty="%h" -n1 HEAD
  • commit date
    • git log --pretty="%ci" -n1 HEAD
  • tag
    • git describe --tags --abbrev=0
  • tag long with hash
    • git describe --tags

Secondly, use exec() combined with the git commands of your choice from above to build the version identifier:

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:


Gist: 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;
  }

}



回答3:


If you'd like to do it without exec() and you're using git tagging:

You can get the current HEAD commit hash from .git/HEAD or .git/refs/heads/master. We then loop to find matching. Reversing the array first for speed because you're more likely to at a higher recent tag.

So if the current php file sits in a public_html or www folder one level down from the .git folder...

<?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';



回答4:


Simple way:

  • Short hash: $rev = exec('git rev-parse --short HEAD');
  • Full hash: $rev = exec('git rev-parse HEAD');



回答5:


I did it just as:

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

resource friendly and the same as i have under eclipse shown



来源:https://stackoverflow.com/questions/16334310/i-want-to-display-the-git-version-on-my-site

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!