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?
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.
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
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 .
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
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.
!foo.dll
dans .gitignore, ou (à chaque fois!) git add -f foo.dll
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]/
.
La solution dépend de la relation entre la règle git ignore et la règle d'exception:
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
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