Я поддерживаю хранимые процедуры ( MySQL имеет поддержку хранимых процедур с 5.0 ) с точки зрения безопасности - преимущества -
Недостатки -
Эта проблема возникает, когда один из каталогов / файлов, включенных svndumpfilter, изначально был скопирован или перемещен из раздела дерева, который не включается.
Для решения проблемы используйте этот сценарий: svndumpfilter3
Определенные команды следующим образом, я собираюсь предположить, что репозиторий размещается на http (s)://сервер, хотя те же команды будут работать на svn://или file://.
svnadmin dump /path/to/repository > dumpfile
svnadmin create /path/to/new_repository
svnadmin load /path/to/new_repository < dumpfile
svn co https://localhost/svn/new_repository_url new_repository_checkout
cd new_repository_checkout
svn move https://localhost/svn/new_repository_url/trunk https://localhost/svn/new_repository_url/branches/head -m "Moving HEAD to branches"
svn move https://localhost/svn/new_repository_url/branches/head/whatever https://localhost/svn/new_repository_url/trunk -m "Creating new trunk"
svn update
cd branches
svn remove head
svn commit
у Вас должна теперь быть часть, которую Вы хотите от старого репозитория как соединительная линия новой.
Для почему бы не тиражирования всего репозитория выведите его в к новому. Затем расширьтесь соединительная линия, удалите голову и объедините части, которые Вы хотите, въезжают задним ходом к соединительной линии от ответвления. Затем Вы сохранили историю и разделили части, которые Вы хотите в новый репозиторий.
Таким образом, Вы сохранили всю историю и выборочно выбрали части, которые Вы хотите.
Это могло потенциально помочь Вам: Кавычка от http://svnbook.red-bean.com/en/1.5/svn.reposadmin.maint.html#svn.reposadmin.maint.replication
В Подрывной деятельности 1.5, svnsync вырастил способность также зеркально отразить подмножество репозитория, а не всего этого. Процесс установки и поддержания такого зеркала является точно тем же, зеркально отражая целый репозиторий, за исключением того, что вместо того, чтобы определить корневой URL репозитория источника при выполнении svnsync init, Вы определяете URL некоторого подкаталога в том репозитории. Синхронизация к тому зеркалу теперь скопирует только биты, которые изменились под тем исходным подкаталогом репозитория. Существуют некоторые ограничения к этой поддержке, все же. Во-первых, Вы не можете зеркально отразить несколько непересекающихся подкаталогов исходного репозитория в единственное зеркало repository—, необходимо было бы вместо этого зеркально отразить некоторый родительский каталог, который характерен для обоих. Во-вторых, логика фильтрации совершенно находится на пути, поэтому если бы подкаталог, который Вы зеркально отражаете, был переименован в какой-то момент в прошлом, то Ваше зеркало содержало бы только изменения, так как каталог появился в URL, который Вы определили. И аналогично, если исходный подкаталог переименован в будущем, Ваши процессы синхронизации прекратят зеркально отражать данные в точке, что исходный URL, который Вы определили, больше не действителен.
проблема, конечно, теряет предварительно переименовать историю...
Я вижу, это уже довольно давно, но помогает ли добавление "--skip-missing-merge-sources"? Кажется, что это могло бы ...
Если вам не нужна вся история, вы можете получить ее сразу после ошибки. Если ваша ошибка была в версии 412, вы можете попробовать исправить ее сразу после этого:
svnadmin dump /path/to/repo -r 413:HEAD > largerepo.dump
Я понимаю, что это тоже может быть не идеальным решением, но может быть достаточно хорошим в вашем случае.
Возможно, вы захотите просто все это делается за один шаг
svnadmin dump /path/to/repo -r 413:HEAD | svndumpfilter include my/directory > mydir.dump
У меня была аналогичная проблема с разделением репозитория ..
svndumpfilter: Invalid copy source path /dir/old_dir
Чтобы обойти эту проблему, я добавил дополнительные старые каталоги, которые запрашивались или которые, как вы знаете, переместились. В моем случае я переместил 3 каталога в другой каталог
например. Папки A, B, C перемещены в папку D
cat project.dump | svndumpfilter include A B C D > new.dump
Похоже, это решило мою проблему. Мне удалось отделить папку D от остальной части репо. С другой стороны, при исключении D я не получал ошибки, я предполагаю, потому что удаление D не требовало ссылок / истории на A, B, C
Еще одна информация о svndumpffilter и как исправить - http://blog.rlucas.net/ungorized/some-gotchas-with-uss-svndumpfilter/
Или вы можете попробовать Svndumpfilter Сценарий замены, сейчас называется svndumpfilter2 - http://cogo.wordpress.com/2009/03/10/problems-with-svndumpffilter/
Я не пробовал этот скрипт, потому что мне нужно немного времени, чтобы сделать резервную копию репо , чтобы проверить на что (у меня есть резервная дампа для игры, но в Windows, и это сценарий Linux).
Это дикий и сумасшедший удар в темноте чрезмерно усложняющих вещей, но как насчет импорта репозитория SVN в git с помощью git-svn / [tailor] [3], разделение каталога с помощью git-split , а затем экспортировать его обратно в svn с помощью git-svn ?
Я тоже ищу ответ на этот вопрос (сам с ним столкнулся). Основываясь на ответе Алекса, я нашел http://furius.ca/pubcode/pub/conf/common/bin/svndumpfilter3.html , который утверждает, что исправляет некоторые проблемы с svndumpfilter2. Я считаю, что это частичное решение.
Хорошее:
Переписывание Subversion's svndumpfilter на чистом Python, который позволяет вам распутать операции перемещения/копирования между исключенными и включенными наборами файлов/директорий, путем преобразуя их в дополнения. Если вы используете эту опцию, то она извлекает исходные файлы из данного репозитория.
Озабоченность:
Важно
Некоторые люди сообщали об ошибке с этим скриптом, что он создает пустой файл в большом хранилище. Он отлично работал для разделения, которое мне нужно было сделать в моем хранилище, но у меня нет времени на исправление проблемы, которая возникает для некоторых других репозиториев
Я столкнулся с этой проблемой и в итоге использовал svndumpfilter2 .
В частности, эта команда:
sudo svnadmin dump /home/setup/svn/repos/main_repl | sudo ./svndumpfilter2.py /home/setup/svn/repos/main_repl Development QA compliance > ~/main_repl_dump.trim
Я получил упомянутую ошибку нехватки памяти, однако, поскольку я запускал svn на виртуальной машине, я просто увеличил объем памяти до 2 ГБ. Хотя я понимаю, что это может быть вариант не для всех, я заметил, что он работал намного быстрее, чем с 512M. (2G, вероятно, не понадобилось).
В настоящее время обрабатывается версия 18 631.
На случай, если кому-то интересно, причина, по которой мне нужно было выделить часть репо, заключалась в том, что мы создавали теги / копии для распространения для реализации файлов на другом пути репо. По какой-то причине из-за этого процесса репо раздувается до огромных размеров. (Сейчас у нас 17G.)
Я делаю это в репозитории репликации SVN, версия 1.5.6, на Debian Lenny, 5.0.4.
только что столкнулся с этой проблемой и написал небольшой сценарий для повторной попытки сброса, пока не будут разрешены все недопустимые исходные пути.
#!/usr/bin/env ruby
require 'open3'
include Open3
paths = [ "/your/path" ]
command = ""
new_path = "xx"
while (! new_path.nil?)
lines = nil
popen3(" svndumpfilter include #{paths.join(' ')} > svn.result.dump < svn.original.dump") do |i, o, err|
i.close
puts "Processing, please wait ..."
lines = err.readlines
end
new_path = nil
lines.each do |line|
if line =~ /Invalid copy source path '(.*)'/
new_path = $1
end
end
puts "Adding #{new_path}"
paths << new_path
end