Eu tive um problema semelhante, mas me pintei de canto com as ferramentas da GUI.
Eu tinha um subprojeto com alguns arquivos que até agora copiava em vez de fazer o check-in no seu próprio repositório git. Eu criei um repositório na subpasta, fui capaz de confirmar, enviar, etc, muito bem. Mas no repositório pai, a subpasta não foi tratada como um submódulo e seus arquivos ainda estavam sendo rastreados pelo repositório pai - nada bom.
Para sair dessa bagunça, eu precisava dizer ao Git para parar de rastrear a subpasta (sem excluir os arquivos):
proj> git rm -r --cached ./ui/jslib
Então eu tive que dizer que havia um submódulo lá (o que você não pode fazer se algo estiver sendo rastreado pelo git):
proj> git submodule add ./ui/jslib
Atualizar
A maneira ideal de lidar com isso envolve mais algumas etapas. Idealmente, o repositório existente é movido para seu próprio diretório, livre de qualquer módulo pai git, confirmado e enviado por push e, em seguida, adicionado como um submódulo como:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
Isso clonará o repositório git como um submódulo - que envolve as etapas de clonagem padrão, mas também várias outras etapas de configuração mais obscuras que o git executa em seu nome para fazer com que o submódulo funcione. A diferença mais importante é que ele coloca um arquivo .git simples lá, em vez de um diretório .git, que contém uma referência de caminho para onde o diretório git real vive - geralmente na raiz do projeto pai .git / modules / jslib.
Se você não fizer as coisas dessa maneira, elas funcionarão bem para você, mas assim que você comprometer e pressionar os pais, e outro desenvolvedor for puxá-los, você apenas tornará a vida deles muito mais difícil. Será muito difícil para eles replicar a estrutura que você possui em sua máquina, desde que você tenha um diretório .git completo em uma subpasta de um diretório que contenha seu próprio diretório .git.
Portanto, mover, pressionar, git add submódulo, é a opção mais limpa.