SVN Переместить код с историей между двумя репозиториями

Мне нужно работать с двумя репозиториями и хотеть переместить один каталог с кодом между ними, сохраняя при этом ревизию.

Я прочитал здесь несколько вопросов о SO, но я до сих пор не знаю, куда идти. Наши репозитории HUGE (файлы (orkingcopy), не включая ревизии > несколько GB), поскольку все проверено (code + designdata +...).

Решения, которые я видел до сих пор:

  • svnadmin dump + filter + import: не опция из-за размера репозитория
  • svnsync: У нас уже есть данные во втором репозитории (хранилища огромны уже, я не думаю, что слияние их - хорошая идея, кроме decidng, это не моя работа) и из то, что я собрал, требует, чтобы второй репозиторий был пустым.
  • Стороннее решение: многократно сбой, поскольку он не может удалить файл, потому что" у другого процесса есть файл (хотя я могу удалить файл через os, и он создается с помощью script)

Существуют ли другие решения, подходы к этому, или я что-то пропустил в одном из решений?

Ответ 1

svnadmin dump + filter + import работает даже с большими репозиториями.

Есть несколько вещей, которые вам нужно сделать для производительности. Узнайте, какая версия была той, которая сначала создала папку, которую вы хотите скопировать. Затем проверьте журнал, чтобы найти последнюю ревизию, которая изменила что-либо в этой папке. Вам нужно только сбросить изменения в этом диапазоне.

Используйте флаг -incremental для svndump.

Не пытайтесь использовать флаг Deltas с дампом SVN. SvnDumpFilter не будет работать на дампах, созданных с помощью "deltas". Не пытайтесь сохранить огромный файл дампа и запустите файл SvnDumpFilter. Вместо этого сделайте это одним шагом с трубой.

Если ваша начальная версия была 10000, а ваша окончательная версия была 20000, а путь, который вы хотите скопировать, - проекты/источник, команда должна выглядеть как

svnadmin dump --incremental -r10000:20000 YourRepoPath | svndumpfilter include projects/source --drop-empty-revs --renumber-revs > source.dump

Затем выполняется команда загрузки svnadmin для загрузки дампа в другое репо.