59 votes

Fichiers .gitignore ajoutés dans les sous-modules Git

Récemment, j'ai réorganisé mes fichiers de configuration utilisateur à vivre à l'intérieur d'un dépôt Git à l' ~/Dropbox/dotfiles et j'utilise l'agent pathogène à regrouper toutes les Vim addons à l'intérieur d' ~/Dropbox/dotfiles/home/.vim/bundle. Ces addons ont été ajoutés comme submodules.

Maintenant le problème c'est que quand je lance Vim, il génère automatiquement la documentation de tous les addons et les met à l'intérieur de chaque sous-module de répertoire. Cela ajoute sans traces de contenu pour les submodules, que je voudrais éviter.

ruby-1.8.7-p330@gs ~/Dropbox/dotfiles ‹master*› $ git st
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   home/.vim/bundle/fuzzyfinder (untracked content)
#   modified:   home/.vim/bundle/l9 (untracked content)
#   modified:   home/.vim/bundle/matchit (untracked content)
#   modified:   home/.vim/bundle/ruby (untracked content)
#   ...
no changes added to commit (use "git add" and/or "git commit -a")

J'ai essayé d'ajouter un .gitignore le fichier à la racine de mon dépôt Git d'ignorer tous doc des dossiers à l'intérieur de submodules, mais cela ne semble pas fonctionner:

home/.vim/bundle/**/doc

Ma question: est-il possible d'ignorer les fichiers et dossiers à l'intérieur submodules ou peut-être configurer Vim pour créer de la documentation dans un dossier en dehors du dépôt Git?

EDIT: comme Randy Morris l'a souligné, ce pourrait être un doublon de Générer des balises vers un autre emplacement par des agents pathogènes

74voto

VonC Points 414372

Vous devez ajouter .gitignore dans chacun de vos submodules.
Depuis dit submodules sont imbriquées comme des repo Git, ils prennent soin de leur propre ignorer les règles, et leur statut ne serait pas influencée par l' .gitignore de la société mère repo (comme expliqué ici).

Pour vim-réglage spécifique, comme Randy Morris mentionne, dans le commentaire, voir la DONC, la question de "la Génération des balises vers un autre emplacement par des agents pathogènes".


Remarque: comme Nick mentionne dans ce commentaires, et comme illustré par la réponse à "Générer des balises vers un autre emplacement par des agents pathogènes", une config comme:

[submodule "path/to/submodule"]
    path = path/to/submodule
    url = http://github.com/username/repo.git
    ignore = untracked  # <====

va travailler, et que le sous-module ignoré par git status.
Mais "ignore = untracked" signifie au moins Git1.7.2.


Remarque: nurettin mentionne dans les commentaires:

ignore = dirty l'ont fait pour moi

S'engager aee9c7d détails la différence entre untracked et dirty.

  • "dirty": Seules les différences de la validation enregistrée dans le superproject et les submodules HEAD seront considérés comme des modifications, toutes les modifications apportées à l'œuvre arbre de la sous-module sera ignoré.
    Lors de l'utilisation de cette valeur, le sous-module ne seront pas analysés pour les travaux de modifications apportées à l'arbre, conduisant à un gain de performances sur les gros submodules.

  • "untracked": Seulement sans traces de fichiers dans les submodules de travail de l'arbre sont ignorés, un changement de l' HEAD et/ou les fichiers modifiés dans le sous-module sera modifié.

8voto

Ben Challenor Points 1902

La recommandation de ignore = untracked VonC fonctionne, mais vous devez effectuer le changement pour chaque sous-module de ce type.

Si vous voulez résoudre le problème une fois pour toutes, vous pouvez configurer un modèle global gitignore sur chaque dépôt git, de git config --global core.excludesfile ~/.gitignore_global , puis ajoutez simplement doc/tags à $ HOME / .gitignore_global.

Voir https://help.github.com/articles/ignoring-files .

2voto

Jérôme Points 1150

La réponse de Ben est un bon début. Mais pour une telle règle d'ignorance spécifique, je n'aime pas le paramètre global.

Préférez la configuration locale pour chaque sous-module et un fichier ignoré centralisé dans le référentiel racine du sous-module:

 cd .vim/bundle
echo "doc/tags" > .gitignore_submodules
git submodule foreach git config --local core.excludesfile "../.gitignore_submodules"
 

-2voto

Mandeep Sandhu Points 41

Je pense que le problème fondamental ici est que vous essayez d'ignorer un "suivi" ce changement. .gitignore ignore seulement "sans traces" des changements du repo. Pour vérifier, vous pouvez modifier certains fichiers dans votre pension (qui a suivi) et également l'ajouter à vos .gitignore le fichier. Sur git status vous verrez que le fichier est toujours répertorié comme "modifiée". Votre sous-module pensions sont également considérés suivis par le principal de votre dépôt, donc il suffit de rajouter un gitignore à la mère pensions ne fonctionne pas. Comme othere suggéré, soit ajouter .gitignore règles de pensions ou si vous utilisez une récente version git, vous pouvez utiliser l' git status --ignore-submodules.

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