Короче говоря, я хочу «разветвить» подкаталог другого проекта (не находящегося под моим контролем) на верхнем уровне нового репозитория и внести улучшения в код в этом подкаталоге, сохранив при этом возможность объединять изменения из подкаталога в восходящий проект.
Я уже некоторое время читаю эту тему, но не могу найти точного ответа для моей ситуации. Большинство случаев использования git subtree
распадаются на следующие случаи:
- Подкаталог проекта выделяется как отдельный проект. Родительский проект полностью удаляет подкаталог, а новый проект живет своей жизнью.
- Сопровождающий родительского проекта хочет разрешить обслуживание подкаталога на своих условиях и выделяет его в свой собственный репозиторий, который добавляется обратно в основной проект с помощью
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 subtree add
. Думаю последний абзац здесь обсуждает то, что я ищу. - person jasonmp85   schedule 29.05.2014