bin
et bin/
ne diffèrent que par le fait que ce dernier ne correspondra qu'à un répertoire.
bin/**/*
est le même que bin/**
(apparemment depuis le 1.8.2, selon la réponse de @ VonC).
La délicate, que je viens de passer une heure ou déchirant mes cheveux plus, est que bin/
et bin/**
ne sont pas tout à fait la même chose! Puisque le premier ignore le répertoire dans son ensemble et que le dernier ignore chacun des fichiers qu'il contient, et que git dans presque tous les cas ne se soucie pas des répertoires, il n'y a normalement aucune différence. Cependant, si vous essayez d'utiliser !
pour désignorer un sous-chemin, vous constaterez que git (ahem) l' ignore si vous avez ignoré le répertoire parent! (encore une fois, plutôt que le contenu du répertoire)
Ceci est plus clair par exemple, donc pour un référentiel nouvellement lancé configuré ainsi:
$ cat .gitignore
ignored-file
or-dir
dir-only/
!dir-only/cant-reinclude
dir-contents/**
!dir-contents/can-reinclude
$ mkdir or-dir dir-only dir-contents
$ touch file ignored-file or-dir/ignored-file dir-only/cant-reinclude dir-contents/can-reinclude
Les fichiers non suivis suivants existent:
$ git ls-files --other
.gitignore
dir-contents/can-reinclude
dir-only/cant-reinclude
file
ignored-file
or-dir/ignored-file
Mais vous pouvez voir que les fichiers suivants ne sont pas ignorés:
$ git ls-files --other --exclude-standard
.gitignore
dir-contents/can-reinclude
file
Et si vous essayez d'ajouter, vous obtenez:
$ git add dir-only/cant-reinclude
The following paths are ignored by one of your .gitignore files:
dir-only/cant-reinclude
Use -f if you really want to add them.
fatal: no files added
Je considère ce comportement comme un bug. (Tout est allumé git version 1.8.4.msysgit.0
)