Comment se débarrasser de Git submodules statut non suivi?

Je n'arrive pas à me débarrasser du contenu inexistant dans les sous-modules de Git. git status donne:

# 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:   bundle/snipmate (untracked content)
#    modified:   bundle/surround (untracked content)
#    modified:   bundle/trailing-whitespace (untracked content)
#    modified:   bundle/zencoding (untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")

L'ajout du paramètre --ignore-submodules cache ces messages; mais je me demande s'il y a un moyen de se débarrasser de cette saleté d'une manière plus appropriée, plus proche du cœur.

113
demandé sur Peter Mortensen 2011-02-26 15:02:18

8 réponses

depuis les rapports de situation git contenu non suivi, la véritable façon d'avoir un statut propre serait d'aller dans chacun de ces sous-modules et:

  • ajouter et valider le contenu sans traces,
  • ou faire référence au contenu non suivi dans un .gitignore propre à chaque module.
  • ou vous pouvez ajouter le même contenu ignoré au sous-module .git/info/exclude , comme peci1 rapports dans les commentaires .
  • ou d'ajouter sale à la sous-module de spécification, comme mentionné dans ezraspectre 's réponse (upvoted).

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

les modèles qu'un utilisateur veut que Git ignore dans toutes les situations (par exemple, les fichiers de sauvegarde ou 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 ~/.gitconfig de l'utilisateur . Sa valeur par défaut est $XDG_CONFIG_HOME/git/ignore . Si $XDG_CONFIG_HOME est non réglé ou vide, $HOME/.config/git/ignore est utilisé à la place.

70
répondu VonC 2018-01-26 00:12:17

j'ai trouvé ce post de blog pour travailler dans l'ensemble. 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
120
répondu ezraspectre 2018-01-26 00:10:56

vous pouvez également aller à chaque dir submodule et agir comme un git séparé. Par exemple:

cd my/project/submodule
git status

... / obtient 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 sous-module repo avec

git submodule update

après tout

9
répondu Ricardo Martins 2012-06-04 21:00:35

ce serait dû au detached HEAD dans votre branche submodule. Allez dans votre chemin submodule (ex: ./bundle/snipmate ), puis git checkout master .

j'espère que cela aidera :)

2
répondu Browny Lin 2013-11-03 05:14:44

j'ai coincé sur cette question hier, dans un projet qui avait près de 12 submodules.

git status affichait 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 suivi, j'ai dû supprimer les fichiers non suivis de tous les sous-modules (tous étaient des fichiers *.pyc , *.pyo générés par python) en utilisant un .gitignore .

pour résoudre l'autre, j'ai dû lancer git submodule update qui a mis à jour chacun des submodules.

1
répondu mu 無 2015-02-11 18:38:48

dans ma situation, je clone des modules comme point de départ pour un nouveau module dans mon environnement ZF2. Ce que cela fait est de mettre les siens .dossier git dans le répertoire.

la Solution dans ce cas est de supprimer le .git dossier (vous aurez probablement besoin d'afficher les fichiers cachés pour l'afficher).

0
répondu HappyCoder 2015-08-05 10:21:28

cela a très bien fonctionné pour moi:

git update-index --skip-worktree

si cela ne fonctionne pas avec le chemin d'accès, essayez le nom du fichier. Laissez-moi savoir si cela a fonctionné pour vous aussi.

Bye!

0
répondu DarkCrazy 2018-09-07 15:08:11

S'il s'agit d'un problème temporaire, vous pouvez entrer dans le dossier submodule et exécuter git reset HEAD --hard mais vous perdrez tous vos changements à l'intérieur du sous-module.

-1
répondu daigo 2014-12-09 15:16:59