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

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

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

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

Важно отметить, что у нас нет доступа svnadmin к Source, но у нас есть это в Destination.

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

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

Ответ 1

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


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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

Для выполнения этой задачи вы можете использовать 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/

Ответ 5

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