Le sous-module Git affiche de nouvelles commits, le statut de sous-module ne dit rien à commettre

Dans un référentiel git, j'ai configuré mon file .gitmodules pour referencer un référentiel github:

[submodule "src/repo"] path = src/repo url = repourl 

quand je «git statut» sur ce repo, il montre:

 On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: src/repo (new commits) 

Si je cd dans src / repo et git status sur repo, il est dit qu'il n'y a rien à commettre.

Pourquoi mon repository git de haut niveau se plaint-il?

C'est parce que les loggings Git qui commettent (pas une twig ou une label, exactement un commit représenté dans le hachage SHA-1) doivent être vérifiés pour chaque sous-module. Si vous modifiez quelque chose dans le sous-module dir, Git le détectera et vous invitera à valider ces changements dans le repoisitory de niveau supérieur.

Exécutez git diff dans le référentiel de niveau supérieur pour montrer ce qui a réellement changé Git pense. Si vous avez déjà effectué certains commit dans votre sous-module (donc "clean" dans le sous-module), il signale le changement de hachage du sous-module.

 $ git diff diff --git a/src/repo b/src/repo index b0c86e2..a893d84 160000 --- a/src/repo +++ b/src/repo @@ -1 +1 @@ -Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea +Subproject commit a893d84d323cf411eadf19569d90779610b10280 

Sinon, il affiche -dirty hash change que vous ne pouvez pas mettre en scène ou commettre dans le référentiel de niveau supérieur. git status prétend également que le sous-module a un contenu non suivi / modifié.

 $ git diff diff --git a/src/repo b/src/repo --- a/src/repo +++ b/src/repo @@ -1 +1 @@ -Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea +Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea-dirty $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) (commit or discard the untracked or modified content in submodules) modified: src/repo (untracked content) no changes added to commit (use "git add" and/or "git commit -a") 

Pour mettre à jour les loggings de validation qui doivent être extraits pour le sous-module, vous devez giter le sous-module en plus de valider les modifications dans le sous-module:

 git add src/repo 

Je me suis heurtée à la même class de problème et j'ai pu utiliser la solution proposée par @AugustinAmenabar dans la section des commentaires de la réponse acceptée. Ma configuration était un peu plus complexe, j'ai donc ajouté le drapeau --recursive pour mettre toutes les dependencies à jour.

git submodule update src/repo --recursive