web-dev-qa-db-fra.com

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

J'ai une structure de répertoire 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 également tout ignorer). J'ai essayé chacun de ces modèles dans .gitignore mais aucun d'entre eux 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 qui, à mon avis, devrait fonctionner) fonctionne parfaitement si je fais ceci:

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

Mais je ne veux pas avoir d'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.

Ceci 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 que ceux-ci soient ignorés :)

1058
Ben Hymers

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

La manière d'ignorer tous les répertoires appelés bin n'importe où en dessous du niveau actuel dans une arborescence de répertoires est d'utiliser un fichier .gitignore avec le modèle:

bin/

Dans la page man, vous trouverez un exemple d'ignorance d'un répertoire appelé foo à l'aide d'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 le suivi des chemins déjà suivis simplement parce qu'ils correspondent à un nouveau modèle .gitignore. Exécuter un dossier supprimer (rm) de l'index uniquement (--cached) de manière récurrente (-r). Exemple de ligne de commande pour le dossier bin bin:

git rm -r --cached bin
1590
CB Bailey

Le .gitignore de votre rêve semble être:

bin/

au plus haut niveau.

428

Je pense que cela vaut la peine de mentionner pour les débutants:

Si vous avez déjà un fichier archivé et que vous voulez l'ignorer, Git n'ignorera pas le fichier si vous ajoutez une règle ultérieurement. Dans ces cas, vous doit d'abord extraire le fichier, en exécutant la commande suivante dans votre fichier 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 "actualiser" votre référentiel local et unstage des fichiers ignorés. 

Voir:

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

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

192
plancys

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

Les modèles des fichiers .gitignore et .gitattributespeuvent avoir **/, en tant que modèle correspondant à 0 ou plusieurs niveaux de sous-répertoire.

Par exemple. "foo/**/bar" correspond à "bar" dans "foo" ou dans un sous-répertoire de "foo".

Dans votre cas, cela signifie que cette ligne pourrait maintenant être prise en charge:

/main/**/bin/
69
VonC
[Bb]in/

correspond aux majuscules et minuscules

45
wisbucky

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

31
Cory

[Bb]in résoudra le problème, mais ... Voici une liste plus complète d'éléments à ignorer (liste d'échantillons de 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*/
24
Jaider

Si vous recherchez un excellent fichier .gitignore global pour toute solution Visual Studio (.NET), nous vous recommandons d'utiliser celui-ci: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

Autant que je sache, il possède le .gitignore le plus complet pour les projets .NET.

17
Jochen van Wylick

É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 que les paramètres de .gitignore ne peuvent ignorer que les fichiers initialement non suivis. Si certains fichiers ont déjà été inclus dans le système de contrôle de version, la modification de .gitignore est invalide . Pour résoudre complètement ce problème, vous devez ouvrir Git Bash ou Package Manager Console (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'

 PM console Alors le problème sera complètement résolu.

10
Bravo Yeung

Comme un avis;

Si vous pensez que .gitignore ne fonctionne pas (ajoutez donc un dossier foo/* dans celui-ci, mais git status affichant toujours le contenu de ce dossier modifié ou quelque chose du genre), vous pouvez utiliser cette commande;

git checkout -- foo/*

5
K-Gun

depuis 2.13.3 et les versions ultérieures, l'écriture de bin uniquement dans votre fichier .gitignore doit ignorer le répertoire bin et tous ses sous-répertoires et fichiers 

poubelle

3
Nikhil Karanjkar

Littéralement, aucune des réponses ne fonctionnait réellement pour moi; le seul qui a fonctionné pour moi était (sous Linux):

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

git version 2.18.0 
2
AnthonyC

Si le modèle à l'intérieur de .gitignore se termine par un slash /, il ne trouvera une correspondance qu'avec un répertoire.

En d'autres termes, bin/ correspondra à un répertoire bin et aux chemins situés 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 bin, Git le traite comme un motif de shell glob (gourmand). Le mieux serait donc d'utiliser un simple /bin.

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

0
prosti

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

0
Dhwaneel