#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?