258 votes

Git diff indique que le sous-projet est sale

Je viens de lancer un git diff, et j'obtiens le résultat suivant pour l'ensemble de mes quelque 10 sous-modules

diff --git a/.vim/bundle/bufexplorer b/.vim/bundle/bufexplorer
--- a/.vim/bundle/bufexplorer
+++ b/.vim/bundle/bufexplorer
@@ -1 +1 @@
-Subproject commit 8c75e65b647238febd0257658b150f717a136359
+Subproject commit 8c75e65b647238febd0257658b150f717a136359-dirty

Qu'est-ce que cela signifie ? Comment puis-je le réparer ?

12voto

JustABit Points 175
git submodule foreach --recursive git checkout .

Cela n'a pas fonctionné pour moi mais m'a donné une liste de fichiers (dans mon cas un seul) qui avaient été modifiés dans le sous-module (sans que j'y fasse quoi que ce soit).

J'ai donc pu me rendre dans le sous-module et git status m'a montré que mon HEAD était détaché -> git checkout master, git status pour voir à nouveau le fichier modifié, git checkout >filename<, git pull et tout va bien à nouveau.

12voto

Szymon Wygnański Points 2238

J'ai fini par supprimer le répertoire du submodule et l'initialiser à nouveau

cd my-submodule
git push
cd ../
rm -rf my-submodule
git submodule init
git submodule update

7voto

sboye Points 109

Un sous-module peut être marqué comme sale si les paramètres du mode fichier sont activés et que vous avez modifié les permissions de fichiers dans le sous-arbre du sous-module.

Pour désactiver filemode dans un sous-module, vous pouvez éditer /.git/modules/path/to/your/submodule/config et ajouter

[core]
  filemode = false

Si vous voulez ignorer tous les états sales, vous pouvez soit mettre ignore = dirty la propriété dans /.gitmodules mais je pense qu'il est préférable de ne désactiver que le filemode.

0 votes

Merci pour l'indication que les changements de mode de fichier peuvent également provoquer ce comportement, mais le mode de fichier n'est-il généralement pas souhaitable dans les sous-modules ?

1voto

Adam Westbrook Points 595

Dans mon cas, je n'étais pas sûr de ce qui avait causé ce problème, mais je savais que je voulais simplement que les submodules soient réinitialisés à leur dernier commit distant et que cela soit terminé. Pour cela, j'ai dû combiner les réponses de plusieurs questions différentes ici :

git submodule update --recursive --remote --init

Sources :

Comment rétablir mes modifications dans un sous-module git ?

Un moyen simple de récupérer la dernière version de tous les submodules git

1voto

nymphii Points 25

Avez-vous les permissions adéquates sur votre repo' ?

Ma solution n'était pas liée à git mais je voyais les mêmes messages d'erreur, et sale l'état des sous-modules.

La cause première était des fichiers dans le fichier .git Le dossier était détenu par root donc git n'avait pas d'accès en écriture, donc git n'a pas pu modifier le sale l'état des sous-modules lorsqu'ils sont exécutés en tant que mon utilisateur.

Avez-vous le même problème ?

À partir du dossier racine de votre référentiel, utilisez find pour lister les fichiers appartenant à Root [optionnel].

find .git -user root

Solution [Linux]

Changez tous les fichiers dans le .git pour avoir vous en tant que propriétaire

sudo chown -R $USER:$USER .git

# alternatively, only the files listed in the above command...
sudo find .git -user root -exec chown $USER:$USER {} +

Comment cela est-il arrivé ?

Dans mon cas, j'ai construit des bibliothèques dans des sous-modules à partir d'un conteneur Docker, le démon Docker s'exécute traditionnellement en tant que root Les fichiers créés tombent donc dans la catégorie root:root propriété.

Mon utilisateur a les privilèges de Root par procuration à travers ce service, donc même si je n'ai pas sudo quoi que ce soit, mon dépôt git avait toujours des changements appartenant à root .

J'espère que ça aidera quelqu'un, sortez d'ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X