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, все будет синхронизировано.