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


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

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

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

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

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

EDIT: Я забыл упомянуть, что целевой РЕПО находится на windows.

5 66

5 ответов:

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


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

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

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

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

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

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

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

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