Подтвердить что ты не робот

Текущая команда ревизии Subversion

Есть ли команда Subversion для отображения текущего номера версии?

После svn checkout я хочу запустить script и вам нужен номер версии в переменной. Было бы замечательно, если бы была команда вроде svn info get_revision_number.

4b9b3361

Ответ 1

Вы можете использовать os.system() для выполнения командной строки следующим образом:

svn info | grep "Revision" | awk '{print $2}'

Я делаю это в своих ночных сценариях сборки.

Также на некоторых платформах есть команда svnversion, но я думаю, что у меня была причина не использовать ее. Ах, да. Вы не можете получить номер версии из удаленного репозитория, чтобы сравнить его с локальным с помощью svnversion.

Ответ 2

Существует также более удобная (для некоторых) svnversion команда.

Вывод может быть единственным номером ревизии или чем-то вроде этого (от -h):

  4123:4168     mixed revision working copy
  4168M         modified working copy
  4123S         switched working copy
  4123:4168MS   mixed revision, modified, switched working copy

Я использую этот фрагмент кода python для извлечения информации о ревизии:

import re
import subprocess

p = subprocess.Popen(["svnversion"], stdout = subprocess.PIPE, 
    stderr = subprocess.PIPE)
p.wait()
m = re.match(r'(|\d+M?S?):?(\d+)(M?)S?', p.stdout.read())
rev = int(m.group(2))
if m.group(3) == 'M':
    rev += 1

Ответ 3

  • Прежде всего, статус svn имеет номер версии, вы можете прочитать его оттуда.

  • Кроме того, каждый файл, который вы храните в SVN, может хранить номер версии сам по себе - добавьте ключевое слово $Rev$ в ваш файл и запустите propset: svn propset svn:keywords "Revision" file

  • Наконец, номер версии также находится в файле .svn/entries, четвертая строка

Теперь каждый раз, когда вы проверяете этот файл, он сам будет иметь ревизию.

Ответ 4

REV = svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2

Ответ 5

svn info, я считаю, это то, что вы хотите.

Если вам просто нужна ревизия, возможно, вы могли бы сделать что-то вроде:

svn info | grep "Revision:"

Ответ 6

Используйте что-то вроде следующего, используя XML-вывод subversion:

# parse rev from popen "svn info --xml"
dom = xml.dom.minidom.parse(os.popen('svn info --xml'))
entry = dom.getElementsByTagName('entry')[0]
revision = entry.getAttribute('revision')

Обратите внимание, что в зависимости от того, для чего вам это нужно, запись <commit revision=...> может быть больше того, что вы ищете. Это дает "Last Changed Rev", который не изменится, пока код в текущем дереве фактически не изменится, в отличие от "Revision" (что указано выше), который будет меняться в любое время, когда что-либо в репозитории изменяется (даже ветки) и вы делаете "svn up", что не то же самое, и не так часто полезно.

Ответ 7

Только что использованный ответ @badcat в модифицированной версии, используя subprocess.check_output():

import subprocess
revision = subprocess.check_output("svn info | awk '/^Revision:/ {print $2}'", shell=True).strip()

Я считаю, что вы также можете установить и использовать pysvn, если вы хотите использовать python для взаимодействия с svn.

Ответ 8

Никто не упоминает для Windows мир SubWCRev, который, правильно используемый, может автоматически заменить необходимые данные в необходимые места, если script вызовите SubWCRev в форме SubWCRev WC_PATH TPL-FILE READY-FILE

Пример моего крюка после фиксации (часть)

SubWCRev.exe CustomLocations Builder.tpl  z:\Builder.bat
...
call z:\Builder.bat

где my Builder.tpl

svn.exe export trunk z:\trunk$WCDATE=%Y%m%d$-r$WCREV$

как результат, у меня есть каждый раз bat файл с переменной part - name dir - который соответствует метаданным Work Copy

Ответ 9

Я думаю, что мне нужно сделать svn info, а затем получить номер с помощью манипуляции с строкой из "Редакция: xxxxxx" Было бы неплохо, если бы была команда, которая возвращает только число:)