Я хочу отобразить версию git на моем сайте
Я хочу показать номер версии git на моем сайте.
Я обнаружил, что это хеш-код, и это не подходит для нетехнических пользователей для ссылки.
Я создал этот класс для отображения версии 'number' текущего git local для этого скрипта.
Ответы
Ответ 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
- длинный тег с хешем
Во-вторых, используйте 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)
Ответ 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
Если вы хотите сделать это без exec()
и вы используете теги git:
Вы можете получить текущий хеш-код HEAD из .git/HEAD
или .git/refs/heads/master
. Затем мы создаем петлю для поиска соответствия. Реверсирование массива сначала для скорости, потому что вы более склонны к более позднему тегу.
Поэтому, если текущий файл 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';
Ответ 4
Простой способ:
- Короткий хеш:
$rev = exec('git rev-parse --short HEAD');
- Полный хэш:
$rev = exec('git rev-parse HEAD');
Ответ 5
Я сделал это так же, как:
substr(file_get_contents(GIT_DIR.'/refs/heads/master'),0,7)
дружественный ресурс и такой же, как у меня при затмении показано