SVN:Возможно ли получить список номеров ревизий для данного пути?

StackOverflow https://stackoverflow.com/questions/1633649

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

svn log -r <revision> ...

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Я нашел следующее весьма полезным.

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

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

Надеюсь, вы или кто-то другой сочтете это полезным.

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

Возможно, вы захотите взглянуть на 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/

Здесь указана последняя (головная) редакция любого файла.

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

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

  svn log url -l 4 -r someVersion:head
or   
  svn log url -l 4 -r 3:99
   fromReversion lower than toReversion
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top