Получение последнего номера ревизии в SVN? - PullRequest
97 голосов
/ 23 февраля 2009

Используя PHP, Perl или Python (предпочтительно PHP), мне нужен способ запросить базу данных SVN и узнать номер последней редакции, отправленной в SVN. Мне не нужно ничего, кроме этого. Он должен быть не интенсивным (поэтому я делаю это каждые 5 минут как задание cron; производительность SVN не должна быть затронута).

SVN находится в моей внутренней сети, но не на моем конкретном компьютере.

У меня установлен SVN, но нет привязок для PHP / Perl / Python. Я использую Windows XP, но я бы предпочел независимое от платформы решение, которое также может работать в Linux. Если у вас есть решение только для Linux (или только для XP), это также будет полезно.

Ответы [ 25 ]

2 голосов
/ 06 марта 2012
nickh@SCLLNHENRY:~/Work/standingcloud/svn/main/trunk/dev/scripts$ svnversion
12354

Или

nickh@SCLLNHENRY:~/Work/standingcloud/svn/main/trunk/dev/scripts$ svn info --xml |     xmlstarlet sel -t --value-of "//entry/@revision"
12354

Или

nickh@SCLLNHENRY:~/Work/standingcloud/svn/main/trunk/dev/scripts$ svn info --xml | xmlstarlet sel -t --value-of "//commit/@revision"
12335
2 голосов
/ 23 января 2011

Вы можете использовать формат XML out, например:

  svn info --xml | grep 'revision' | head -1 | grep -Eo "[0-9]+" | xargs expr -1 +

Пример: использование номера редакции

working=`svn info --xml | grep 'revision' | head -1 | grep -Eo "[0-9]+" | xargs expr -1 +`
svn diff -r $working:HEAD --summarize --xml
2 голосов
/ 23 февраля 2009

Вы ищете вызов, похожий на вызов командной строки

svn info URL

Кажется, что это возможно с помощью библиотеки pysvn, и есть рецепт , который должен помочь вам начать работу. Я не уверен, что есть что-то подобное для PHP.

Если вам нужно самим вызвать двоичный файл SVN, обязательно используйте параметр --xml, чтобы получить результат в виде XML. Это должно быть легче разобрать, чем вывод командной строки.

2 голосов
/ 04 апреля 2012

Вы можете использовать любую команду:

1)
> svn info | awk '/Revision:/ { print $2 }' =>returns the latest version


2)
> svn log -l 1 | grep '^r[0-9]\+' | awk '{print $1}'

svn log -l 1     => returns the latest version commit 
grep '^r[0-9]\+' => greps the r4324 (revision) number
awk '{print $1}' => prints the match found
2 голосов
/ 10 октября 2014

Вы можете попробовать следующую команду:

svn info -r 'HEAD' | grep Revision: | awk -F' ' '{print $2}'
2 голосов
/ 28 февраля 2013

Если вы хотите действительно короткий:

svn info ^/

Обозначение каретки - это сокращение от "URL корневого каталога хранилища".

1 голос
/ 01 мая 2014

Если вам не хватает необходимости делать это из пакетного файла Windows, вот заклинание, которое вы ищете:

set REV=unknown
for /f "usebackq tokens=1,2 delims=: " %%A in (`svn info`) do if "%%A" == "Revision" set REV=%%B
echo Current SVN revision is %REV%

Это запускает "svn info", повторяя каждую строку сгенерированного вывода. Он использует двоеточие в качестве разделителя между первым и вторым токеном в строке. Когда первый токен равен «Revision», он устанавливает переменную среды REV для второго токена.

1 голос
/ 25 января 2013

Просто svn info в BASH даст вам все детали

RESULT:
Path: .
URL: 
Repository Root: 
Repository UUID: 
Revision: 54
Node Kind: directory
Schedule: normal
Last Changed Author: 
Last Changed Rev: 54
Last Changed Date: 

Вы получите ПЕРЕСМОТР от этого

0 голосов
/ 19 июня 2017

Самый простой и чистый способ сделать это (на самом деле SVN 1.9, выпущенный в 2015 году) использует:

svn info --show-item revision [--no-newline] [SVNURL/SVNPATH] 

Выход - номер последней ревизии (младшая) для SVNURL, или номер текущей редакции рабочей копии SVNPATH. --no-newline является необязательным, указывает svn не испускать косметический символ новой строки (\n) после значения, если вам требуется минимальный вывод (только номер редакции).

См .: https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item

0 голосов
/ 27 декабря 2016

Будет получен только номер редакции последней измененной ревизии:

<?php
$REV="";
$repo = ""; #url or directory
$REV = svn info $repo --show-item last-changed-revision;
?>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...