Ich hatte ein ähnliches Problem, hatte mich aber mit GUI-Tools in eine Ecke gemalt.
Ich hatte ein Teilprojekt mit ein paar Dateien, die ich bisher nur kopiert hatte, anstatt in ihr eigenes Git-Repo einzuchecken. Ich habe ein Repo im Unterordner erstellt, konnte mich gut verpflichten, pushen usw. Aber im übergeordneten Repo wurde der Unterordner nicht als Submodul behandelt, und seine Dateien wurden immer noch vom übergeordneten Repo verfolgt - nicht gut.
Um aus diesem Chaos herauszukommen, musste ich Git anweisen, den Unterordner nicht mehr zu verfolgen (ohne die Dateien zu löschen):
proj> git rm -r --cached ./ui/jslib
Dann musste ich sagen, dass es dort ein Submodul gibt (was Sie nicht tun können, wenn irgendetwas dort gerade von git verfolgt wird):
proj> git submodule add ./ui/jslib
Aktualisieren
Der ideale Weg, dies zu handhaben, umfasst ein paar weitere Schritte. Im Idealfall wird das vorhandene Repo in ein eigenes Verzeichnis verschoben, das frei von übergeordneten Git-Modulen ist, festgeschrieben und gepusht und dann als Submodul wie folgt hinzugefügt:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
Dadurch wird das Git-Repo als Submodul geklont. Dies umfasst die Standardschritte zum Klonen, aber auch einige andere undurchsichtigere Konfigurationsschritte, die Git in Ihrem Namen ausführt, damit dieses Submodul funktioniert. Der wichtigste Unterschied besteht darin, dass dort anstelle eines .git-Verzeichnisses eine einfache .git-Datei abgelegt wird, die einen Pfadverweis darauf enthält, wo sich das echte git-Verzeichnis befindet - im Allgemeinen im Stammverzeichnis des übergeordneten Projekts .git / modules / jslib.
Wenn Sie die Dinge nicht so machen, funktionieren sie gut für Sie, aber sobald Sie die Eltern verpflichten und pushen und ein anderer Entwickler diese Eltern zieht, haben Sie ihnen das Leben viel schwerer gemacht. Es wird für sie sehr schwierig sein, die Struktur auf Ihrem Computer zu replizieren, solange Sie ein vollständiges .git-Verzeichnis in einem Unterordner eines Verzeichnisses haben, das sein eigenes .git-Verzeichnis enthält.
Also, verschieben, drücken, Submodul hinzufügen, ist die sauberste Option.