#php #git
#php #git
Вопрос:
Предполагая, что тег в данный момент извлечен, а папка .git находится в корне кодовой базы сайта, я хотел бы включить тег в отображаемый html страницы с использованием php.
Я видел решения, которые используют shell_exec / shell, но предполагая, что я не могу использовать эти две функции, как я могу получить метку текущего извлеченного тега. Например v1.2.3
, используя только php?
Ответ №1:
ОБНОВЛЕНО 04-01-2022, чтобы обрезать содержимое для удаления (завершающих) пробелов.
Вы можете получить текущий хэш фиксации заголовка из .git/HEAD
. Затем вы можете перебрать все ссылки на теги, чтобы найти соответствующий хэш коммита. Сначала мы переворачиваем массив, так как вы, скорее всего, находитесь в недавнем теге, чем в старом.
Очевидно, что замена exit
s переменными и перенос его на страницу даст вам лучший результат.
Итак, если ваш 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 = trim(file_get_contents($file));
if($HEAD_hash === $contents)
{
exit('Current tag is ' . basename($file));
}
}
exit('No matching tag');
Комментарии:
1. Я не могу получить хэш из HEAD, потому что мой
.git/HEAD
содержит что-то вродеref: refs/heads/master
2. На месте. Я обновил свой ответ, чтобы указать на
../.git/refs/heads/master
3. К сожалению, это больше не работает. Ни один из моих тегов не имеет того же хэша, что и соответствующий хэш заголовка.
4. @VinceKronlein Я обновил код. Теперь он снова функционирует так, как ожидалось. В какой-то момент в ссылках на теги начали добавляться конечные пробелы.