it-swarm.com.ru

Копия SVN между репозиториями с историей

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

Мне кажется, что это будет общая просьба.

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

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

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

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

67
John Gietzen

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


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

41
mihi

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

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

8
Lee

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

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

Если кому-то интересно, проверьте это здесь

8
Kenneth Xu

Вы можете использовать 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/

8
scottysb

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

0
naan