#php #git
#php #git
Вопрос:
Я хотел бы перечислить последние 10 тегов с сообщениями git с использованием php. Следуйте моим примерам:
фиксируем что-то
git commit -a -m 'hello world'
создание нового тега
git tag -a v.1.0 -m 'this new feauture show hello world'
Теперь в моем приложении я просто хочу перечислить созданные теги, например:
<html>
<head>
<title>Listing tags</title>
</head>
<body>
<h1>Last Tags</h1>
<ul>
<!-- I'm just assuming a situation, but this doesn't work -->
<?php $tags = system('git tag --list'); ?>
<?php foreach($tags as $tag> : ?>
<li><?php echo $tag['tag_name']; ?> - <?php echo $tag['msg']; ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
Комментарии:
1. В composer доступно несколько библиотек, которые предоставят вам хороший набор функций, которые вы можете использовать для работы с репозиториями Git в вашем PHP-коде. Попробуйте найти их в packagist .
2. да, чувак, я уже видел библиотеки, которые делают это, в будущем я обязательно буду использовать. Спасибо
Ответ №1:
-
git tag --list
не включает сообщения, используйте что-то вродеgit tag -n
вместо этого -
system()
возвращает только последнюю строку вывода команды при успешном выполнении. Остальная часть выходных данных выводится напрямую.Если вы хотите, чтобы все строки были в виде массива, используйте 2-й аргумент
exec()
:exec('git tag -n', $tags);
Комментарии:
1. @ShiraNail7 на самом деле проблема заключалась в системной функции, вы сразу перешли к сути проблемы. Я перешел к документу php, чтобы увидеть эти различия, спасибо, чувак.
Ответ №2:
Вы можете использовать --format
опцию для управления форматом выходных данных.
Например, следующий код извлекает имена тегов и темы фиксации, разделенные косой чертой.
$cmd = "git tag --list --format='%(refname:strip=2)/%(contents:subject)'";
exec($cmd, $out, $exit_status);
if ($exit_status) {
// command failed
}
foreach ($out as $line) {
$pos = strpos($line, '/');
$tag = substr($line, 0, $pos);
$msg = substr($line, $pos 1);
echo "$tag - $msgn";
}
Обратите внимание, %(refname:strip=2)
удаляет refs/tags/
префикс из части после $GIT_DIR
.
Комментарии:
1. Интересно @Ruslan Osmanov, я попробую, транки. О команде git для меня тихо, мои сомнения были в том, как использовать php для составления списка тегов.
2. Я попробовал то, что вы мне сказали, и все работает как по волшебству, кккккк. Самая большая проблема заключалась в том, что я использовал системную команду, которая сильно отличается от exec. Итак, я перешел к документу php, чтобы увидеть это. Еще раз, спасибо.