web-dev-qa-db-fra.com

Le sous-module Git affiche de nouveaux validations, le statut du sous-module ne dit rien à valider

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

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

quand je 'git status' sur ce repo, ça 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 passe en src/repo et que git status sur repo, cela indique qu'il n'y a rien à valider.

Pourquoi mon référentiel git de premier niveau se plaint-il?

54
Catherine Holloway

C'est parce que les enregistrements Git qui valident (pas une branche ou une balise, exactement une validation représentée dans le hachage SHA-1) doivent être extraits pour chaque sous-module. Si vous modifiez quelque chose dans le répertoire du sous-module, Git le détectera et vous invitera à valider ces modifications dans le répertoire de niveau supérieur.

Courir git diff dans le référentiel de niveau supérieur pour montrer ce qui a réellement changé selon Git. Si vous avez déjà effectué quelques validations dans votre sous-module (donc "nettoyer" 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 montre -dirty changement de hachage que vous ne pouvez pas mettre en scène ou valider dans le référentiel de niveau supérieur. git status affirme é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 enregistrements de validation à extraire pour le sous-module, vous devez valider le sous-module en plus de valider les modifications dans le sous-module:

git add src/repo
44
yaegashi

Je viens de rencontrer cette même classe de problèmes et j'ai pu utiliser la solution proposée par @ AugustinAmenabar dans la section commentaires de la réponse acceptée. Ma configuration était un peu plus complexe, j'ai donc ajouté le --recursive flag pour mettre à jour toutes les dépendances.

git submodule update src/repo --recursive

27
Zak

Aucune des réponses ici ne résout mon problème.

Je documente/partage ici ce qui a fonctionné pour moi. En espérant que cela aide quelqu'un d'autre.

Au départ, mon sous-module était au commit A (au moment de l'ajout du sous-module au référentiel principal) , puis j'ai vérifié une branche (appelons-la new-submodule-branch) et y a validé B et C et l'a poussé vers la télécommande (github.com)

Postez ceci, mon référentiel principal a commencé à montrer

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   <submodule_name> (new commits)

Si, à partir de la racine du référentiel principal, j'ai exécuté git submodule update --remote --init --recursive, il a continué à rétablir le HEAD de mon sous-module à l'état détaché pour valider A

Alors j'ai défini la valeur de branche comme new-submodule-branch dans <MainRepo>/.gitmodules comme suit

[submodule "<submodule_name>"]
    path = <submodule_name>
    url = [email protected]:ProProgrammer/<submodule_name>.git
    branch = new-submodule-branch

poster ceci, quand j'ai couru git submodule update --remote --init --recursive, il ne retournerait plus HEAD à l'état détaché pour valider A de mon sous-module, mais il continuait de montrer l'ennuyeux)

    modified:   <submodule_name> (new commits)

Jusqu'à présent, je suivais l'officiel référence git pour les sous-modules , maintenant j'ai décidé de faire un peu plus de recherche sur Google, et je suis tombé sur un article intitulé Obtenir un sous-module git pour suivre une branche , cela dit clairement

Vous devez aller mettre à jour cette référence de validation de sous-module vers le dernier code de la branche distante pour éviter cela

Alors finalement, j'ai fait ce que j'essayais d'éviter:

git add <submodule_name>
git commit --amend --no-edit # I combined this with the previous commit where I added the 'branch' value in .gitmodules

Si vous voulez voir à quoi cela ressemble une fois poussé à distance (github.com dans mon cas), vous pouvez voir ce commit exact ici

0
Deep