Как я могу получить номер ревизии Subversion в PHP? - PullRequest
30 голосов
/ 21 сентября 2008

Я хочу, чтобы мое приложение PHP было помечено номером ревизии, которое оно использует, но я не хочу использовать CruiseControl или обновлять файл и загружать его каждый раз. Как мне это сделать?

Ответы [ 13 ]

53 голосов
/ 22 сентября 2008

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 локально, архивирует код, загружает и извлекает его

16 голосов
/ 21 сентября 2008

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

В PHP:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);
8 голосов
/ 01 июля 2011

Вот как я заставил это работать. Если ваш сервер настроен на shell_exec И у вас установлен SVN, просто запустите:

$revision = `svnversion`;

или

$revision = shell_exec('svnversion');
4 голосов
/ 21 сентября 2008

С этот ответ :

Вы можете сделать это, добавив следующее в любом месте вашего кода

$Id:$ 

Так, например, Джефф сделал:

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

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

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

3 голосов
/ 28 апреля 2011

Немного поздно, но используйте ловушку Subversion после фиксации. В папке хуков вашего репозитория создайте скрипт оболочки, подобный этому:

#!/bin/bash

REPOS="$1"
REV="$2"

cd /web/root
rm -f /web/root/templates/base.html
/usr/bin/svn update
/bin/sed -i s/REVISION/$REV/ /web/root/templates/base.html

В этом конкретном примере предполагается, что ваш действующий сайт находится в / web / root, а код разработки находится в другом месте. Когда вы фиксируете изменение dev, скрипт удаляет предыдущий действующий шаблон (чтобы избежать сообщений о конфликтах), запускает обновление и заменяет вхождения REVISION в шаблоне фактическим номером редакции.

Больше на крючках здесь

2 голосов
/ 03 марта 2010

Смотрите мой ответ на аналогичный вопрос "Пометить" экспорт 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 ноября 2009

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

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}
2 голосов
/ 21 сентября 2008

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

2 голосов
/ 21 сентября 2008

Самый простой способ - использовать Subversion "Подстановка ключевых слов". В книге SVN есть руководство ( Контроль версий с Subversion ).

Вам просто нужно добавить текст $ Rev $ где-нибудь в вашем файле. Затем включите ключевое слово в вашем хранилище. При оформлении заказа SVN подставит номер редакции в файл.

2 голосов
/ 21 сентября 2008

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

...