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

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

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

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

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

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

svn log -r <revision> ...

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

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

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

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

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

5 ответов


Я думаю, что лучше всего было бы сделать следующее 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