Как разделить папку SVN на ее собственный репозиторий, когда она была переименована?

Я поддерживаю хранимые процедуры ( MySQL имеет поддержку хранимых процедур с 5.0 ) с точки зрения безопасности - преимущества -

  1. Большинство баз данных (включая MySQL ) позволяют ограничить доступ пользователей к выполнению хранимых процедур. Четкое управление доступом к безопасности полезно для предотвращения эскалации атак привилегий. Это предотвращает возможность взлома приложений, которые могут быть запущены SQL, непосредственно из базы данных.
  2. Они абстрагируют исходный SQL-запрос из приложения, поэтому для приложения доступно меньше информации о структуре базы данных. Это затрудняет понимание людьми базовой структуры базы данных и разработку подходящих атак.
  3. Они принимают только параметры, поэтому существуют преимущества параметризованных запросов. Конечно, IMO вам все равно нужно дезинфицировать ваш вход, особенно если вы используете динамический SQL внутри хранимой процедуры.

Недостатки -

  1. Они (хранимые процедуры) трудно поддерживать и стремиться к размножению очень быстро. Это делает их проблемой.
  2. Они не очень подходят для динамических запросов - если они созданы для принятия динамического кода в качестве параметров, тогда многие преимущества сбрасываются.

41
задан Community 23 May 2017 в 11:53
поделиться

12 ответов

Эта проблема возникает, когда один из каталогов / файлов, включенных svndumpfilter, изначально был скопирован или перемещен из раздела дерева, который не включается.

Для решения проблемы используйте этот сценарий: svndumpfilter3

14
ответ дан 27 November 2019 в 00:48
поделиться

Определенные команды следующим образом, я собираюсь предположить, что репозиторий размещается на 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

у Вас должна теперь быть часть, которую Вы хотите от старого репозитория как соединительная линия новой.

1
ответ дан ng. 27 November 2019 в 00:48
поделиться

Для почему бы не тиражирования всего репозитория выведите его в к новому. Затем расширьтесь соединительная линия, удалите голову и объедините части, которые Вы хотите, въезжают задним ходом к соединительной линии от ответвления. Затем Вы сохранили историю и разделили части, которые Вы хотите в новый репозиторий.

  1. Дамп к соединительной линии /
  2. Ответвление / соединительная линия к/branches/trunk
  3. Удаляет соединительную линию /
  4. , Слияние/branches/trunk/whatever въезжает задним ходом к соединительной линии / или/trunk/whatever

Таким образом, Вы сохранили всю историю и выборочно выбрали части, которые Вы хотите.

2
ответ дан ng. 27 November 2019 в 00:48
поделиться

Это могло потенциально помочь Вам: Кавычка от 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, который Вы определили, больше не действителен.

проблема, конечно, теряет предварительно переименовать историю...

3
ответ дан Alphager 27 November 2019 в 00:48
поделиться

Я вижу, это уже довольно давно, но помогает ли добавление "--skip-missing-merge-sources"? Кажется, что это могло бы ...

0
ответ дан 27 November 2019 в 00:48
поделиться

Если вам не нужна вся история, вы можете получить ее сразу после ошибки. Если ваша ошибка была в версии 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
0
ответ дан 27 November 2019 в 00:48
поделиться

У меня была аналогичная проблема с разделением репозитория ..

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

17
ответ дан 27 November 2019 в 00:48
поделиться

Еще одна информация о 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).

0
ответ дан 27 November 2019 в 00:48
поделиться

Это дикий и сумасшедший удар в темноте чрезмерно усложняющих вещей, но как насчет импорта репозитория SVN в git с помощью git-svn / [tailor] [3], разделение каталога с помощью git-split , а затем экспортировать его обратно в svn с помощью git-svn ?

2
ответ дан 27 November 2019 в 00:48
поделиться

Я тоже ищу ответ на этот вопрос (сам с ним столкнулся). Основываясь на ответе Алекса, я нашел http://furius.ca/pubcode/pub/conf/common/bin/svndumpfilter3.html , который утверждает, что исправляет некоторые проблемы с svndumpfilter2. Я считаю, что это частичное решение.

Хорошее:

Переписывание Subversion's svndumpfilter на чистом Python, который позволяет вам распутать операции перемещения/копирования между исключенными и включенными наборами файлов/директорий, путем преобразуя их в дополнения. Если вы используете эту опцию, то она извлекает исходные файлы из данного репозитория.

Озабоченность:

Важно

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

2
ответ дан 27 November 2019 в 00:48
поделиться

Я столкнулся с этой проблемой и в итоге использовал 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.

3
ответ дан 27 November 2019 в 00:48
поделиться

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

#!/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
0
ответ дан 27 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: