Comment se débarrasser de l’état des traces des sous-modules Git?

Je n’arrive pas à me débarrasser du contenu non suivi des sous-modules de Git. Le git status cours d’exécution donne:

 # Sur le maître de la twig
 # Modifications non planifiées pour commit:
 # (utilisez "git add ..." pour mettre à jour ce qui sera commis)
 # (utilisez "git checkout - ..." pour ignorer les modifications dans le répertoire de travail)
 # (commettre ou ignorer le contenu non suivi ou modifié dans les sous-modules)
 #
 # modifié: bundle / snipmate (contenu non suivi)
 # modifié: bundle / surround (contenu non suivi)
 # modifié: bundle / trailing-whites (contenu non suivi)
 # modifié: bundle / zencoding (contenu non suivi)
 #
 aucun changement ajouté à la validation (utilisez "git add" et / ou "git commit -a")

L’ajout du paramètre --ignore-submodules masque ces messages; mais je me demande s’il existe un moyen de se débarrasser de cette saleté de manière plus appropriée.

Étant donné que le statut git indique un contenu non suivi, le véritable moyen d’avoir un statut propre serait d’entrer dans chacun de ces sous-modules et:

  • append et commettre le contenu non suivi,
  • ou référencer les contenus non suivis dans un .gitignore spécifique à chaque module.
  • ou vous pouvez append le même contenu ignoré au .git/info/exclude du sous-module, comme peci1 le signale dans les commentaires .
  • ou append de la saleté à la spécification du sous-module, comme mentionné dans la réponse d’ ezraspectre.

     git config -f .gitmodules submodule..ignore untracked 
  • ou ajoutez un fichier global .gitignore (souvent ~/.gitignore-global ). Comme par exemple .DS_Store ou dans mon cas Carthage/Build comme rapporté par Marián Černý dans les commentaires . Voir la page de manuel de .gitginore :

Les modèles qu’un utilisateur souhaite que Git ignore dans toutes les situations (par exemple, sauvegarde ou fichiers temporaires générés par l’éditeur de son choix) vont généralement dans un fichier spécifié par core.excludesFile dans le fichier ~/.gitconfig . Sa valeur par défaut est $XDG_CONFIG_HOME/git/ignore . Si $XDG_CONFIG_HOME n’est pas défini ou vide, $HOME/.config/git/ignore est utilisé à la place.

J’ai trouvé cet article de blog pour travailler globalement. En ajoutant l’option ignore = dirty à chacune des entrées du fichier .gitmodules .

 [submodule "zen-coding-gedit3"] path = zen-coding-gedit3 url = git://github.com/leafac/zen-coding-gedit3.git ignore = dirty 

Vous pouvez également aller dans chaque sous-module dir et agir comme un git séparé. Par exemple:

 cd my/project/submodule git status 

… / récupère la liste des fichiers modifiés /

 git add . //to add all of them to commit into submodule git commit -m "message to your submodule repo" 

vous pouvez également mettre à jour votre repo de sous-module distant avec

 git submodule update 

après tout

Ce serait dû à la detached HEAD dans votre twig de sous-module. Allez dans votre chemin de sous-module (ex: ./bundle/snipmate ), puis git checkout master .

J’espère que cela aidera 🙂

Je me suis retrouvé bloqué sur cette question hier, dans un projet qui comptait près de 12 sous-modules.

git status montrait la sortie.

 # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # (commit or discard the untracked or modified content in submodules) # # modified: proj1 (untracked content) # modified: proj1 (modified content, untracked content) # ... 

Pour résoudre l’erreur de contenu non suivie, j’ai dû supprimer les fichiers non suivis de tous les sous-modules (tous étaient des *.pyc , *.pyo générés par python) à l’aide d’un .gitignore .

Pour résoudre l’autre, j’ai dû exécuter la git submodule update jour chacun des sous-modules.

Dans ma situation, je clone des modules comme sharepoint départ pour un nouveau module dans mon environnement ZF2. Qu’est-ce que cela fait est de mettre son propre dossier .git dans le répertoire.

La solution dans ce cas consiste à supprimer le dossier .git (vous devrez probablement afficher les fichiers cachés pour le voir).

S’il s’agit d’un problème temporaire, vous pouvez aller dans le dossier des sous-modules et lancer git reset HEAD --hard mais vous perdrez toutes vos modifications à l’intérieur du sous-module.