Копия SVN между репозиториями с историей - PullRequest
68 голосов
/ 10 июня 2009

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

Мне кажется, это был бы общий запрос.

Итак: Можно ли выполнить миграцию между репозиториями SVN, сохраняя историю?

Важно отметить, что у нас нет доступа svnadmin к Источнику, но у нас он есть на Пункте назначения.

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

РЕДАКТИРОВАТЬ: Я забыл упомянуть, что целевой репозиторий на окнах.

Ответы [ 5 ]

41 голосов
/ 10 июня 2009

[ Редактировать : ниже приведен исходный ответ из предварительной версии SVN 1.7, и там это был лучший способ решения проблемы (хотя это не основной вариант использования svnsync). В клиенте SVN 1.7 или более поздней версии есть инструмент svnrdump, который делает более прямо то, чего вы пытаетесь достичь)]


используйте svnsync для синхронизации источника с местом назначения (требуется доступ администратора к хранилищу назначения или хотя бы способ добавления ловушек, но нет специального доступа к хранилищу источника) , Если в месте назначения уже есть ревизии, синхронизируйте источник во временном репозитории, а затем используйте svn-merge-repos.pl для объединения двух локальных репозиториев.

9 голосов
/ 14 февраля 2012

У меня была похожая потребность (следовательно, я посетил эту страницу) и в итоге написал свою собственную программу для выполнения работы. Хотя этот инструмент может быть полезен для тех, кто все еще ищет решение:

  • Инструмент не нуждается в административном доступе к исходному хранилищу.
  • Он поддерживает добавление / удаление / копирование / перемещение, сохраняет свойство узла (например, svn: ignore, svn: external) и свойство ревизии (то есть вы получаете правильного автора и дату / время).
  • Может также постепенно копировать новые ревизии.
  • Имеет графический интерфейс и утилиту командной строки.

Если кому-то интересно, зацените здесь

9 голосов
/ 10 июня 2009

Обычно это можно сделать командой svnadmin dump . Если у вас нет доступа к svnadmin, я бы попросил этого человека, если он может предоставить вам дамп. Это также значительно упростит процесс импорта.

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

8 голосов
/ 14 ноября 2012

Вы можете использовать git-svn (или, возможно, другую систему SCM) для выполнения этой задачи.

Шаги будут:

1. Get a git svn clone of each repository:
    git svn clone <SVN-REPOSITORY-FROM> source-repo
    git svn clone <SVN-REPOSITORY-TO> dest-repo

 2. Create patches to be imported:
    cd source-repo/
    export commitFrom=`git log --pretty=%H | tail -1`
    git format-patch -o /tmp/mergepatchs ${commitFrom}..HEAD .

 3. Import the patches
    cd dest-repo/
    git am /tmp/mergepatchs/*.patch

Ссылка: http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/

0 голосов
/ 22 февраля 2012

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

...