web-dev-qa-db-fra.com

git ignore l'exception

J'ai un fichier gitignore qui fait que git ignore les fichiers *.dll, et c'est en fait le comportement que je souhaite. Cependant, si je veux une exception (c’est-à-dire pouvoir valider foo.dll), comment puis-je y parvenir?

283
roundcrisis

Utilisation:

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

De gitignore :

Un préfixe optionnel! qui nie le motif; tout fichier correspondant exclu par un modèle précédent sera à nouveau inclus. Si un motif négatif correspond, cela remplacera les sources de motifs de priorité inférieure.

400
Skilldrick

Git ignore les dossiers si vous écrivez:

/js

mais il ne peut pas ajouter d'exceptions si vous faites: !/js/jquery ou !/js/jquery/ ou !/js/jquery/*

Vous devez écrire:

/js/* 

et seulement alors vous pouvez excepter des sous-dossiers comme celui-ci

!/js/jquery
211
Matiss Jurgelis

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

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

52
Nils Riedemann

Pour exclure tout ce qui se trouve dans un répertoire, à l'exception de certains sous-répertoires, procédez comme suit:

wp-content/*
!wp-content/plugins/
!wp-content/themes/

Source: https://Gist.github.com/444295

16
Simon Paarlberg

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

Selon le page de manuel de gitignore :

Les modèles ont le format suivant:

...

  • Un préfixe optionnel! qui nie le motif; tout fichier correspondant exclu par un modèle précédent sera à nouveau inclus. Si un motif négatif correspond, cela remplacera les sources de motifs de priorité inférieure.
14
Robert Munteanu

!foo.dll dans .gitignore, ou (à chaque fois!) git add -f foo.dll

5
Tobias Kienzler

Si vous travaillez avec Visual Studio et que votre .dll se trouve dans un dossier bin, vous devez ajouter une exception pour le dossier bin en question avant de pouvoir ajouter l'exception pour le .dll. fichier. Par exemple.

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

Cela est dû au fait que le fichier .gitignore par défaut de Visual Studio 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 (puisque le dossier lui-même est déjà ignoré).

J'ai pu trouver pourquoi mon dossier n'était pas excepté en exécutant

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

depuis une fenêtre Git Bash. Ceci a renvoyé le motif [Bbin]/.

4
DeanOC

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 le @ solution Skilldrick .
  2. Dossiers/Sous-dossiers: utilisez la @ Solution Matiss Jurgelis .
  3. Fichiers/Fichiers de 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
    
2
Rosberg Linhares

Depuis Git 2.7.0, Git tiendra compte des exceptions. D'après les notes de publication officielles:

  • Autoriser un "!/Abc/def" ultérieur à remplacer un "/ abc" antérieur qui apparaît dans le même fichier .gitignore afin de faciliter l'expression "tout le contenu du répertoire/abc est ignoré, à l'exception de ...".

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

1
Erfan