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:
.gitignore
spécifique à chaque module. .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.