Я думаю, вы хотите что-то вроде
- создайте ветку для source1 - фиксируйте релизы и патчи здесь по мере их получения, чтобы состояние ветки всегда совпадало с последним выпуском, который вы получили
- сделайте вашу основную ветку из source1, и зафиксируйте ваши коммиты source2 здесь (или добавьте ветки для функций, а затем объедините их здесь)
- настройка CI и CD из ветки source2 / master
- (возможно, стоит настроить какой-то CI на ветке source1, просто чтобы убедиться, что его тесты нормально работают на вашем сервере сборки, прежде чем вы вносите какие-либо изменения, но это нечасто, поэтому вы можете просто отключить их вручную).
Тогда коммит source1 всегда является родителем master / source2, и когда вы получаете обновление в ветке source1, вы можете просто попробовать git merge
сделать это в master / source2. И это может просто сработать: если нет, и вам нужно начать заново, то переименуйте вашу старую главную ветку в сторону (или просто сделайте тег), затем возьмите новую ветку master из source1 и cherry-pick или перепишите все свои фиксирует это, исправляя их для новой версии source2.
Могут быть более умные решения, но это дает вам историю source1 и разумное представление работы source2, которую вы проделали поверх нее. Я не могу сказать, справится ли git merge
с основными изменениями в source1; коллеги в восторге от его сверхдержав, но я сам имел смешанный успех, но это стоит того. Это не дает вам ни одной ветки со всеми вашими выпусками source2 в тот момент, когда вам нужно вырезать новые ветки из source1, но вы можете отслеживать их с помощью тегов.