Стратегия частичного развертывания Git? - PullRequest
2 голосов
/ 28 мая 2010

Мне нужно настроить среду разработки Kohana, которая позволит мне в полной мере использовать общие классы модулей / систем в разных приложениях. Каждое приложение обычно принадлежит другому клиенту. Я использую Git для управления исходным кодом, но изо всех сил пытаюсь найти метод чистого развертывания, который позволит мне перетянуть только те части среды разработки, специфичные для клиента / приложения, в производственную среду этого клиента ( при условии, что в производственной среде клиента будет установлен Git).

Среда разработки:

- kohana
  - applications
     - clientapp1
     - clientapp2
  - modules
  - public_html
     - clientapp1
     - clientapp2
  - system
     - 3.0.1
     - 3.0.5

Производственная среда клиента 1:

- /
 - applications
     - clientapp1
 - modules
 - public_html
     - client_app1
 - system
     - 3.0.5

Естественно, я хочу иметь полный контроль над каждым клиентским «суб-репо», как если бы это было независимое репо (с точки зрения gitignore и т. Д.). Я видел темы, которые охватывают Git sparse checkout , но кажется, что это может вызвать некоторые проблемы в будущем с точки зрения обслуживания, и мне не нравится идея метаданных всего репо существующий в производственной среде клиента репо.

Как вы, вероятно, можете сказать, я не совсем Git Poweruser, поэтому любые предложения / мудрость очень приветствуются!

1 Ответ

1 голос
/ 28 мая 2010

В идеале каждый из ваших каталогов (app / clientapp1, app / clientapp2, public_html / clientapp1, ...) представляет собой подмодуль

I.e: основной проект git repo:

kohana
  - applications
  - modules
  - public_html
  - system

Где вы добавляете свои подмодули:

- kohana
  - applications
     - clientapp1  -> remote: /path/to/app_client1app Git repo
     - clientapp2  -> remote: /path/to/app_client2app Git repo
  - modules
  - public_html
     - clientapp1  -> remote: /path/to/pubhtml_client1app Git repo
     - clientapp2  -> remote: /path/to/pubhtml_client2app Git repo
  - system
     - 3.0.1  -> remote: /path/to/sys Git repo, tag 3.0.1
     - 3.0.5  -> remote: /path/to/sys Git repo, tag 3.0.5

Тот факт, что вы используете только субмодули, позволяет:

- /
  - applications
     - clientapp1  -> remote: /path/to/app_client1app Git repo
  - modules
  - public_html
     - clientapp1  -> remote: /path/to/pubhtml_client1app Git repo
  - system
     - 3.0.5  -> remote: /path/to/sys Git repo, tag 3.0.5
  • для определения другого основного проекта, на этот раз для развертывания
  • работает непосредственно в специальных ветвях развертывания в этих подмодулях, что позволяет вам управлять их файлами в конкретной клиентской среде.
    (см. истинная природа подмодулей )
...