2017-07-10 2 views
0

Dans mon repo git, j'ai importé un autre projet en tant que sous-module. Jusqu'ici tout va bien. Cependant, les mainteneurs du projet importé sont un peu bâclés à propos de leurs fichiers .gitignore. Ainsi, après avoir construit le projet importé, git status (dans le sous-module) répertorie une tonne de fichiers non suivis. Et par conséquent, git status dans mon propre projet dit:Git: Ignorer les fichiers non suivis dans le sous-module

modified: <submodule> (untracked content) 

Ma question est: Est-il possible de dire git d'ignorer ces fichiers sans fixer les trassez .gitignore en amont des fichiers?


Je suis pleinement conscient que la réponse probable est « non », et je l'ai vu this SO question qui me dit qu'il est impossible d'ignorer les changements aux fichiers chenillés. Ce qui me semble logique, indépendamment de la question de savoir si le fichier est dans un sous-module ou non. Cependant, je ne suis préoccupé par ignorer fichiers non traçés, donc je pense qu'il y a une légère chance qu'il y ait une bonne solution pour ma question.

Répondre

4

MISE À JOUR - Dans les commentaires, la question a été soulevée: les parents peuvent-ils répartir automatiquement ces règles ignorées. Si vous utilisez l'approche originale que je suggère, la réponse est "non" au meilleur de ma connaissance. Cependant, dans certaines circonstances, il y a une façon de le faire (de la réponse de Роман Яковский) ...


La manière la plus flexible serait d'ajouter à ignorer les règles gitdir/informations du sous-module/fichier d'exclusion.

cd path/to/parent/repo/.git/modules/module-name/info 
vi exclude 

ajouter le modèle tel qu'il apparaît dans le fichier .gitignore du repo sous-module.

Vous pouvez confirmer où gitdir est par

cat path/to/parent/repo/submoduledir/.git 

de la sous-module Cela vous permet de spécifier exactement ce qui doit être ignoré; mais l'inconvénient de cette approche est que gitdir/info/exlcude n'est pas propagé par push ou fetch, donc chaque repo doit être configuré individuellement. Si vous n'avez pas besoin d'être si sélectif sur les fichiers qui sont ignorés - par exemple, si vous pouvez dire "les modifications de worktrows dans le sous-module doivent être ignorées" - alors vous pouvez spécifier une règle d'ignorer dans le module définition (.gitmodules), qui fait bien sûr partie du travail engagé. Les règles d'exclusion possibles sont expliquées dans la documentation de gitmodules: https://git-scm.com/docs/gitmodules

+0

Génial, ça me rendra heureux. Cependant, y a-t-il aussi un moyen de les exclure du repo englobant afin que mes collègues travaillant sur le même repo soient également heureux? – cmaster

+1

Je ne pense pas. Les règles qui "expédient" avec le repo doivent être dans les fichiers '.gitignore', et les fichiers AFAIK' .gitignore' dans le repo parent ne peuvent pas définir de règles pour les chemins qui appartiennent au sous-module. Donc, si la réparation du fichier '.gitignore' du sous-module n'est pas une option, alors chaque clone du dépôt parent doit probablement être configuré manuellement –

2

Dans .gitmodules, ajoutez ignore = all au sous-module.
Il plus d'options pour ignore, vous pouvez les lire en git help config, recherche submodule.<name>.ignore.