использование bash для получения номера ревизии из Subversion - PullRequest
16 голосов
/ 20 февраля 2010

Я хочу написать сценарий оболочки на bash для развертывания веб-сайтов из репозитория SVN.При развертывании веб-сайта я присваиваю имя экспортированному каталогу website_name -R revision_number .Я бы хотел, чтобы скрипт bash автоматически переименовывал экспортируемый каталог, поэтому ему необходимо узнать номер текущей ревизии из каталога экспорта.Если я запускаю

$> svn info http://svn-repository/trunk

Path: trunk
URL: http://svn-repository/mystery/trunk
Repository Root: http://svn-repository/mystery
Repository UUID: b809e6ab-5153-0410-a985-ac99030dffe6
Revision: 624
Node Kind: directory
Last Changed Author: author
Last Changed Rev: 624
Last Changed Date: 2010-02-19 15:48:16 -0500 (Fri, 19 Feb 2010)

Число после строки Revision: - то, что я хочу.Как мне получить это в переменную bash?Должен ли я анализировать строку вывода команды svn info?

Ответы [ 9 ]

31 голосов
/ 20 февраля 2010

Использовать svnversion .Это выведет номер ревизии / диапазон с минимальным дополнительным крейфом

25 голосов
/ 20 февраля 2010
REVISION=`svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //'`

Все просто, если не элегантно.

5 голосов
/ 20 февраля 2010

просто используйте одну команду awk.гораздо проще.

var=$(svn info http://svn-repository/trunk | awk '/^Revision:/{print $2}')
4 голосов
/ 21 марта 2013

Анализ строки 'Revision' не переносим в разных локалях. Например. с моей локалкой это похоже на:

...
Wersja: 6583
Rodzaj obiektu: katalog
Zlecenie: normalne
Autor ostatniej zmiany: ...
Ostatnio zmieniona wersja: 6583
Data ostatniej zmiany: 2013-03-21 11:33:44 +0100 (czw)
...

Ты не хочешь разобрать это:)

Итак, лучший подход - это использовать 'svnversion', как предложил oefe. Это инструмент, упомянутый для этой цели.

2 голосов
/ 13 июня 2016

Без использования grep или awk:

REVISION=`svn info --show-item=revision | sed 's/ //g'`

sed в конце просто для удаления пробела.

1 голос
/ 20 февраля 2010
svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '

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

REVISION=`svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '`
0 голосов
/ 28 апреля 2015
REVISION=$(svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //p')
echo $REVISION
0 голосов
/ 16 февраля 2015

Это даст вам номер ревизии головы

svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"

egrep является расширенной grep.

0 голосов
/ 20 февраля 2010

Вероятно, существует дюжина разных способов сделать это, но я бы пошел с чем-то простым, как:

revision="$(svn info http://svn-repository/trunk | grep "^Revision:" | cut -c 11-)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...