Как я могу извлечь поддерево из моего репозитория SVN в новое? - PullRequest
8 голосов
/ 19 февраля 2009

У нас есть хранилище Subversion с одним каталогом:

  • На самом деле не нуждается в контроле версий за пределами возможностей RCS
  • Не имеет версии в сочетании с чем-либо еще в хранилище
  • Изменено примерно в шесть раз чаще, чем остальная часть хранилища

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

Каков наилучший процесс для этого? Если это имеет значение, репозиторий SVN размещается на (... проверяет ...) машине FreeBSD.

Стоит отметить, что, хотя мне нужно сохранить историю версий в новом хранилище, нет необходимости стирать содержимое в старом; это может просто сидеть там, для меня все равно.

Ответы [ 4 ]

6 голосов
/ 19 февраля 2009

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

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

0 голосов
/ 01 мая 2018

Рекомендуемый способ сделать это - использовать svnadmin dump, а затем отфильтровать файл дампа с помощью инструмента svndumpfilter (см. svnbook ).

Например, у меня был репозиторий с каталогом верхнего уровня с именем «Модель», который я хотел перенести в собственный репо:

svnadmin dump my_orig_repo | svndumpfilter include --drop-empty-revs --renumber-revs Model >model_only.svndump
svnadmin load my_model_repo < model_only.svndump

Это создает новый репозиторий только с подкаталогом Model.

Чтобы удалить его из исходного репозитория, вы можете просто сделать svn rm. Это удалит его из последней версии репозитория, и это самый простой способ.

Но если бы каталог Model из моего примера был очень большим, возможно, я бы хотел полностью удалить его из оригинала. Я мог бы сделать это, повторив процесс создания другого отфильтрованного файла дампа SVN, который исключил его. Затем я заменил бы оригинал новым, у которого не было исключенного каталога.

0 голосов
/ 19 февраля 2009

Я не знаю, правильно ли я понимаю, но есть хорошее решение для этого. Если ваш исходный репозиторий находился в svn: // domain, а часто используемая папка называется «папка», я считаю, что вы можете просто выполнить следующую команду: svn co svn://domain/folder, чтобы получить только эту папку.

0 голосов
/ 19 февраля 2009

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

Это может или не может быть "лучшим" способом сделать это ...

...