SVN перемещение каталогов для реорганизации репо - PullRequest
8 голосов
/ 05 октября 2011

У меня есть svn репозиторий, содержащий основные каталоги, подобные этому:

/apples/
/bananas/
/pears/

В моей рабочей копии это подкаталоги гораздо большего дерева ...

/food/fruit/apples
/food/fruit/bananas
/food/fruit/pears
/food/veggies/asparagus
/food/veggies/broccoli

Iхотел бы реорганизовать мое репо, чтобы / food / был фактически корнем репо ... но моя рабочая копия - это живой сервер , поэтому мне нужно быть очень осторожным, чтобы ничего не сломать, дажена минуту.Это также действительно большое дерево, поэтому откат ошибки может потенциально привести к заметному простоям.

Если бы это было просто перемещение папок в репо, я думаю, я бы знал, как использовать svn move с аргументами репо(и я предполагаю, что это все еще шаг # 1?) ... но я не уверен, как применить изменения к рабочей копии, затем добавить родительские папки, не испортив существующие рабочие файлы.

МОЙ ОТВЕТ: благодаря AH

1) Убедитесь, что репо обновлено, а затем переместите ветку в репо.Это можно сделать с помощью команд svn move на самом репо или с помощью действий с рабочей копией.Это не влияет на работающую рабочую копию (пока не svn update).Это самая простая часть.

2) svn switch ветка на новое место.В этом примере, в то время как фрукты были корнем репо:

svn switch https://host/svn/fruit /food/fruit

Я немного знал о svn switch ранее, но это было не так сложно.Это изменяет все метаданные .svn, но не влияет на реальные файлы.

3) Вот сложная часть.Вам необходимо выполнить эти шаги в быстрой последовательности для минимального времени простоя (каждый из них очень быстрый):

mv /food/fruit /food/fruit-temp
svn co --depth immediates https://host/svn/ /food/
rm -rf /food/fruit
mv /food/fruit-temp /food/fruit
svn update --set-depth infinity /food/

Здесь происходит то, что проверка с помощью --depth immediates создает метаданные для содержимого / food/ и создает / fruit / subdir , но не его содержимое (нам нужно использовать rm -rf, чтобы мы могли избавиться от папки .svn внутри fruit, но это все, что есть).Затем мы просто меняем реальный контент обратно, и родитель и потомок теперь сшиваются вместе.Как только mv будет сделано, мы снова в сети.set-depth infinity расширяет область действия рабочей копии до того, что вы ожидаете.Наконец, мы можем svn add братья и сестры ребенка (например, овощи).

Ответы [ 2 ]

10 голосов
/ 05 октября 2011

Мой первый совет - начать со свежей рабочей копии, которая НЕ является живой. В этой рабочей копии (WC) вы можете испытать вещи без какой-либо опасности. Вот что на самом деле означает рабочая и копия ; -)

Еще один совет: используйте вторую рабочую копию, чтобы шаг за шагом перестроить существующую структуру в нужную вам структуру. После того, как все будет на месте, зарегистрируйтесь. Имейте в виду, что перестановки должны выполняться с помощью команд svn.

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

Затем вы можете обновить действующую рабочую копию ИЛИ просто переключиться на последний WC с действующего сайта, используя обычную команду mv.

Шаг за шагом:

svn co $URL new-wc
cd new-wc
svn mkdir food
svn mkdir food/fruit
svn mv apples food/fruit
svn mv bananas food/fruit
svn mv pears food/fruit
svn ci

Теперь зацените свежий туалет, чтобы проверить - действующий туалет все еще не изменился!

cd ..
svn co $URL verify-wc
# take time and verify

Теперь переключите действующий WC и проверьте WC в файловой системе - это быстро, если они находятся в одной файловой системе!

mv live-wc live-wc-old
mv verify-wc/food/fruit live-wc

Теперь исправленный WC исправлен. Альтернативой для блока ast может быть:

cd live-wc
svn switch $URL/food/fruit

Это не должно занимать много времени - но сначала проверьте это с резервной копией: -)

0 голосов
/ 05 октября 2011

Я бы собрал замену и затем использовал svn switch на вашей рабочей копии, чтобы переключиться на нее.

1) svn скопировал бы весь ваш рабочий каталог в новый рабочий каталог

2)Создайте родительские папки в новой рабочей копии

3) скопируйте svn или переместите файлы из их текущего относительного местоположения в копии в предполагаемые места.

4) Когда вы полностью довольнынастройка новой рабочей копии, зафиксируйте ее

5) Теперь, в вашей действующей версии, используйте переключатель svn для перенаправления на новый рабочий каталог

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...