web-dev-qa-db-fra.com

git submodule init ne fait absolument rien

J'ai un étrange problème avec "git submodule init"

Lorsque j'ai ajouté les sous-modules à l'aide de "git submodule add url location", le clonage du référentiel s'est bien passé et tout s'est bien passé.

Lorsque j'ai repoussé toutes mes modifications dans le référentiel parent, ajouté les fichiers .gitmodules, etc. et cloné le référentiel, j'ai essayé d'initialiser tous les sous-modules en utilisant "git submodule init"

Et rien ne se passe :( Littéralement rien, pas de sortie, pas de fichiers supplémentaires, il n'essaie même pas de faire quoi que ce soit réellement.

Je me demande donc, qu'est-ce que j'ai fait de mal?

.gitmodules:

bash$ cat .gitmodules
[submodule "projects/subprojectA"]
    path = projects/subprojectA
    url = ssh://[email protected]/test/projectA.git

[submodule "projects/subprojectB"]
    path = projects/subprojectB
    url = ssh://[email protected]/test/projectB.git
16
Christopher Thomas

ok, j'ai compris ce que j'ai fait de mal.

Quand j'ai ajouté les sous-modules git, j'ai fait un statut git et cela m'a dit que trois choses avaient changé

.gitmodules
projects/subprojectA
projects/subprojectB

lorsque je poussais toutes mes modifications dans le référentiel, je ne voulais pas valider les sous-modules, car je pensais que cela ajouterait tous les fichiers que je viens de cloner, alors j'ai juste fait un git add .gitmodules et commis et poussé cela.

Mais c'est faux, vous devez faire un git commit et valider tout ce qu'il vous dit, puis quand vous faites cela, git enregistre ces chemins et quand vous clonez, cela fonctionnera.

mais si vous ne validez pas ces dossiers, il ne les enregistrera pas et ne les clonera pas lorsque vous clonerez le référentiel parent.

c'était donc mon erreur, j'ai mal compris que l'ajout de ces répertoires ajouterait tout le code des sous-modules au référentiel parent, j'ai essayé de contourner cela et cela a cessé de fonctionner.

il suffit donc d'ajouter vos sous-modules et de valider les résultats, tout fonctionnera très bien: D

Merci pour l'aide des protecteurs, peu importe!

24
Christopher Thomas

Les éléments suivants ont fonctionné pour moi dans le cas du sous-module googletest:

git submodule add --force https://github.com/google/googletest.git googletest

Vous devez donc ajouter manuellement un sous-module (notez le --force drapeau).

2
NutCracker

Utilisez le --recursive option lors du clonage. Cette option initialise tous les sous-modules répertoriés:

git clone --recursive

Dans un autre cas, si vous souhaitez initialiser des sous-modules d'un git que vous venez de cloner, vous pouvez utiliser

git submodule update --init --recursive
2
Kewin Dousse