我想在我的网站上显示Git版本。如何显示来自Git的语义版本号,以便网站的非技术用户在提出问题时可以轻松参考?
njthzxwz1#
首先,使用一些git命令获取版本信息:
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命令来构建版本标识符:
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)
jxct1oxe2#
如果你不想使用exec(),而是使用git lightweight(参见下面的注解)标记:你可以从.git/HEAD或.git/refs/heads/master得到当前的HEAD提交哈希值,然后循环查找匹配项。为了加快速度,首先反转数组,因为你更有可能找到最近的标签。因此,如果当前php文件位于public_html或www文件夹下一级.git文件夹...
.git/HEAD
.git/refs/heads/master
public_html
www
.git
<?php $HEAD_hash = trim(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';
y0u0uwnf3#
要点: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; } }
0x6upsns4#
简单方法:
$rev = exec('git rev-parse --short HEAD');
$rev = exec('git rev-parse HEAD');
qyyhg6bp5#
我只是这样做:substr(file_get_contents(GIT_DIR.'/refs/heads/master'),0,7)资源友好,和我在eclipse下显示的一样
substr(file_get_contents(GIT_DIR.'/refs/heads/master'),0,7)
ie3xauqp6#
在终端中运行git tag预览您的标签,并说您得到了,即:
git tag
v1.0.0 v1.1.0 v1.2.4
这里是如何到获取这最新版本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:
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
文档:git for each-ref #字段名称为了便于排序,带有数值的字段按数值顺序排序(objectsize、authordate、committerdate、creatordate、taggerdate)。所有其他字段按字节值顺序排序。
6条答案
按热度按时间njthzxwz1#
首先,使用一些
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命令来构建版本标识符:jxct1oxe2#
如果你不想使用
exec()
,而是使用git lightweight(参见下面的注解)标记:你可以从
.git/HEAD
或.git/refs/heads/master
得到当前的HEAD提交哈希值,然后循环查找匹配项。为了加快速度,首先反转数组,因为你更有可能找到最近的标签。因此,如果当前php文件位于
public_html
或www
文件夹下一级.git
文件夹...y0u0uwnf3#
要点:https://gist.github.com/lukeoliff/5501074
0x6upsns4#
简单方法:
$rev = exec('git rev-parse --short HEAD');
$rev = exec('git rev-parse HEAD');
qyyhg6bp5#
我只是这样做:
substr(file_get_contents(GIT_DIR.'/refs/heads/master'),0,7)
资源友好,和我在eclipse下显示的一样
ie3xauqp6#
在终端中运行
git tag
预览您的标签,并说您得到了,即:这里是如何到获取这最新版本
v1.2.4
exec
只返回最后一行,我们可以这样做:要获取所有行字符串,请使用
shell_exec
:要获取数组:
要按日期对标记排序:
文档:git for each-ref #字段名称
为了便于排序,带有数值的字段按数值顺序排序(objectsize、authordate、committerdate、creatordate、taggerdate)。所有其他字段按字节值顺序排序。