Как я могу получить номер ревизии Subversion в PHP?

Интересно, что Apple конкретно объясняет это поведение в своих NSURLSessionDataDelegate (но ни в базовом делетете NSURLSessionTaskDelegate, ни в NSURLSessionDownloadDelegate)

ПРИМЕЧАНИЕ

Объект NSURLSession не должен иметь делегата. Если делегат не назначен, при создании задач в этом сеансе вы должны предоставить блок обработчика завершения для получения данных.

Блок обработчика завершения в основном предназначен как альтернатива использованию пользовательского делегата. Если вы создаете задачу с использованием метода, который принимает блок обработчика завершения, методы делегата для ответа и доставки данных не вызываются.

blockquote>

30
задан Peter Mortensen 12 November 2017 в 13:39
поделиться

9 ответов

Ключевые слова SVN не являются хорошим решением. Поскольку другие указали, что добавляющий $Revision$ в файле только влияет определенный файл , который не может изменяться в течение долгого времени.

Запоминание "отредактировать" файл (путем добавления или удаления пустой строки), прежде чем каждая фиксация бессмысленна. Вы могли также просто ввести пересмотр вручную.

Один хороший способ сделать это (что я знаю о) должно иметь процесс автоматизированного развертывания (который всегда является хорошей вещью), и использование команды svnversion. Вот то, что я делаю:

Везде, где мне нужен пересмотр, я делаю включение: <?php include 'version.php'; ?>. Этот "version.php" файл только имеет число пересмотра. Кроме того, это не часть репозитория (это установило, чтобы быть проигнорированным). Вот то, как я создаю его:

1) На проектах, где SVN установлен на сервере, я также использую его для развертывания. Получение последней версии к серверу, у меня есть сценарий, который среди прочего делает следующее (это работает на сервере):

cd /var/www/project
svn update
rm version.php
svnversion > version.php

2) На проектах, где SVN не установлен, мой сценарий развертывания более сложен: это создает version.php файл локально, архивирует код, загрузки и извлекает его

53
ответ дан daremon 12 November 2017 в 23:39
поделиться

В большинстве случаев код сервера на самом деле содержал бы "Экспорт" кода, не контроль, и поэтому не содержал бы .svn папки. По крайней мере это - установка, которую я чаще всего вижу. Другие на самом деле проверяют свой код на веб-сервер?

2
ответ дан Kibbee 12 November 2017 в 23:39
поделиться
  • 1
    Это - ответ, который привел к решению, но я принял свой собственный ответ начиная с I' ve, учитывая полный исходный пример. Так спасибо. И благодаря @flup для указания на гибридную потоковую передачу/отображение. – slim 7 March 2014 в 04:23

Принятие Вашего webroot является проверенной копией дерева подверсии, Вы могли проанализировать/.svn/entries файл и сцепить число пересмотра (4-я строка здесь)...

В PHP:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);
16
ответ дан Oli 12 November 2017 в 23:39
поделиться
  • 1
    Я утвердил бы, что то, что разыскивается, не нарушает УСПОКОИТЕЛЬНУЮ/НЕ СОХРАНЯЮЩУЮ СОСТОЯНИЕ природу ресурсов. Представление все еще ' stateless' в ответе, который выпущен, независимо от действия, бравшего каждый объект. – cmonkey 7 January 2014 в 09:54

Можно быть рядом с Ключевые слова SVN . Добавьте $Revision$, где Вы хотите, чтобы пересмотр показал, но который только покажет последний пересмотр, что конкретный файл был изменен, таким образом, необходимо будет делать изменение в файл каждым разом. Получение глобального числа пересмотра не возможно без своего рода внешнего сценария или рычага постфиксации.

2
ответ дан noah 12 November 2017 в 23:39
поделиться
  • 1
    Спасибо за рассмотрение вопроса - но ни одна из функций Restlet, упомянутых в Вашем блоке цитирования, не обращается к потребностям, описанным в вопросе. У меня был беглый взгляд через документы Restlet, и это, кажется, десериализовывает содержание HTTP в объект сразу точно так же, как Spring RestTemplate. Это doesn' t представляют InputStream так Вы can' t даже самокрутка событийно-ориентированный парсинг. – slim 10 January 2014 в 21:05

Из этого ответа:

Можно сделать это путем добавления следующего где угодно в коде

$Id:$ 

Таким образом, например, Jeff сделал:

<div id="svnrevision">svn revision: $Id:$</div>

и при проверке в замененном $Id сервера: $ с текущим числом пересмотра. Я также нашел эту ссылку.

Существует также $Date: $, $Rev: $, $Revision: $

4
ответ дан Community 12 November 2017 в 23:39
поделиться
  • 1
    Это - то, что я подразумевал под " я ценю, я мог прокрутить свою собственную реализацию этого поведения с потоковой передачей API JSON от Jackson, GSON и т.д. " - однако отсутствие других предложений, кажется, подразумевает это it' s единственный доступный маршрут, так спасибо. – slim 7 January 2014 в 23:20

Самый легкий путь состоит в том, чтобы использовать Подверсию "Замена Ключевого слова". Существует руководство здесь в книге SVN ( Управление версиями с Подверсией ).

необходимо будет в основном просто добавить текстовый $Rev$ где-нибудь в файле. Затем включите ключевое слово в своем репозитории. На контроле SVN заменит числом пересмотра в файл.

2
ответ дан Peter Mortensen 12 November 2017 в 23:39
поделиться

Вы также можете сделать это так:

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}
2
ответ дан 27 November 2019 в 23:08
поделиться

Другая возможность сделать это - запустить cron, который выполняет шаги, описанные в «Процессе развертывания» (при условии, что это сервер * nix / FreeBSD).

0
ответ дан 27 November 2019 в 23:08
поделиться

См. Мой ответ на аналогичный вопрос «Отметить» экспорт svn с ревизией .

Если вы фиксируете номер версии при экспорте, вы можете использовать:

svn export /path/to/repository | grep ^Exported > revision.txt

Чтобы удалить все, кроме номера версии, вы можете передать это по конвейеру с помощью этой команды sed:

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
2
ответ дан 27 November 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: