ignorer tout répertoire 'bin' sur un projet git


1237

J'ai une structure de répertoires comme celle-ci:

.git/
.gitignore
main/
  ...
tools/
  ...
...

À l'intérieur de main et des outils, et de tout autre répertoire, à n'importe quel niveau, il peut y avoir un répertoire «bin», que je veux ignorer (et je veux aussi ignorer tout ce qu'il contient). J'ai essayé chacun de ces modèles en .gitignore mais aucun ne fonctionne:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

Quelqu'un peut m'aider? Le premier motif (celui que je pense devrait fonctionner) fonctionne très bien si je fais cela:

/main/**/bin/**/*

Mais je ne veux pas avoir une entrée pour chaque répertoire de niveau supérieur et je ne veux pas avoir à modifier .gitignore chaque fois que j'en ajoute un nouveau.

C'est sur Windows en utilisant le dernier msysgit.

EDIT: encore une chose, il y a des fichiers et des répertoires qui ont la sous-chaîne 'bin' dans leurs noms, je ne veux pas qu'ils soient ignorés :)


14
Quelqu'un trouvera probablement aussi utile: si vous avez peu de référentiels et que chacun a le même fichier .gitignore, vous pouvez le placer dans un emplacement "commun" et lancer> git config --global core.excludesfile ~ / .gitignore_global Le dernier paramètre est path à l'emplacement commun. PS Je suis nouveau sur git et je ne sais pas si c'est une recommandation de «meilleure pratique». Alors s'il vous plaît, faites-moi savoir si vous ne voulez pas faire cela. Je vous remercie.
Budda

La **syntaxe semble désormais (mars 2013, git 1.8.2) officiellement documentée: voir ma réponse ci
VonC

2
Si quelqu'un veut lire la version la plus récente de la page de manuel, consultez la page de manuel de gitignore (5) .

option plus conviviale si vous êtes fatigué de lire des essais pour la valeur d'une ligne d'informations atlassian.com/git/tutorials/saving-changes/…
suazithustra

Réponses:


1835

Avant la version 1.8.2, **n'avait pas de signification particulière dans le .gitignore. Depuis 1.8.2, git prend **en charge zéro ou plusieurs sous-répertoires (voir les notes de publication ).

La façon d'ignorer tous les répertoires appelés bin n'importe où en dessous du niveau actuel dans une arborescence de répertoires est avec un .gitignorefichier avec le modèle:

bin/

Dans la manpage, il y a un exemple d'ignorer un répertoire appelé en fooutilisant un modèle analogue.

Edit: Si vous avez déjà des dossiers bin dans votre index git que vous ne souhaitez plus suivre, vous devez les supprimer explicitement. Git n'arrêtera pas de suivre les chemins qui sont déjà suivis simplement parce qu'ils correspondent maintenant à un nouveau .gitignoremodèle. Exécutez une suppression de dossier ( rm ) de l'index uniquement ( --cached ) récursivement ( -r ). Exemple de ligne de commande pour le dossier racine bin:

git rm -r --cached bin

72
À partir de git 1.8.2, git acceptera **dans les .gitignorefichiers (source: changelog 1.8.2 )
Carlos Campderrós

15
est binla même chose bin/?
Nisba

29
@Nisba, ils sont différents, ignoreront les binfichiers nommés bin, tandis que bin/pour les répertoires nommés bin
Rani Kheir

8
depuis que je suis tombé sur ceci: le nom du dossier dans git-command EST sensible à la casse :) "bin! = Bin" - peut-être que j'épargne quelques minutes à quelqu'un par cette astuce :)
dba

1
Dans Windows10, vous ne pouvez pas créer un fichier .gitignore, vous devez créer un gitignore.txt, puis exécuter ren gitignore.txt .gitignore dans l'invite de commande pour créer ce fichier
minable

463

Le .gitignorerêve semble être:

bin/

au niveau supérieur.


Merci beaucoup pour votre aide, n'oubliez pas de consulter l'exemple des fichiers ignorés: git checkout bin *
Chris Sim

1
mettez-le dans gitignore_global
μολὼν.λαβέ

@GAlexander, pourquoi voudrait-on ignorer globalement les répertoires bin /? Ils ont souvent du contenu versionné. Et ignorer global n'affectera pas les autres utilisateurs du référentiel.
Michael Krelin - pirate

234

Je pense qu'il vaut la peine de mentionner pour les débutants git:

Si vous avez déjà un fichier archivé et que vous souhaitez l'ignorer, Git n'ignorera pas le fichier si vous ajoutez une règle ultérieurement . Dans ces cas, vous devez d'abord dépister le fichier, en exécutant la commande suivante dans votre terminal:

git rm --cached

Donc, si vous voulez ajouter pour ignorer certains répertoires de votre référentiel local (qui existent déjà) après avoir édité .gitignore, vous voulez l'exécuter sur votre répertoire racine

git rm --cached -r .
git add .

Il va essentiellement «rafraîchir» votre dépôt local et supprimer les fichiers ignorés.

Voir:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/


si je fais habituellement un git add -Asur mes commits, puis-je l'utiliser à la place? et puis-je également remplacer le point par -A sur la première ligne?
ajax333221

69

Le **n'a jamais fonctionné correctement auparavant, mais depuis git 1.8.2 (8 mars 2013) , il semble être explicitement mentionné et pris en charge:

Les modèles dans .gitignoreet les .gitattributesfichiers peuvent avoir **/, comme un modèle qui correspond à 0 ou plusieurs niveaux de sous-répertoire .

Par exemple, " foo/**/bar" correspond à " bar" dans " foo" lui-même ou dans un sous-répertoire de " foo".

Dans votre cas, cela signifie que cette ligne peut désormais être prise en charge:

/main/**/bin/

46
[Bb]in/

correspond aux majuscules et aux minuscules


2
[B]in/être le seul majuscule
Gank

Comment ne laisser Binignorer que le dossier et laisser binvalider sur git? [B]in/va à la fois commettre Binet bin.
Gank

5
Cela devrait le faire, @Gank: Bin/ !bin/
Marco G

34

Je ne l'ai pas vu mentionné ici, mais cela semble être sensible à la casse. Une fois que je suis passé à / Bin, les fichiers ont été ignorés comme prévu.


3
Ce n'est pas une réponse à la question d'origine qui était explicitement à propos bin, non Bin.
CB Bailey,

50
Bien que ce ne soit pas une réponse, cela ajoute à l'exhaustivité pour les autres cherchant sur le même problème (moi-même, tout à l'heure).
Jay

25

[Bb]in résoudra le problème, mais ... Voici une liste plus complète de choses que vous devez ignorer (liste d'exemples par GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

3
Note: Des choses comme cela devrait être dans votre GLOBAL gitignore (généralement dans votre répertoire personnel.) Le gitignore du projet ne devrait ignorer les choses spécifiques à votre projet (fichiers .o pour une application C.)
BraveNewCurrency


18

Étape 1: ajoutez le contenu suivant au fichier .gitignore.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

Étape 2: assurez-vous de prendre effet

Si le problème persiste, c'est parce que les paramètres de .gitignore ne peuvent ignorer que les fichiers qui n'ont pas été suivis à l'origine . Si certains fichiers ont déjà été inclus dans le système de contrôle de version, la modification de .gitignore n'est pas valide. Pour résoudre complètement ce problème, vous devez ouvrir Git Bash ou la console du gestionnaire de packages (voir capture d'écran ci-dessous) pour exécuter les commandes suivantes dans le dossier racine du référentiel.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

Console PM Ensuite, le problème sera complètement résolu.


8

Littéralement, aucune des réponses n'a vraiment fonctionné pour moi; le seul qui a fonctionné pour moi était (sous Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 

Cela a-t-il également ignoré tous les dossiers nommés bindans les sous-répertoires?
vineeshvs

5

À titre d'avis;

Si vous pensez que .gitignorecela ne fonctionne pas d'une manière (donc ajouté un foo/*dossier mais git statusen montrant toujours le contenu du dossier comme modifié ou quelque chose comme ça), alors vous pouvez utiliser cette commande;

git checkout -- foo/*


3

pour 2.13.3 et les versions ultérieures, écrire uniquement bin dans votre fichier .gitignore devrait ignorer le bin et tous ses sous-répertoires et fichiers

poubelle


2

L'ajout de ** / bin / au fichier .gitignore a fait l'affaire pour moi (Remarque: le dossier bin n'a pas été ajouté à l'index).


1

Si le motif à l'intérieur .gitignorese termine par une barre oblique/ , il ne trouvera une correspondance qu'avec un répertoire.

En d'autres termes, bin/correspondra à un répertoire binet à des chemins en dessous, mais ne correspondra pas à un fichier normal ou à un lien symbolique bin.


Si le motif ne contient pas de barre oblique , comme dans binGit, il le traite comme un motif de glob de shell (gourmand). Le mieux serait donc d’utiliser/bin .

bin ne serait pas la meilleure solution pour ce problème particulier.


Voulez-vous dire «commencer par» un /?
Vineeshvs

0

Dans mon cas, l'encodage du fichier gitignore était problématique, vérifiez s'il est UTF-8

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.