Инструмент для переноса репо с доступом только для чтения?

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

Я попробовал svnsync, но школьный сервер не поддерживает команду воспроизведения (вероятно, она отключена), так что мне это не подойдет.

Теперь, теоретически, разве нельзя (вручную или программно) проверить каждую версию репозитория и зарегистрировать ее в новом репозитории на нашем собственном сервере? Я думаю, это сработает - нас всего трое, и нет конфликтов рабочих копий, о которых нам пришлось бы беспокоиться, просто нужна копия всей истории в репо на случай, если нам нужно вернуться и посмотреть на это.

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


person Corazu    schedule 13.04.2010    source источник
comment
Вы можете импортировать свой репозиторий svn в git и клонировать его столько раз, сколько захотите:]   -  person Alex    schedule 13.04.2010
comment
Я действительно не хочу переключаться на git, хотя. Я смотрю на SVNKit (wiki.svnkit.com/Replicating_An_Existing_Repository), который может иметь именно то, что я м ищу.   -  person Corazu    schedule 13.04.2010


Ответы (4)


Если вы хотите использовать Mercurial, который а) не очень далеко от Subversion с точки зрения команд, б) предотвратит подобные проблемы и в) с которым действительно интересно работать*, вы можете использовать преобразовать расширение. Он встроен в Mercurial, вам просто нужно его активировать.

* Во всяком случае, я так думаю

person balpha    schedule 13.04.2010
comment
Опять же, в данный момент я не собираюсь переключаться - на данный момент мне комфортно с подрывной деятельностью ;) Хотя я мог бы взглянуть на нее. Я думаю, что, возможно, нашел решение, но уже поздно, поэтому я, вероятно, попробую завтра. - person Corazu; 13.04.2010

Вы не указали, сколько примерно ревизий у вас есть в вашем проекте. Возможна проверка на основе сценария для каждой ревизии. Но это не реально, потому что все папки ".svn" созданы для каждой папки. Из-за них ты

  1. Потребуется ли другой скрипт для рекурсивного удаления этих файлов, прежде чем другой скрипт сможет его зарегистрировать.
  2. Или для каждой ревизии выполните экспорт svn, а затем напишите другой скрипт, который зарегистрирует ее.

Как видите, это неосуществимо. И я не знаю сценария, чтобы сделать это.

Однако вы можете сделать несколько экспортов из репозитория, каждый из наиболее важных коммитов, а затем добавить их в свой новый репозиторий. Если количество ревизий меньше, то это должно быть проще.

person omermuhammed    schedule 13.04.2010
comment
Учитывая достаточно времени для экспорта всех ревизий, почему это было бы невозможно? - person sbi; 13.04.2010
comment
Там всего 162 ревизии и не так много папок... Я не думаю, что это займет так много времени или будет так сложно. - person Corazu; 13.04.2010

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

svnadmin create new_repos

Создайте хук-скрипт new_repos/hooks/pre-revprop-change с чем-то вроде

#!/bin/sh
exit 0
#

Не забудьте сделать его исполняемым

chmod u+x new_repos/hooks/pre-revprop-change

Затем инициализируйте синхронизацию:

svnsync init file:///PATH/TO/new_repos https://old_repos/trunk/subfolder
svnsync sync file:///PATH/TO/new_repos https://old_repos/trunk/subfolder

Протестируйте свой новый репозиторий

svn co file:///Users/bjoern/test/new_repos new_working_copy

И не забудьте удалить хук-скрипт

rm new_repos/hooks/pre-revprop-change

Дополнительные сведения о репликации репозитория можно найти в книга SVN.

person BHF    schedule 10.10.2013

Я попробовал svnsync, но школьный сервер не поддерживает команду воспроизведения (вероятно, она отключена), так что мне это не подойдет.

Я предполагаю, что svnsync тогда не работало из-за какой-то незначительной проблемы; ни svnsync, ни svnrdump не требуют каких-либо изменений на стороне сервера для работы!


Если у вас есть доступ хотя бы для чтения к репозиторию Subversion через HTTP(S) или svn(+ssh)://, вы определенно сможете получить полную историю изменений с помощью инструментов svnsync или svnrdump.

svnrdump подход.

Просто запустите команду и дождитесь ее завершения:

svnrdump URL-TO-ORIGINAL-REPO > repo.dump

В результате вы получите файл repo.dump, содержащий полную историю изменений. Вы можете загрузить файл в пустой репозиторий позже, используя команду svnadmin load.

svnsync подход.

Все шаги должны выполняться на вашей (локальной) машине:

  1. Создать новый репозиторий: svnadmin create newrepo,

  2. Разрешить изменять ревизионные (неверсионные) свойства нового репозитория:

    echo exit 0 > myrepo\hooks\pre-revprop-change.bat

  3. svnsync init file:///C:\Repositories\newrepo https://URL-TO-ORIGINAL-REPO

  4. svnsync sync file:///C:\Repositories\newrepo https://URL-TO-ORIGINAL-REPO

person bahrep    schedule 03.03.2015