Как объединить две отдельные - но похожие - базы кода в один представитель SVN? - PullRequest
4 голосов
/ 23 октября 2010

У меня есть

/ var / www / cool_codebase на www.example.com И у меня есть

/ var / www / cool_codebase на www.example.net

Кодовые базы предназначены для одного и того же веб-приложения, работающего на разных серверах.Существует некоторая специализация между кодовыми базами (специфичными для клиента битами, бобами и т. Д.) - но не слишком много.В одной кодовой базе есть файлы, а в другой нет, и наоборот.Некоторые части программирования тоже разные.

Я загрузил каждую кодовую базу на свой локальный хост, и мой вопрос:

Как я могу объединить эти две папки в одну папку и затем зафиксировать ее как одну "великая унифицированная кодовая база "в мой SVN?

Должен ли я поместить каждую кодовую базу в свое собственное репозиторий SVN, а затем объединить эти отдельные репозитории?Или я могу объединить кодовые базы до SVN - например, с помощью какой-нибудь команды linux - и затем передать его в SVN?

Буду признателен за любые идеи или помощь.

Я должен добавить, что конечным результатом будет ОДНА «великая унифицированная кодовая база», которую мы можем развернуть на www.example.com и www.example.net без сбоев.

(PSДа, я понимаю, что что бы я ни делал, мне придется редактировать некоторые файлы и делать программирование «общим» и т. Д. Я не против этого. Я просто ищу способы автоматизации или полуавтоматизациивсе дело.)

1 Ответ

2 голосов
/ 23 октября 2010

Объединение кодовых баз после фиксации их в svn имеет то преимущество, что у вас есть доступ к их истории впоследствии: вы сможете увидеть, какие части кода пришли из версии ".com"., который из ".net", и какие изменения были внесены в процессе их объединения.

Один из способов сделать это:

  1. Импортировать код ".com"база в новый репозиторий как транк.
  2. Создайте ветку из этой транка: svn cp svn://repo/trunk svn://repo/branches/net
  3. Проверьте ветку, скопируйте код ".net", выполните svn add и remove по мере необходимости, чтобы ветка содержала именно .net версию.Зафиксируйте это.
  4. Проверьте соединительную линию и svn merge ^/branches/net .
  5. Очень внимательно проверьте вывод svn diff и отредактируйте извлечение ствола, чтобы оно стало вашим единым целымcodebase.

Насколько сложный шаг 5 будет сильно зависеть от конкретных кодовых баз.

Если у вас есть доступ к более старой версии "общего предка", из которой обаоснований кода, вы должны проверить эту версию на шаге 1, а затем проверить версию «.com» в транке перед шагом 4. Это позволяет svn выполнить автоматическое «трехстороннее объединение» вшаг 5, потенциально экономя вам кучу ручной работы.

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

Обратите внимание, что у meld есть возможностьа) сравнить целые деревья каталогов и б) сравнить и редактировать три версии одновременно.Таким образом, вы можете указать его в каталоге, содержащем код «.com», в котором содержится код «.net», и в вашем рабочем каталоге, чтобы увидеть все три версии рядом.

...