Могу ли я объединить теги, ветви и стволы двух отдельных проектов Subversion в новый родительский проект? - PullRequest
1 голос
/ 23 марта 2012

У меня есть такой репозиторий:

  • Корень хранилища
    • Проект А1
      • Ствол
        • А1 материал
      • метка
      • ветви * * 1016
    • Проект А2
      • Ствол
        • А2 материал
      • метка
      • филиалы

Я хотел бы объединить эти два проекта в один родительский каталог, сохранив историю, теги и ветви, избегая при этом присутствия подкаталогов trunk / tags / branch под каждым проектом в локальной проверке. Таким образом, новый макет будет выглядеть так:

  • Корень хранилища
    • Проект А-Прайм
      • Ствол
        • Проект А1
          • А1 материал
        • Проект А2
          • А2 материал
      • метка

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

Я мог бы объединить только стволы, используя только команды svn move (и то же самое для ветвей):

svn move /A1/trunk /A-prime/trunk/A1
svn move /A2/trunk /A-prime/trunk/A2

Но это не сохранит теги. Кажется, что я мог бы создавать новые каталоги тегов вручную и перемещать теги каждого подпроекта по одному за раз, но это кажется уродливым, и я не уверен, что могу так просто перемещать теги - предоставляет ли Subversion особую обработку как-то?

Ответы [ 2 ]

1 голос
/ 24 марта 2012

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

Это, конечно, возможно. Причина этого проста:

  • Все в тегах и ветвях является просто (Subversion) копией ствола. Копия SVN дешевая, потому что она копирует только метаданные. Так, например ответвление rel1 является копией ревизии 4711 вашего ствола. Эта структура никогда не изменится, поэтому ваши ветки и теги действительны.
  • Когда вы реструктурируете свой репозиторий Subversion, используя только команды Subversion, Subversion гарантирует, что вы не потеряете никакой информации. Вы точно знаете, каково ваше текущее содержание вашего проекта «А1», и вы знаете историю всего этого.
  • Вы не делаете реальное слияние, вы только перемещаете контент внутри хранилища.

Единственное, что может сломаться, это когда вы используете svn:externals где-то, и они переходят к текущей версии (голова). Вы должны изменить все эти определения, потому что ваша структура изменилась. И вы должны знать, что делать, если некоторые из верхних каталогов в ветвях или каталогах тегов (которые ранее отличались) имеют одинаковые имена, поэтому различий нет.

Вы можете использовать такую ​​структуру (похожую на схему ствола):

/tags
  /projectA1
    /rel1
    /rel2
  /projectA2
    /rel1
    /rel2

Так что сделайте это, и если что-то пойдет не так, просто воссоздайте свой репозиторий из созданного ранее дамп-репозитория.

0 голосов
/ 24 марта 2012

Вы можете попробовать с осторожностью .Несколько полезных ссылок для вас (вы забыли сделать свою домашнюю работу)

Подсказки

SVN Book

Формат дампа также можно использовать для объединения содержимого нескольких различных репозиториев в один репозиторий.Используя опцию --parent-dir загрузки svnadmin, вы можете указать новый виртуальный корневой каталог для процесса загрузки.Это означает, что если у вас есть файлы дампа для трех репозиториев - скажем, calc-dumpfile, cal-dumpfile и ss-dumpfile - вы можете сначала создать новый репозиторий для хранения их всех:

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

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

Пример из "Merge SVN Repositories"

svn-merge-repos.pl -t ./proj ./foo/trunk:proj1 ./bla/trunk:proj2

Объединение «ствола» хранилищ «foo» и «bla» в качестве подкаталогов «proj1» и «proj2» в хранилище «proj»

...