web-dev-qa-db-fra.com

Comment se débarrasser du statut non suivi des sous-modules Git?

Je n'arrive pas à me débarrasser du contenu non suivi dans les sous-modules de Git. git status en cours d'exécution:

 # Sur le maître de branche 
 # Changements non planifiés pour la validation: 
 # (Utilisez "git add ..." pour mettre à jour ce qui sera commis). .__ (# utilisez "git checkout - .. . "pour ignorer les modifications du répertoire de travail) 
 # (valider ou ignorer le contenu non suivi ou modifié dans les sous-modules). Surround (contenu non suivi) 
 # modifié: bundle/espace de fin (contenu non suivi) 
 # modified: bundle/zencoding (contenu non suivi) 
 # 
 aucune modification n'a été ajoutée à commit (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é d’une manière plus appropriée et plus appropriée.

127
Tomer Lichtash

Étant donné que l'état git signale un contenu non suivi, le moyen le plus approprié consiste à accéder à chacun de ces sous-modules et à:

  • ajouter et valider les contenus non suivis,
  • ou référencez le contenu non suivi dans un .gitignore spécifique à chaque module. 
  • ou vous pouvez ajouter le même contenu ignoré au .git/info/exclude du sous-module, sous la forme peci1 rapports dans les commentaires .
  • ou ajoutez un élément sale à la spécification de sous-module, comme indiqué dans ezraspectre 's réponse (voté).

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

Les modèles qu’un utilisateur veut que Git ignore dans toutes les situations (par exemple, des 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 n'est pas défini ou est vide, c'est $HOME/.config/git/ignore qui est utilisé.

78
VonC

J'ai trouvé ce blog post 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
128
ezraspectre

Vous pouvez également aller à chaque répertoire de sous-module et agir en tant que git séparé .

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 dépôt de sous-module distant avec

git submodule update

après tout

10
Ricardo Martins

Cela serait dû au detached HEAD dans votre branche de sous-module. Allez dans votre chemin de sous-module (ex: ./bundle/snipmate), puis git checkout master

J'espère que ça va aider :)

3
Browny Lin

Hier, je me suis retrouvé coincé dans cette affaire, dans un projet comportant 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 suivi, je devais supprimer les fichiers non suivis de tous les sous-modules (tous étaient des fichiers *.pyc, *.pyo générés par Python) à l'aide d'un .gitignore.

Pour résoudre l'autre problème, j'ai dû exécuter git submodule update qui a mis à jour chacun des sous-modules.

1
mu 無

Cela a bien fonctionné pour moi:

git update-index --skip-worktree 

Si cela ne fonctionne pas avec le nom du chemin, essayez le nom de fichier . Laissez-moi savoir si cela a fonctionné pour vous aussi.

Au revoir!

0
DarkCrazy

Je préfère utiliser SourceTree , la solution pour moi a donc été d'ouvrir le dépôt de sous-module dans SourceTree, qui affiche la liste de tous les fichiers non suivis. Je les ai ensuite tous sélectionnés en groupe puis utilisé "Supprimer".

J'ai pu le faire car je savais que tous les fichiers non suivis n'étaient pas réellement nécessaires.

0
Glenn Lawrence

Cela se produit probablement lorsque vous avez un autre [dossier caché] .git dans le dossier en question.

modifié: ./../ .. (contenu modifié, contenu non suivi)

assurez-vous que votre sous-répertoire ne contient pas ce dossier .git.

Si tel est le cas, le problème peut être résolu en supprimant manuellement le dossier .git du sous-répertoire.

0
Subrat Kumar Palhar

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 son propre dossier .git dans le répertoire. 

Dans ce cas, la solution consiste à supprimer le dossier .git (vous devrez probablement afficher les fichiers cachés pour le visualiser).

0
HappyCoder