У меня есть 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
братья и сестры ребенка (например, овощи).