Создать дочернюю ветвь выпуска

#git

#мерзавец

Вопрос:

[упрощенный вопрос (надеюсь)]

У меня есть главная ветвь с файлами A, B, C и D. Я хочу иметь следующую структуру ветвления

 master
|- branch1
|- branch2
|- branch3
 

где

  • мастер содержит файл A
  • ветвь1 содержит файлы A и B
  • ветвь2 содержит файлы A и C
  • ветвь3 содержит файлы A и D

Если я разветвляю branch1, branch2 и branch3 от master, все ветви будут содержать A, B, C и D. Затем я мог бы удалить C и D из branch1, удалить B и D из branch2 и удалить B и C из branch3. Тогда я мог бы объединить branch1, branch2 и branch3 в master. Это должно сработать, верно? Однако мне приходится удалять B, C и D по два раза из разных ветвей: можно ли это оптимизировать, чтобы мне не нужно было удалять файл несколько раз?

[версия 1]

У меня есть проект java / git, и на данный момент у меня есть только главная ветка. Теперь я хотел бы настроить ветку выпуска подходящим образом, исключив части кода (некоторые файлы, а также некоторые методы из определенных файлов).

Я мог бы

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

Но я полагаю, что объединение изменений в ветке разработки позже в ветку выпуска было бы проблематичным при возникновении конфликтов удаления / изменения.

Я бы последовал руководству по этому вопросу, но не нашел ни одного. Есть какие-нибудь идеи о том, как сделать это разумным и простым (я не очень разбираюсь в git poweruser) способом?

[дополнительная информация]

По сути, мой код можно понимать как основную часть, над которой работают несколько модулей. В идеале я должен был создать ветку для ядра и по одной ветке для каждого модуля. Однако теперь, когда возникла проблема с выпуском, мне также понадобились бы дочерние ветви, которые скрывают части каждой ветви.

 src/core/Main.java
src/core/Helper.java
src/modA/FeatureA.java
src/modA/ExperimentalFeatureA.java
src/modB/FeatureB.java
src/modB/ExperimentalFeatureB.java
 

[версия 2]

Я полагаю, что я, возможно, захочу иметь структуру, подобную приведенной ниже, где ветви core_dev, moduleA_dev и moduleB_dev содержат дополнительные элементы, которые не должны быть объединены в core, ModuleA и ModuleB. Затем мне нужно было бы проверять, что нужно объединять каждый раз при объединении ветви *_dev. Но как это настроить? Я предполагаю, что следующее будет работать с дополнительными усилиями по удалению одних и тех же объектов в разных ветвях на шаге 2.

  • ответвляйте, как описано ниже, но опустите ветви ModuleA, moduleA_dev, ModuleB и moduleB_dev.
  • удалить дополнительный материал в ядре
  • объединить ядро с разработкой
  • объединить разработку с выпуском
  • объединить релиз с мастером
  • ответвление ModuleA от ядра, ответвление moduleA_dev от ModuleA
  • ответвление ModuleB от ядра, ответвление moduleB_dev от ModuleB
  • каким-то образом! объединить core_dev в moduleA_dev и moduleB_dev без изменения ModuleA и ModuleB

Но есть ли смысл делать это по-другому?

 master
|- release
   |- development
      |- core
            src/core/Main.java
         |- core_dev
               src/core/Helper.java
         |- moduleA
               src/modA/FeatureA.java
            |- moduleA_dev
                  src/modA/ExperimentalFeatureA.java
         |- moduleB
               src/modB/FeatureB.java
            |- moduleB_dev
                  src/modB/ExperimentalFeatureB.java
 

Комментарии:

1. Почему наличие основных частей в ветке, специфичной для modA, является проблемой? У вас определенно может быть ветка, которая ориентирована на изменение информации о modA и не заботится о том, что core и modB также присутствуют. Наличие связанного, но структурно отличающегося контента в разных ветвях довольно сложно сделать правильно, и обычно оно того не стоит (особенно когда вы хотите легко объединить так или иначе). Не могли бы вы объяснить, какова ваша основная цель (это может быть проблемой XY )

2. Я добавил раздел, чтобы объяснить, как я мог себе это представить, но по крайней мере один шаг мне не ясен, как это сделать.. В принципе, я хочу очистить и разделить свой код на core, ModuleA и ModuleB и «грязные» частные версии core_dev, moduleA_dev и moduleB_dev; тогда в выпуске должны быть только core, ModuleA и ModuleB…

3. Для меня это звучит как moduleA и moduleB должно быть действительно отдельными репозиториями, поскольку в вашем примере они не используют какой-либо код core .

4. Что такое «дочерняя ветвь»?

5. Вы уже пытались внедрить GitFlow в свой проект? Или вы ищете конкретную модифицированную версию методологии git?