Можно ли «добавить» ревизии из одного хранилища subversion в другое? - PullRequest
3 голосов
/ 21 июня 2011

Некоторое время назад мы переместили наш репозиторий Subversion на новый сервер («B»), ожидая, что старый («A») будет удален.

Что ж, сервер / репозиторий A фактически никогда не выходил на пенсию, и, без моего ведома, один из многих проектов, находящихся под контролем исходного кода, никогда не обновлял ссылки на свои рабочие копии. Другими словами, все изменений для этого проекта (и только для этого проекта) были зафиксированы на старом сервере.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * так отбирает; Но, очевидно, номера ревизий будут противоречивыми.

Возможно ли объединить изменения, которые были зафиксированы в хранилище A, в хранилище B?

По сути, то, что я прошу, похоже на вопрос, Как объединить две ветви из двух разных репозиториев в один репозиторий? За исключением того, что это для Subversion, а не для git, и нет ' на самом деле это любая ветвь, только один набор изменений, которые были зафиксированы в стволе (в неправильном хранилище).

I не требуется непрерывной синхронизации, это всего лишь одноразовая операция, прежде чем старый репозиторий будет окончательно удален. И я бы предпочел перенести всю историю ревизий для рассматриваемого проекта, т. Е. Не просто зафиксировать новейшую версию как одну массивную ревизию.

На всякий случай, если вопрос не совсем ясен, вот визуальное изображение:

Repository A
  Project X:  Rev 1 -> Rev 2 -> Rev 3
  Project Y:  Rev 4 -> Rev 5 -> Rev 6

Repository B:
  Project X:  Rev 1 -> Rev 2 -> Rev 3 -> Rev 4 -> Rev 5 -> Rev 6
                                           |        |        |
Expected outcome for Repository A:         v        v        v
  Project X:  Rev 1 -> Rev 2 -> Rev 3 -> Rev 7 -> Rev 8 -> Rev 9
  Project Y:  Rev 4 -> Rev 5 -> Rev 6

Я просто хочу скопировать все ревизии для одной части дерева A (и только эту часть) в репозиторий B и оставить все остальное в покое. Я согласен с ревизиями X, выглядящими как новые ревизии на B, если необходимо.

Решения

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Вы можете использовать svnadmin dump, чтобы получить дамп всего хранилища, а затем использовать svndumpfilter, чтобы создать только дамп определенного пути к хранилищу.И затем импортируйте полученный файл в ваш новый репозиторий, используя svnadmin load.

Вот пример: http://daveharris.wordpress.com/2008/08/05/svn-dump-parts-of-a-repository/

3 голосов
/ 22 июня 2011

Пока изменения в двух репозиториях действительно не перекрываются, вы можете сделать что-то вроде:

svnadmin dump --incremental -r4:6 /repository/B | svnadmin load /repository/A

для создания ревизий 7, 8 и 9 в репозитории A с сохранением авторов, временных отметок и т. Д.

--incremental гарантирует, что сохраненные изменения относятся к редакции 3, что должно соответствовать тому, что уже есть в хранилище A.

(Чтобы быть в безопасности, я бы сначала проверил это с одноразовой копией репозитория А.)

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