Есть удалённый репозиторий основного проекта, в котором в каталоге cite лежит содержимое другого подпроекта.
Реализована данная схема была согласно этому руководству.
Добавил удалённый сервер подпроекта:
git remote add cite_serv user@server:/opt/git/cite
Получил информацию по серверу:
Поместил подпроект в отдельную ветку cite_project
git checkout -b cite_project cite_serv/master
Переключился в ветку master основного проекта
Вытянул подпроект в подкаталог cite, которого изначально в основном проекте не было:
git read-tree --prefix=cite/ -u cite_project
В итоге (практически цитата): после того как вы сделаете коммит, все файлы проекта сite_project будут находиться подкаталоге cite — будто вы скопировали их туда из архива.
Плюсом подхода является то, что можно лего последние изменения подпроекта вытягивать в соответствующую ветку и потом её объединять через
git merge --squash -s subtree --no-commit cite_project
Теперь сложности:
Прихожу домой, клонирую основной проект.
git clone user@server:/opt/git/letter
Ни о каком втором удалённом сервере полученный проект не знает, папка cite так же присутствует.
При повторении предыдущей последовательности команда
git read-tree --prefix=cite/ -u cite_project
выдаёт
error: Entry 'cite/LibraryDB.bib' overlaps with 'cite/LibraryDB.bib'. Cannot bind.
что логично, файлы же существуют после клонирования.
Вопрос такой: можно ли как-то ветку подпроекта (cite_project), которая создалась после git checkout -b cite_project cite_serv/master объединить с уже существующей папкой cite в основном проекте? И чтобы она смотрела на cite_serv/master?
Сейчас использую такой костыль:
Удаляю в клонированном проекте папку cite
Дальше вытягиваю подпроект в каталог cite вышеописаной командой
git read-tree --prefix=cite/ -u cite_project
При таком подходе теряются изменения, которые были внесены в cite в основном проекте, но ещё не были отправлены в репозиторий подпроекта.