J'ai un fichier gitignore qui fait que git ignore les *.dllfichiers, et c'est en fait le comportement que je veux. Cependant, si je veux une exception (c'est-à-dire pouvoir s'engager foo.dll), comment puis-je y parvenir?
fwiw, le grand-père des réponses en double sur ce sujet - une que vous devriez regarder - serait probablement Faire ignorer tout à .gitignore sauf quelques fichiers - une activité très régulière et plusieurs bonnes réponses. Je suis particulièrement fan de cette réponse , qui semble claire et approfondie.
Un préfixe optionnel! ce qui annule le motif; tout fichier correspondant exclu par un modèle précédent sera à nouveau inclus. Si un modèle annulé correspond, cela remplacera les sources de modèles de priorité inférieure.
Voir aussi le formulaire de réponse @Matiss Jurgelis - c'est un ajout important
Dan
7
Puis-je ajouter l'exception au gitignore de mon projet et non à mon gitignore global? Par exemple, si je voulais inclure toutes les DLL dans un répertoire? Mon gitignore_global en contient *.dll, et le gitignore de mon projet en a !Libs/*.dllmais cela ne semble pas fonctionner.
Joel Kinzel
1
@jkinz, vous devriez essayer !Libs/**/*.dll.
Rosberg Linhares
@RosbergLinhares Ou !**/Libs/*.dll, selon la structure des dossiers.
JAB
2
Merci, mais sur un Mac, l'ajout du commentaire sur la même ligne que !foo.dllla commande a invalidé la commande. Si j'ajoute le commentaire sur une ligne séparée, cela fonctionne.
Giacomo
261
Git ignore les dossiers si vous écrivez:
/js
mais il ne peut pas ajouter d'exceptions si vous le faites:
!/js/jqueryou !/js/jquery/ou!/js/jquery/*
Vous devez écrire:
/js/*
et seulement alors vous pouvez exclure des sous-dossiers comme celui-ci
Juste pour plus de détails, le -fgit indique de forcer l'ajout de ce fichier dans le référentiel car il pourrait l'ignorer en premier à cause de votre.gitignore
RPDeshaies
Ce qui est génial si vous n'avez qu'un seul fichier, moins utile si vous avez besoin d'un modèle
Liam
19
Pour exclure tout dans un répertoire, mais certains sous-répertoires, procédez comme suit:
Un préfixe optionnel! ce qui annule le motif; tout fichier correspondant exclu par un modèle précédent sera à nouveau inclus. Si un modèle annulé correspond, cela remplacera les sources de modèles de priorité inférieure.
Si vous travaillez avec Visual Studio et que votre fichier .dll se trouve dans un bindossier, vous devrez ajouter une exception pour le dossier bin particulier lui-même, avant de pouvoir ajouter l'exception pour le fichier .dll. Par exemple
Cela est dû au fait que le .gitignorefichier Visual Studio par défaut inclut un modèle d'ignorance pour[Bbin]/
Ce modèle zappe tous les dossiers bin (et par conséquent leur contenu), ce qui rend toute tentative d'inclure le contenu redondant (car le dossier lui-même est déjà ignoré).
J'ai pu trouver pourquoi mon fichier n'était pas exclu en exécutant
Depuis Git 2.7.0, Git prendra en compte les exceptions. D'après les notes de version officielles:
Autoriser un "! / Abc / def" ultérieur à remplacer un "/ abc" précédent qui apparaît dans le même fichier .gitignore pour faciliter l'expression "tout dans le répertoire / abc est ignoré, à l'exception de ...".
Réponses:
Utilisation:
De gitignore :
la source
*.dll
, et le gitignore de mon projet en a!Libs/*.dll
mais cela ne semble pas fonctionner.!Libs/**/*.dll
.!**/Libs/*.dll
, selon la structure des dossiers.!foo.dll
la commande a invalidé la commande. Si j'ajoute le commentaire sur une ligne séparée, cela fonctionne.Git ignore les dossiers si vous écrivez:
mais il ne peut pas ajouter d'exceptions si vous le faites:
!/js/jquery
ou!/js/jquery/
ou!/js/jquery/*
Vous devez écrire:
et seulement alors vous pouvez exclure des sous-dossiers comme celui-ci
la source
!/js/jquery/xyzlib
, ne sera pas ignoré .../js/*
,!/js/jquery
,/js/jquery/*
,!/js/jquery/xyzlib
? C'est une façon plutôt drôle de le faire ...Vous pouvez simplement
git add -f path/to/foo.dll
..gitignore
ignore uniquement les fichiers pour le suivi habituel et des trucs commegit add .
la source
-f
git indique de forcer l'ajout de ce fichier dans le référentiel car il pourrait l'ignorer en premier à cause de votre.gitignore
Pour exclure tout dans un répertoire, mais certains sous-répertoires, procédez comme suit:
Source: https://gist.github.com/444295
la source
Ajoutez juste
!
avant une règle d'exclusion.Selon la page de manuel de gitignore :
la source
!foo.dll
dans .gitignore, ou (à chaque fois!)git add -f foo.dll
la source
Si vous travaillez avec Visual Studio et que votre fichier .dll se trouve dans un
bin
dossier, vous devrez ajouter une exception pour le dossier bin particulier lui-même, avant de pouvoir ajouter l'exception pour le fichier .dll. Par exempleCela est dû au fait que le
.gitignore
fichier Visual Studio par défaut inclut un modèle d'ignorance pour[Bbin]/
Ce modèle zappe tous les dossiers bin (et par conséquent leur contenu), ce qui rend toute tentative d'inclure le contenu redondant (car le dossier lui-même est déjà ignoré).
J'ai pu trouver pourquoi mon fichier n'était pas exclu en exécutant
à partir d'une fenêtre Git Bash. Cela a renvoyé le
[Bbin]/
modèle.la source
La solution dépend de la relation entre la règle git ignore et la règle d'exception:
Fichiers / Fichiers à différents niveaux ou Fichiers / Sous-dossiers: vous pouvez le faire:
la source
Depuis Git 2.7.0, Git prendra en compte les exceptions. D'après les notes de version officielles:
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt
la source