Как отобразить активный тег git с помощью php без exec / shell_exec

#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 Я обновил код. Теперь он снова функционирует так, как ожидалось. В какой-то момент в ссылках на теги начали добавляться конечные пробелы.