git ignore exception


326

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?


8
doublon possible des exceptions dans .gitignore
— wallyk

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.
— Kay V

Réponses:


447

Utilisation:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

De gitignore :

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.


22
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

!/js/jquery

44
C'est très important. Je vous remercie!
— VisioN du

3
Cependant, il semble que vous ne pouvez pas ajouter de dossiers imbriqués, par exemple !/js/jquery/xyzlib, ne sera pas ignoré ...
— Ignorant

2
Comme le dit @Ignorant, le dossier que vous "sauf" de la règle ignorer, doit être au même endroit que le "*"
— The Red Pea

3
donc /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? C'est une façon plutôt drôle de le faire ...
— Imperishable Night

tu m'as vraiment aidé.
— Loyea

55

Vous pouvez simplement git add -f path/to/foo.dll.

.gitignore ignore uniquement les fichiers pour le suivi habituel et des trucs comme git add .


4
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


15

Ajoutez juste !avant une règle d'exclusion.

Selon la page de manuel de gitignore :

Les motifs ont le format suivant:

...

  • 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.


4

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

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

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

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

à partir d'une fenêtre Git Bash. Cela a renvoyé le [Bbin]/modèle.


2

La solution dépend de la relation entre la règle git ignore et la règle d'exception:

  1. Fichiers / Fichiers au même niveau: utilisez la solution @Skilldrick .
  2. Dossiers / Sous-dossiers: utilisez la solution @Matiss Jurgelis .
  3. Fichiers / Fichiers à différents niveaux ou Fichiers / Sous-dossiers: vous pouvez le faire:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

1

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 ...".

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt


1
est-ce que cela fonctionne pour quelqu'un? ne semble pas fonctionner pour moi.
— Ankur
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.