Ну в принципе базовая модель относительно проста;иметь отдельный частный репозиторий, который является клоном (ветвью) публичного, вносить в него все частные изменения, а затем регулярно объединять публичный в частный.Нет никаких проблем с сохранением истории, я не знаю, почему вы читаете, что это произойдет.
Однако задача состоит в том, чтобы не закончить с неуправляемым адом слияния, и это может быть достигнуто только посредством строгогодисциплина.
Основные эмпирические правила для любых долгоживущих веток:
Держите частную ветвь как можно меньше.Минимизируйте количество изменений и сохраняйте их небольшими, чтобы не начинать рефакторинг огромных частей кода или изменение отступов.В ситуации с односторонним слиянием, как здесь, любой изменяемый код может конфликтовать, даже если он находится на линии вниз.
Слияние часто.Чем чаще, тем лучше.Если вы этого не сделаете, то когда вам захочется интегрировать изменения из общедоступного репозитория, вы получите одно суперслияние, которое имеет массу конфликтов.
ДополнительноВы также должны быть дисциплинированы в организации и написании своего кода, чтобы облегчить этот сценарий.Имеют четкие правила относительно того, что происходит, куда, в какую ветку, и разбивают фрагменты кода.
В идеале вы могли бы смоделировать настраиваемую функциональность как плагин или внешнюю библиотеку, даже отдельный проект.Это не всегда может быть легко достижимо, в этом случае, по крайней мере, попытайтесь написать все частные модификации в терминах подклассов оригинала, которые вы создаете с помощью фабричных методов.Внося все изменения в независимые файлы, которые существуют только в частной ветке, вы минимизируете риск конфликтов.
Также пишите автоматизированные тесты.Много их.В противном случае вы не будете своевременно обнаруживать проблемы слияния (которые произойдут ), и частная ветвь часто будет повреждена.
Наконец, совет: сделайте push-зацепку для открытого репозитория, который запрещаетлюбой push, содержащий набор изменений, который вы знаете, является частным;это предотвратит случайную публикацию частного кода и потенциально избавит вас от головной боли.