Вопрос по git – Git рабочий процесс для поддержки вилки расширения проекта?
===========================================================================

Мы создали проект OSS на GitHub и добавляем в него некоторые пользовательские расширения. Мы хотим отправить некоторые изменения, которые мы вносим, обратно в исходный проект (исправление ошибок и т. П.), Но другие изменения являются расширениями функций, которые в настоящий момент не интересуют тех, кто сопровождает исходный проект. Я пытаюсь определить лучший рабочий процесс для управления этой ситуацией.

Я хочу, чтобы наша ветка master содержала сумму (коммиты из исходного проекта) + (наши исправления ошибок для вклада) + (наши пользовательские расширения). Я предполагаю, что нам понадобится модель ветвлений для каждой функции, чтобы мы могли хранить исправления ошибок отдельно от пользовательских расширений. Мы можем запускать собственные ветки расширений из нашей основной ветки, но я думаю, что мы также захотим сохранить локальное «происхождение». ветвь или что-то, что отслеживает исходный проект, чтобы мы могли запускать ветки с исправлениями ошибок, которые не загрязняются нашими пользовательскими материалами. Или что-то.

Кто-нибудь может предложить лучший способ структурировать этот рабочий процесс так, чтобы все различные коммиты шли туда, куда они должны идти, и никто не шел туда, куда они не должны идти?

 что вы уже ответили на свой вопрос. Создайте ветку под названием «ваниль» или что-то, что отслеживает основную ветвь восходящего потока и имеет "master" ветка, которая содержит ваши пользовательские расширения. Создавайте ветки для каждой вещи, которую вы делаете. Для исправлений исправьте их с "vanilla". Для ваших собственных вещей, начните их с мастера. Время от времени сливайте ваниль с мастером. Чтобы добавить исправления в вашу ветку пользовательских расширений, вы можете слить их ветви непосредственно с master или просто подождать, пока апстрим примет ваши запросы на исправление исправлений, а затем следующее слияние vanilla и master будет содержать исправления ошибок. Это похоже на очень нормальный рабочий процесс.



**long term fork**Чтобы сделать это, как вы уже поняли, решение может заключаться в создании специальной ветки, связанной с оригинальным «vanilla». проект и иметь основную ветку, где вы поддерживаете свою пользовательскую рабочую копию.

Единственное, что вы должны иметь в виду (с моей точки зрения), это то, что вы не должны объединять две ветви, когда хотите синхронизировать изменения, но в этом случае (**When Branches Diverge**) есть удобный Git[Cherry-Пика](https://linux.die.net/man/1/git-cherry-pick) командаthat lets you take a single commit from one branch and apply it to anotherэто может быть особенно полезно в случае поддержки разветвления, потому что вы можете легко обмениваться одним коммитом из одной ветви в другую ...