Git, SVN и т. Д. Делают этот тип "ветвления и слияния" или что-то вроде этого? - PullRequest
1 голос
/ 16 ноября 2010

Клиент имеет разные версии одного и того же кода, в основном они копируют базу кода шаблона, затем редактируют копию, а затем используют эту копию в производстве в качестве экземпляра кода. Это означает, что работает 20 версий кодовой базы, но 80% кода одинаковы. Без изменения их рабочего процесса есть способ объединить исходный код и затем выполнить сборки кода, если код изменяется в VCS для каждой из сборок / ветвей. Код на Perl, если это имеет значение.

Если так, то как это называется, и управляет ли VCS «сборками» (это Perl, на самом деле это просто версии кода).

Визуальный: Ветви пользовательского кода A, B, C; Х является общим кодом

   |
   |
   X
   |
  /|\
 / | \
A  B  C
 \ | /
  \|/
   |
   |
   X
   |
   |
   |\
   | \
 A,B  C
   | /
   |/
   |
   |
   X
   |
   |      
  /|
 / |
A  B,C
 \ |
  \|
   |
   |
  Etc... Where X = 80% of the code.
   |
   |      

Ответы [ 3 ]

3 голосов
/ 16 ноября 2010

Да, вы можете, но прежде чем я это объясню, я настоятельно рекомендую вам не делать этого.Гораздо лучше отделить материал переменных от общего ресурса и превратить общий материал в некую платформу, которая может быть такой же простой, как перемещение материала переменных в каталог «sites» (я предполагаю, что вы создаете консервированные файлы).веб-сайтов) с 20 подкаталогами, из которых фреймворк выбирает (добавляет к пути к модулю) во время выполнения (use lib "sites/$site"; может помочь, но не цитируйте меня об этом).

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

2 голосов
/ 16 ноября 2010

Я полагаю, что это можно сделать с помощью веток, но я думаю, что было бы более идеальным просто иметь более умную систему шаблонов, которая знала бы, как загрузить правильную версию шаблона.Если вы настаиваете на использовании веток, вы можете сделать это, имея основную ветвь (на языке Git), которая имеет весь общий код, и ветвь для каждого варианта.Изменения в конкретной версии могут быть сделаны в соответствующей ветви, в то время как изменения, которые должны повлиять на все, могут быть сделаны в основной ветви.Однако вам придется объединять последние основные изменения в каждую ветку отдельно, если только вы не написали для этого какую-то автоматизацию.Опять же, я не думаю, что использование веток для чего-то подобного является лучшей идеей, но вы могли бы заставить это работать.

0 голосов
/ 16 ноября 2010

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

  • Создать новую ветку под названием client / custom
  • Makeклиент вносит изменения и передает их в клиент / пользовательский
  • Вносит изменения в репо "origin".
  • Фиксирует изменения в репо origin.
  • Извлекает изменения из origin/ master в client / master
  • Переназначить клиента / custom на последний клиент / master ИЛИ объединить последние изменения из client / master в client / custom.

Возможно, это не самый быстрый способ сделать это в Git, но он может сработать (конечно, при условии, что вы вручную разрешите любые шаткие слияния.)

См. http://git -scm.com / docs/ ГИТ-перебазироваться

...