2010-02-25 10 views
34

Похожие вопросы: Moving repository trunk to another’s branch (with history)SVN переместить один каталог в другое хранилище (с историей)


Я знаю, что можно сбросить полный SVN репозиторий с историей и загрузить его в определенной пользователем (суб) каталог целевого хранилища с помощью:

// in source repo 
> svnadmin dump . > mydumpfilename 

// in destination repo (backslashes because I'm using Windows) 
> svnadmin load . < mydumpfilename --parent-dir some\sub\directory 

Но это будет импортировать полный репозиторий в подкаталог целевого хранилища. Я хочу определить подкаталог в исходном репозитории, который должен быть экспортирован. Что-то вроде svnadmin dump . --source-path old\sub\dir > mydumpfilename.

Как я могу это достичь? Если TortoiseSVN может сделать это, пожалуйста, так сказать;)


РЕШЕНИЕ: Благодаря ответ Тиму Хэнигана, вот правильный способ сделать это:

// execute in destination repo 
svndumpfilter include source\sub\dir < mydumpfilename | svnadmin load . --parent-dir destination\sub\dir 

Надеется, что это поможет другим, тоже ...

+0

Я думаю, что вы не можете этого сделать, кроме ручного копирования и повторного применения каждого изменения, поскольку ревизии subversion являются репозиторием, поэтому перемещение одного каталога с историей на самом деле не применимо в этом случае. то есть не отдельные файлы пересматриваются, но весь репозиторий пересматривается, и все хранилище хранятся в памяти. – Zenon

+0

Отличный вопрос, спасибо. – richo

+2

На самом деле это только половина истории. Вы также должны удалить каталог в исходном репозитории, перестроив его, используя 'svndumpfilter exclude source \ sub \ dir', конечно, см. Http://stackoverflow.com/questions/205296/delete-file-contents-from- svn-history – Tino

ответ

20

Посмотрите svndumpfilter и этот раздел на Repository Maintenance.

После того, как у вас есть файл дампа для всего старого репозитория, вы можете использовать svndumpfilter, чтобы извлечь только ту часть, которая вам нужна.

Я не знаю, как это сделать с TortoiseSVN.

+0

Очень приятное решение, отлично работает. Большое спасибо! – AndiDog

+0

И если вы смущены тем, почему он не работает на вашей локальной машине, это потому, что 'svndump' должен запускаться в реальном источнике репозитория. Вместо этого используйте 'svnrdump' - http://stackoverflow.com/questions/8866035/unable-to-do-an-svn-dump-error-e720002-and-format-errors – drzaus

0

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

enter image description here

«SVN экспорт версированных элементов здесь» скопируют (рекурсивно) с историей.

+0

Я не получаю историю и не он добавляет файлы в репо - что мне не хватает? – drzaus

+0

@drzaus: После перемещения элементов локально вам необходимо передать их на репо. Пока вы этого не сделаете, SVN не будет регистрировать элементы или историю в новом репо. – noisiveRevision

+0

Просто, чтобы убедиться, что я понимаю - после экспорта мне нужно вручную добавить все файлы без преобразования, которые я только что экспортировал, а затем, после их использования, SVN включит их историю? – drzaus