Есть похожий вопрос на Наилучшая практика управления вариантами проектов в Git? , но контекст другой, и я подозреваю, что ответ может быть слишком.
У меня есть Какао-продукт "Первый", управляемый с помощью Xcode и версионированный с помощью git. «Первый» все еще развивается и в настоящее время находится в его третьей версии.
Затем приходит клиент и просит вариант First, называемый Second. Изменения с Первого на Второе влияют на многие, но не на все файлы. Изменения влияют на исходный код, но также и на ресурсы (графические элементы, файлы перьев, списки свойств ...).
Теперь эти два продукта живы и имеют несколько общих файлов. Однако некоторые изменения, такие как исправление ошибок, могут относиться к обоим продуктам. Возможно, к обоим продуктам может быть добавлена новая функция.
Каков наилучший способ управления таким сценарием:
У меня есть две идеи, которые являются взаимоисключающими:
Идея 1: перевести ветку git «Первый» во «Второй» и применить любое применимое изменение из одного проекта обратно в другой. Это приводит к двум совершенно отдельным каталогам и проектам Xcode.
Идея 2: Добавить цель с именем «Второй» в проект Xcode. Теперь один и тот же проект XCode имеет две цели и используется для разработки и создания обоих продуктов. Но это затрудняет управление релизами для First и Second в git (релизы не имеют причин для синхронизации).
Идея 2 делает процесс параллельной разработки очень простым. Код всегда синхронизирован. Расхождения могут быть обработаны через переменные времени компиляции и один исходный файл ИЛИ через разные исходные файлы. Это делает управление версиями более неясным.
Идея 1, возможно, чище, но какова лучшая практика управления тем, что остается общим для двух проектов? Можете ли вы сделать "частичное слияние" между двумя ветками Git? На каком основании? Или это должно быть обработано вручную?
Может быть возможно инкапсулировать и извлекать некоторые общие части в модуль или библиотеку, но не всегда. Например, я не думаю, что это возможно для обычных значков документов. Кроме того, рефакторинг «First», чтобы все обычные элементы были извлечены для сборки, является важным делом, которое я предпочел бы выполнить немного за раз.
Я понимаю, что не может быть идеального решения. Я ищу идеи и предложения.
Как относительно недавний пользователь git, я также понимаю, что это может быть вопрос RTFM. Тогда просто укажите мне FM к R.
Большое спасибо.