Копирование SVN между репозиториями с историей
один из моих товарищей по команде спросил, Можно ли экспортировать из одного SVN в другой, сохраняя при этом историю.
Мне кажется, что это будет общий запрос.
Так: можно ли мигрировать между репозиториями SVN, сохраняя при этом историю?
важно отметить, что у нас нет доступа svnadmin к источнику, но у нас есть это в пункте назначения.
Если это сводится к просто проверяя каждую ревизию из источника и проверяя ее до места назначения, мы были бы в порядке с этим, если бы для этого был автоматизированный процесс.
EDIT: Я забыл упомянуть, что целевой РЕПО находится на windows.
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
У меня была аналогичная потребность (поэтому я посетил эту страницу) и в конечном итоге написал свою собственную программу для выполнения этой работы. Думал, что инструмент может быть полезен для других, которые все еще ищут решение:
- инструмент не нуждается в доступе администратора к исходному репозиторию.
- он поддерживает добавление/удаление/копирование/перемещение, сохраняет свойство узла (например, svn:ignore, svn:external) и свойство ревизии (т. е. вы получаете правильный автор и дату / время).
- можно также постепенно копировать новые переделки.
- имеет как графический интерфейс, так и утилиту командной строки.
Если кто-то заинтересован, зацените здесь