Короче говоря, я хочу "переделать" подкаталог другого проекта (не под моим контролем) на верхний уровень нового репозитория и делать улучшения кода в этом подкаталоге, сохраняя при этом возможность слияния изменений из подкаталога в восходящий проект.
Я читал эту тему на некоторое время, но не могу найти верный ответ для моей ситуации. Большинство применений git subtree
разбиваются на эти случаи:
- Подкаталог проекта выделяется как отдельный проект. Основной проект полностью удаляет этот подкаталог, и новый проект живет своей жизнью.
- Сопровождающий родительского проекта хочет разрешить ведение подкаталога на своих собственных условиях и выворачивает его в свой собственный репозиторий, который добавляется обратно в основной проект с использованием
git subtree add
Эти варианты использования не относятся ко мне: я не разблокирую и забываю, и у меня нет сторонних сторон этой вилки, поэтому git subtree add
потока git subtree add
неприменимо.
Итак, скажем, исходный модуль живет в contrib/foo
в основном проекте. Моя нынешняя идея:
- Используйте
git subtree split -P contrib/foo -b upstream_vx.y
чтобы создать новую историю, которая "подталкивает" подкаталог до верхнего уровня хранилища - Создайте
master
ветку из моего проекта с улучшениями с этого момента - Продолжайте обновлять
upstream_vx.y
, периодически запускаяgit subtree split
- Когда мне нужно исправление ошибки или еще что-то от восходящего потока, слейте
upstream_vx.y
в мойmaster
Это не кажется мне "git-like". В частности, я в основном создаю параллельную историю подкаталога восходящего проекта и поддерживаю свою собственную "поднятую" ветвь для каждой основной ветки вверх (не говоря уже о возможности ссылаться на теги вверх по течению).
Есть ли лучший способ сделать это?