Используя PHP, Perl или Python (предпочтительно PHP), мне нужен способ запросить базу данных SVN и узнать номер последней версии, отправленной в SVN. Мне больше ничего не нужно. Он должен быть неинтенсивным (поэтому я делаю это каждые 5 минут в качестве задания cron; на производительность SVN это не должно влиять).
SVN находится в моей интрасети, но не на моем конкретном компьютере.
У меня установлен SVN, но никаких привязок для PHP / Perl / Python не установлено. Я использую Windows XP, но я бы предпочел независимое от платформы решение, которое также может работать в Linux. Если у вас есть решение только для Linux (или только для XP), это также будет полезно.
$ svn info --show-item revision
svn: invalid option: --show-item
Использование Apache Subversion 1.8.16 (r1740329), скомпилировано 26 апреля 2016 г. Также пробовалось с CollabNet 1.6.11 (r934486), скомпилировано 6 марта 2014 г.svn help info
с юридическими вариантами дляsvn info
--show-item
доступенОтветы:
Вы можете получить вывод в XML следующим образом:
В случае ошибки вывод будет направлен на stderr. Чтобы захватить stderr в вашем выводе, используйте следующим образом:
источник
svn info $url 2>&1
;svn info $url | grep 'Last Changed Rev' | awk '{ print $4; }'
svn info --show-item revision $url
илиsvn info --show-item last-changed-revision $url
.Если вы хотите проанализировать локальную рабочую копию, лучший инструмент
svnversion
, который поставляется с Subversion и производит такие выходные данные, как968:1000M
. В документации говорится:источник
Это даст вам номер последней версии во главе вашего репозитория.
В блоге есть несколько хороших сообщений об интеграции номеров подрывной деятельности в ваш сценарий сборки:
источник
svn info -r HEAD
Это должно работать в Bash из рабочего каталога. Я использовал его в Windows с установленным unixutils :
источник
svn info | grep Revision | cut -d " " -f 2
, вернет вторую строку после того, как она будет разделена с использованием пробелов.Следующее должно работать:
Он возвращает единственный номер редакции.
источник
Чтобы действительно получить номер последней версии («головной версии») в вашем удаленном репозитории, используйте это:
Например, выходы:
источник
Примечание о получении номера последней версии:
Скажем, я
cd
перешел в измененный подкаталог (MyProjectDir
). Затем, если я позвонюsvnversion
:... Я получаю "
323:340
", что, я полагаю, означает: " у вас есть элементы, начиная с ревизии 323 и до 340 ".Затем, если я позвоню
svn info
:... Я получаю "
323
" как ревизию - что на самом деле является самой низкой ревизией из тех, о которых сообщилsvnversion
!Затем мы можем использовать
svn info
в рекурсивном режиме для получения дополнительной информации из локального каталога:... (удалите,
grep
чтобы увидеть более подробную информацию).Наконец, что делать, если мы хотим проверить, какая последняя версия онлайн- репозитория (в данном случае @
server.com
)? Затем мы снова выдаемsvn info
, но с-r HEAD
(обратите внимание на разницу между заглавной-R
буквой ранее и строчной-r
теперь):Интересно то, что - по-
svn info
прежнему относится к текущему подкаталогу (MyProjectDir
), однако онлайн-путь сообщается какMyProjectDir
(в отличие.
от локального случая) - и сообщаемая онлайн-ревизия является самой высокой (340
- в отличие от самой низкой,323
сообщенной локально).источник
Начиная с Subversion 1.9, вы можете использовать опцию --show-item, чтобы получить значение одного из полей
svn info
вывода команды. Эта команда отобразит только номер версии:Получите XML-вывод информации svn с помощью
--xml
option и используйте PowerShell, чтобы получить номер версии. Вот простой пример:Используя VisualSVN Server 3.4 или новее, вы можете получить количество ревизий в репозитории, выполнив следующие команды:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Дополнительные сведения см. В
Get-SvnRepository
справочнике по командлетам PowerShell .источник
Я думаю ты ищешь
Можете ли вы выполнить оболочку для этой команды?
Вероятно, вам также потребуется предоставить учетные данные для входа в репозиторий.
источник
Кто-то побил меня опубликовать ответ
svnversion
, что, безусловно, является лучшим решением, если у вас есть рабочая копия (IIRC, он не работает с URL-адресами). Я добавлю следующее: если вы находитесь на сервере, на котором размещен SVN, лучше всего использоватьsvnlook
команду. Это команда, которую вы используете при написании сценария перехвата для проверки репозитория (и даже текущей транзакции в случае перехватчиков перед фиксацией). Вы можете ввестиsvnlook help
подробности. Вероятно, вы захотите использоватьsvnlook youngest
команду. Обратите внимание, что для этого требуется прямой доступ к каталогу репо, поэтому он должен использоваться на сервере.источник
Или
Или
источник
Вы можете использовать любую команду:
источник
Если вам нужен действительно короткий:
Каретка обозначение является обобщающим для «URL корневого каталога хранилища».
источник
Если вам не повезло сделать это из командного файла Windows, вот заклинание, которое вы ищете:
Это запускает "svn info", повторяя каждую строку сгенерированного вывода. Он использует двоеточие в качестве разделителя между первым и вторым токенами в строке. Когда первый токен является «Revision», он устанавливает переменную среды REV на второй токен.
источник
FOR /F "tokens=2" %%i IN ('svn info ^| FINDSTR Revision:') DO SET revision=%%i
Вы ищете вызов, похожий на вызов командной строки
Кажется, что это возможно с помощью библиотеки pysvn, и есть рецепт, который поможет вам начать работу. Не уверен, есть ли что-то подобное для PHP.
Если вам нужно прибегнуть к вызову двоичного файла SVN самостоятельно, обязательно используйте
--xml
параметр, чтобы получить результат в виде XML. Это должно быть легче проанализировать, чем вывод командной строки.источник
subprocess.check_output
в Python, чтобы избежать очередного вызова библиотеки. Если вы просто проверяете номера ревизий / загружаете последние копии, проще использовать svn из командной строки черезsubprocess
. Теперь, если вы выполняете автоматическиеВы можете использовать выходной формат XML, например:
Пример: использование номера редакции
источник
Вы можете попробовать следующую команду:
источник
Просто
svn info
в BASH вам предоставят все подробностиВы получите ПЕРЕСМОТР из этого
источник
Самый простой и понятный способ сделать это (на самом деле svn 1.9, выпущенный в 2015 г.) - использовать:
Результатом является номер последней ревизии (joungest) для SVNURL или номер текущей ревизии рабочей копии SVNPATH.
--no-newline
Не является обязательным, инструктируетsvn
не испускает косметическую новую строку (\n
) после значения, если вам нужен минимальный выход (только номер ревизии).См. Https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item
источник
svn info --show-item
, вместо--show item
Опубликованные решения не обрабатывают случай, когда используются внешние элементы.
Если у меня есть URL-адрес или рабочая копия с установленными
svn:externals
свойствами, внешние элементы могут измениться, и, следовательно, изменится последняя версия сервера Subversion. Но последняя ревизия рабочей копии или URL-адреса будет сообщать номер ревизии только при изменении свойства svn: externals или любого элемента ниже в пути URL-адреса, что является ожидаемым поведением.Таким образом, вы либо получаете
svn:externals
свойство, и перебираете URL-адреса и выбираете ревизию высоты, либо запрашиваете базовый URL-адрес с сервера Subversion. Версия, полученная по базовому URL, будет содержать последнюю версию ВСЕГО на сервере.Итак, если вы используете внешние объекты, лучше всего использовать
svn info BASE_URL
whereBASE_URL
- корневой URL-адрес для всех путей на сервере Subversion.источник
Будет получен только номер последней измененной ревизии:
Надеюсь, это поможет.
источник
$ svn log | head -10
в любом каталоге, в котором есть.svn
папкаисточник
svn info
илиsvnversion
не будет принимать во внимание подкаталоги, чтобы найти последнюю «ревизию» живой кодовой базы, взломанный способ ниже работал у меня - это может занять некоторое время:источник
Это можно получить с помощью библиотеки "SVN" :
Head_revision должен содержать номер последней версии файла.
источник
Похоже, для этого есть запись в официальном FAQ . Исходный код написан на языке C, но применяется тот же принцип, как указано здесь в этом сообщении списка рассылки .
источник
Обновление: Subversion 1.9 будет поддерживать новую команду «svn youngest», которая выводит только номер последней версии. Отличие от "svnlook youngest" в том, что "svn youngest" также работает удаленно.
http://subversion.tigris.org/issues/show_bug.cgi?id=4299
источник