2010-11-10 1 views
3

Я пытаюсь получить историю журнала (рекурсивно, если это возможно) фиксированного пути в SVN по всем копиям/перемещениям и т. Д. Эффективно я стараюсь избегать peg revisions, и журнал применяется к пути, а не к объектам. Руководство svn ставит этот вопрос: «Вы спрашиваете об операциях, которые произошли со всеми объектами, которые когда-либо жили на этом пути?» - но это не похоже на вариант для этого варианта использования. Он предполагает, что это не то, что вы хотите, но это именно то, что я хочу.SVN-журнал фиксированного пути по копиям и перемещениям

Есть ли способ сделать это без повторения запросов, чтобы пересечь промежутки между различными копиями, живущими по фиксированному пути в истории изменений SVN?

ответ

1

После консультаций с разработчиками SVN ответ на этот вопрос заключается в том, что это невозможно с помощью одной команды svn. Существует очень старая ошибка открыта для реализации этого поведения, но он не получил сцепление:

http://subversion.tigris.org/issues/show_bug.cgi?id=928

Надеется, что это будет возможно в будущем выпуске.

2

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

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

+0

Это хорошая идея. К сожалению, я имею дело с большим хранилищем под активным развитием в течение нескольких лет (включая безголовые проверки), поэтому получить полную историю всего, кроме небольшого куска, просто непрактично. – Klaus

+0

+1, я бы взял тот же подход. Возможно, для очень больших хранилищ я бы ограничил какое-то разумное число, используя опцию -limit - по крайней мере, чтобы сделать ее практически осуществимой. –

0

Другим способом может быть создание пользовательских крючков для вашего репозитория. Когда есть фиксация определенного пути, вы можете записать его в журнал.

+0

Это слишком поздно для этого; Я пытаюсь получить эту информацию из большого зрелого репозитория. Кроме того, у меня не было бы хорошего места для размещения журнала. Хотя я уверен, что это то, что я мог бы скомпоновать вместе с бесконечными звонками svn, похоже, что он должен быть легко доступен. – Klaus

0

Используйте ViewVC с функцией «фиксации базы данных». Он будет извлекать метаданные о каждой фиксации в базу данных SQL. Затем вы можете запросить базу данных SQL для всех коммитов, которые затронули конкретный путь.

Исходное извлечение метаданных занимает много времени - около 12 часов для репозитория 10 ГБ, но его нужно выполнить только один раз. Затем вы можете настроить крюк после фиксации для обновления метаданных на каждом коммите, что очень быстро. База данных метаданных среднего размера - около 200 МБ для репозитория 10 ГБ.

Выполнение запроса метаданных выполняется быстро.

+0

ViewVC не является жизнеспособным вариантом. – Klaus

Смежные вопросы