Как сделать вилку с открытым исходным кодом, полученную из проекта с закрытым исходным кодом?

Я разветвляю часть (но не всю) проекта с закрытым исходным кодом, чтобы сделать проект с открытым исходным кодом. На данный момент я создал ветку («открытую»), из которой удалил функции, исходный код которых мы нет собираемся открыть.

Теперь я мог в этот момент экспортировать «открытую» ветку и зарегистрировать ее в свежем, пустом репо, который становится выпуском с открытым исходным кодом.

Однако я хотел бы сохранить возможность синхронизации изменений между версиями с открытым и закрытым исходным кодом: т. е. если мы позже исправим ошибку в закрытом исходном коде, то также синхронизируем исправление с версией с открытым исходным кодом (и наоборот, если участник согласен) .

Есть ли способ добиться этого, не публикуя историю «открытой» ветки (т.е. закрытой ветки)?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку git хранит коммиты в виде наборов изменений, вы можете легко выбирать изменения из одного репо в другое (если, конечно, присутствуют одни и те же измененные файлы и они не слишком сильно отличаются).

Один из способов добиться этого — добавить оба «источника» как удаленные в один клон репо. Затем извлечение всех коммитов с обоих пультов (чтобы у вас были доступные хэши коммитов). Затем вы можете проверить ветку одного удаленного репозитория и выбрать фиксацию другого удаленного, как и любой другой выбор вишни с одним удаленным репо.

Что-то вроде этого в ужасно истолкованном примере:

git clone git://blablabla.git mydoublerepo
cd mydoublerepo
git remote add other git://other.git
git fetch other
git checkout -b other_master -t other/master
git cherry-pick origin/master # cherry-picks the top commit off of the other remote's master branch

Обратите внимание, что вам не нужно создавать для этого отдельный клон, вы можете добавить любое репо в качестве удаленного к любому другому клонированному репо.

Другие вопросы по теме