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 :)
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
Le .gitignore
de votre rêve semble être:
bin/
au plus haut niveau.
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:
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.gitattributes
peuvent 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/
[Bb]in/
correspond aux majuscules et minuscules
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.
[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*/
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.
É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'
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/*
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
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
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.
L'ajout de **/bin/au fichier .gitignore a fait l'affaire pour moi (Remarque: le dossier bin n'a pas été ajouté à l'index).