Я участвую в довольно небольшом проекте с открытым исходным кодом, размещенном на Github. Чтобы другие люди могли воспользоваться моей работой, я создал свою собственную вилку в Github. Несмотря на выбор терминологии Github, я не хочу полностью расходиться с основным проектом. Однако я не ожидаю и не желаю, чтобы вся моя работа была принята в основной репозиторий. Однако некоторые из них уже были объединены в основной репозиторий, и я ожидаю, что это продолжится. Проблема, с которой я сталкиваюсь, заключается в том, как наилучшим образом сохранить наши два дерева в состоянии, когда код может быть легко разделен между ними.
В некоторых ситуациях, с которыми я столкнулся, есть:
- Я совершаю код, который позже принят в основной репозиторий. Когда я тяну из этого хранилища в будущем, моя фиксация дублируется в моем хранилище.
- Я фиксирую код, который никогда не принимается в основной репозиторий. Когда я выйду из этого хранилища в будущем, эти два дерева расходятся, и это трудно.
- Другой человек приходит и основывает свою работу на моем репозитории. Таким образом, я должен, если это вообще возможно, избежать изменения коммитов, которые я нажал, например, используя git rebase.
- Я хочу отправить код в главный репозиторий. В идеале, мои изменения легко могут быть преобразованы в патчи (в идеале с использованием git format-patch), которые могут напрямую и чисто применяться к главному репозиторию.
Насколько я могу судить, есть два или, возможно, три способа справиться с этим, ни одна из которых не работает особенно хорошо:
- Часто запускайте git rebase, чтобы мои изменения основывались на заголовке восходящего репозитория. Таким образом, я могу устранить дублированные коммиты, но часто приходится переписывать историю, вызывая проблемы для людей, желающих получить свою работу от моих.
- Частое слияние изменений хранилища вверх по потоку в мой. Это работает нормально с моей стороны, но, похоже, не упрощает отправку моего кода в восходящий репозиторий.
- Используйте некоторую комбинацию из них и, возможно, git вишневый выбор, чтобы все было в порядке.
Что сделали другие люди в этой ситуации? Я знаю, что моя ситуация аналогична взаимосвязи между различными вкладчиками ядра и основным хранилищем Linus, поэтому, надеюсь, есть хорошие способы справиться с этим. Я новичок в git, хотя и не освоил все его нюансы. Наконец, особенно из-за Гитуба, моя терминология может быть не совсем последовательной или правильной. Не стесняйтесь меня исправлять.