Короче говоря, я хочу "переделать" подкаталог другого проекта (не под моим контролем) на верхний уровень нового репозитория и делать улучшения кода в этом подкаталоге, сохраняя при этом возможность слияния изменений из подкаталога в восходящий проект.
Я читал эту тему на некоторое время, но не могу найти верный ответ для моей ситуации. Большинство применений 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". В частности, я в основном создаю параллельную историю подкаталога восходящего проекта и поддерживаю свою собственную "поднятую" ветвь для каждой основной ветки вверх (не говоря уже о возможности ссылаться на теги вверх по течению).
Есть ли лучший способ сделать это?