У меня была похожая проблема, но я загнал себя в угол с помощью инструментов GUI.
У меня был подпроект с несколькими файлами в нем, который я до сих пор просто копировал вместо того, чтобы регистрироваться в их собственном git-репо. Я создал репо в подпапке, был в состоянии совершить, подтолкнуть и т. Д. Просто отлично. Но в родительском репо подпапка не рассматривалась как подмодуль, а ее файлы все еще отслеживались родительским репо - ничего хорошего.
Чтобы выйти из этого беспорядка, я должен был сказать Git прекратить отслеживать подпапку (без удаления файлов):
proj> git rm -r --cached ./ui/jslib
Затем я должен был сказать, что там был субмодуль (что вы не можете сделать, если что-то там отслеживается git):
proj> git submodule add ./ui/jslib
Обновить
Идеальный способ справиться с этим - еще пара шагов. В идеале, существующее хранилище перемещается в собственный каталог, без каких-либо родительских модулей git, фиксируется и отправляется, а затем добавляется в виде подмодуля, например:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
Это приведет к клонированию репозитория git в качестве подмодуля - который включает в себя стандартные шаги клонирования, а также несколько других более непонятных шагов конфигурации, которые git предпринимает от вашего имени, чтобы заставить этот подмодуль работать. Самое важное отличие состоит в том, что он помещает туда простой файл .git, а не каталог .git, который содержит ссылку на путь, по которому живет настоящий git dir - обычно в корневом каталоге родительского проекта .git / modules / jslib.
Если вы не сделаете так, они будут работать нормально для вас, но как только вы сделаете коммит и нажмете родителя, а другой разработчик потянет этого родителя, вы просто усложнили им жизнь. Им будет очень трудно воспроизвести структуру, имеющуюся на вашем компьютере, если у вас есть полный каталог .git в подпапке каталога, который содержит собственный каталог .git.
Итак, переместить, нажать, добавить подмодуль git, это самый чистый вариант.