LINUX.ORG.RU

Структура проекта. Проблема синхронизации с монорепой.

 , ,


0

2

Всем привет, вот задался таким вопросом. Есть некий открытый проект, назовем его Апстрим. Он лежит в гите в виде здоровенной монорепы:

А
Б
В
....
Э
Ю
Я

,

где по сути основной проект - это Б, а остальное - проекты, от него зависящие, но не обязательные (пример - LLVM).

Я делаю свой проект П, который не является форком проекта Апстрим, но в нём есть часть из него.

Х
Б
Й

То есть я хочу как бы форкнуться от проекта Апстрим, запомнить момент форка, дальше разрабатывать свой П и периодически синкаться с Апстрим.

Проблема: я буду активно вносить изменения в часть Б, но не хочу тащить всё остальное из Апстрим с собой.

В одну сторону это просто, я бы просто брал патчи для Б из П и вносил их в Апстрим, когда надо, в другую сторону проблема, например, я хочу обновить Б у себя до новой мажорной версии из Апстрим, скажем с 9 до 10, что делать? Подготовить мега-патч из Апстрим 9->10 и наложить его в П? Но тогда потеряется вся история коммитов из Апстрим.

Как вы решаете такие проблемы?

☆☆☆☆☆

Последнее исправление: DELIRIUM (всего исправлений: 1)

В моём понимании таки придётся таскать патчи из апстрима в свой проект, только делать не один мегадифф, а серию патчей: git bundle. Плюс в том, что можно ребейзиться по одному патчу, составляющему следующий релиз, решая проблемы в своём коде, а не разбираться с ситуацией, когда обновил базу, и всё сломалось.

uuwaan ★★
()
Ответ на: комментарий от uuwaan

Да, я таки склоняюсь к такому варианту, но думал, может есть какие-то более продвинутые best practices, про которые я не в курсе.

DELIRIUM ☆☆☆☆☆
() автор топика

Не уверен, но, возможно, здесь поможет git-subtree.

xaizek ★★★★★
()
Ответ на: комментарий от Deleted

Надо таки про него почитать) когда я ковырял гит, там не было его ещё вроде.

DELIRIUM ☆☆☆☆☆
() автор топика

Два проекта создать с разными .git. Из проекта Апстрим ссылкой файловой системы к себе забрать подпроект Б.

menangen ★★★★★
()

Как вы решаете такие проблемы?

Я делаю свой проект П, который не является форком проекта Апстрим, но в нём есть часть из него.

Для llvm уже есть(правда не официальная) попиленная на куски монорепа. Форкать её самый простой вариант.

я хочу обновить Б у себя до новой мажорной версии из Апстрим, скажем с 9 до 10, что делать?

В большинстве случаев всё решается ребейзом. Никогда не трогаю upstream и его историю. Все возникающие проблемы я решаю упаковкой своих изменения в мета-коммиты для упрощения мержа.

По поводу как накатить отпиленный форк на монорепу. Накатываю патчем.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.