SVN: можно ли получить список номеров ревизий для данного пути? - PullRequest
14 голосов
/ 28 октября 2009

Я создаю инструмент PHP, который подключается к репозиторию, загружает список коммитов и сохраняет их локально. Однако из-за того, что некоторые репозитории ОГРОМНЫ и захват их журнала приводит к длительному времени ожидания и возможным тайм-аутам / ошибкам, я хотел бы загрузить каждое сообщение о фиксации, используя асинхронные запросы.

Итак, у меня есть начальная и конечная точки в истории ревизий, и я могу получить все журналы следующим образом:

svn log -r <from_revision>:<to_revision> <REPO_URL>

... и я, возможно, в конечном итоге получу файл XML, который настолько велик, что его загрузка займет много времени, много времени и много ресурсов для анализа и много времени для хранения.

Если я знаю начальную и конечную точку, я могу создать цикл for (), чтобы получать ревизии одну за другой:

svn log -r <revision> ...

НО, поскольку я не знаю, какие конкретные ревизии существуют для данного пути, я получу ошибку. Я могу заставить приложение игнорировать эту ошибку во время обновления, но это неприятный хак, который будет публиковать запросы и в любом случае ждать ответов - что совсем не хорошо.

Итак, мне нужно что-то вроде этого:

  • «дай мне список номеров ревизий для этого пути», ИЛИ:
  • "дайте мне список номеров ревизий для этого пути, между и

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

Все предложения приветствуются, заранее спасибо.

Ответы [ 5 ]

10 голосов
/ 28 октября 2009

Я думаю, что вам лучше всего сделать следующее svn log -l 100 0:{$newest} .\, которое будет извлекать первые 100 журналов для данного каталога или файла. затем прочитайте номер последней полученной ревизии, затем запросите следующие 100 svn log -l 100 {$last_ret_log}:{$newest} .\

таким образом вы получаете 99 новых записей журнала с каждым запросом, но вы не получите их все.

4 голосов
/ 07 апреля 2015

Я просто пытался получить аналогичный результат. Я просто хочу все номера ревизий для конкретной ветки.

Мне показалось полезным следующее.

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv

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

Надеюсь, вам или кому-то еще будет полезно.

Наше репо имеет более 25000 ревизий, и создание этого файла занимает пару секунд.

4 голосов
/ 28 октября 2009

Если у вас есть доступ к дереву хранилища на вашем сервере Subversion, то вы можете использовать svnlook history, чтобы получить список номеров редакций.

Более подробную информацию можно найти по адресу http://svnbook.red -bean.com / ru / 1.1 / re49.html .

2 голосов
/ 28 октября 2009

Возможно, вы захотите посмотреть на svn list. Итак, для вашей цели:


$ svn list --verbose file:///var/svn/repos
     16 sally         28361 Jan 16 23:18 README.txt
     27 sally             0 Jan 18 15:27 INSTALL
     24 harry               Jan 18 11:27 examples/

Здесь перечислены последние (заголовочные) версии любого файла.

1 голос
/ 13 мая 2013
svn log url -l limitNumber - r fromReversion:toReversion

если вы хотите найти следующую более старую (меньшую) реверсию (версию) например

   svn log url -l 4 -r someVersion:1
 or
   svn log url -l 4 -r 99: 3

от реверсии больше, чем до реверсии если вы хотите найти следующую более новую (большую) версию (версию)

  svn log url -l 4 -r someVersion:head
or   
  svn log url -l 4 -r 3:99
   fromReversion lower than toReversion
...