web-dev-qa-db-ja.com

現在のGit 'バージョン'をPHP

サイトにGitバージョンを表示したい。

サイトの技術者でないユーザーが問題を提起するときに簡単に参照できるGitのセマンティックバージョン番号を表示するにはどうすればよいですか?

20
lukeocodes

まず、バージョン情報を取得するいくつかのgitコマンド:

  • commit hash long
    • _git log --pretty="%H" -n1 HEAD_
  • commit hash short
    • _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)
_
43
Jens A. Koch

要旨: 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;
  }

}
14
MrO

exec()を使用せずにgit taggingを使用している場合:

現在のHEADコミットハッシュを.git/HEADまたは.git/refs/heads/masterからコミットします。次に、一致するものを見つけるためにループします。最近のタグで。

したがって、現在のphpファイルがpublic_htmlフォルダから1レベル下の.gitまたはwwwフォルダにある場合...

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

私はそれを次のように行いました:

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

リソースに優しく、Eclipseの下にあるものと同じ

2
Virtimus

簡単な方法:

  • 短いハッシュ$rev = exec('git rev-parse --short HEAD');
  • 完全なハッシュ$rev = exec('git rev-parse HEAD');
2