Miałem podobny problem, ale zamalowałem się w kącie za pomocą narzędzi GUI.
Miałem podprojekt z kilkoma plikami, które do tej pory kopiowałem, zamiast sprawdzać własne repozytorium git. Utworzyłem repozytorium w podfolderze, byłem w stanie zatwierdzić, wypchnąć itp. W porządku. Ale w repozytorium nadrzędnym podfolder nie był traktowany jako podmoduł, a jego pliki były nadal śledzone przez repozytorium nadrzędne - to nic dobrego.
Aby wyjść z tego bałaganu, musiałem powiedzieć Gitowi, aby przestał śledzić podfolder (bez usuwania plików):
proj> git rm -r --cached ./ui/jslib
Potem musiałem powiedzieć, że jest tam submoduł (którego nie możesz zrobić, jeśli cokolwiek jest obecnie śledzone przez git):
proj> git submodule add ./ui/jslib
Aktualizacja
Idealny sposób poradzenia sobie z tym wymaga jeszcze kilku kroków. Najlepiej byłoby, gdyby istniejące repo zostało przeniesione do własnego katalogu, wolnego od nadrzędnych modułów git, zatwierdzone i wypchnięte, a następnie dodane jako podmoduł:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
Spowoduje to sklonowanie repozytorium git jako submodułu - co obejmuje standardowe kroki klonowania, ale także kilka innych, bardziej niejasnych kroków konfiguracji, które git podejmuje w twoim imieniu, aby uruchomić ten podmoduł. Najważniejszą różnicą jest to, że umieszcza tam prosty plik .git zamiast katalogu .git, który zawiera ścieżkę do miejsca, w którym mieszka prawdziwy katalog git - zazwyczaj w katalogu głównym projektu nadrzędnego .git / modules / jslib.
Jeśli nie zrobisz tego w ten sposób, zadziałają dla ciebie dobrze, ale gdy tylko zaangażujesz i popchniesz rodzica, a inny deweloper pójdzie pociągnąć tego rodzica, po prostu utrudniłeś im życie. Bardzo trudno będzie im powielić strukturę, którą masz na swoim komputerze, o ile masz pełny katalog .git w podfolderze katalogu zawierającego własny katalog .git.
Podmoduł move, push, git add jest najczystszą opcją.