biny bin/difieren solo en que este último solo coincidirá con un directorio.
bin/**/*es el mismo que bin/**(aparentemente desde 1.8.2, según la respuesta de @ VonC).
El asunto difícil, que me acaba de pasar una hora o así que rasga mi pelo otra vez, es que bin/y bin/**no son absolutamente lo mismo! Dado que el primero ignora el directorio como un todo, y el segundo ignora cada uno de los archivos dentro de él, y a git en casi todos los casos no le importan los directorios, normalmente no hay diferencia. Sin embargo, si intenta !anular el ignorar una subruta, encontrará que git (ejem) la ignora si ignora el directorio principal. (de nuevo, en lugar del contenido del directorio)
Esto es más claro con el ejemplo, por lo que para un repositorio recién iniciado configurado así:
$ 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
Existen los siguientes archivos sin seguimiento:
$ git ls-files --other
.gitignore
dir-contents/can-reinclude
dir-only/cant-reinclude
file
ignored-file
or-dir/ignored-file
Pero puede ver que los siguientes archivos no se ignoran:
$ git ls-files --other --exclude-standard
.gitignore
dir-contents/can-reinclude
file
Y si intentas agregar, obtienes:
$ 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
Considero este comportamiento un error. (Todo esto está encendido git version 1.8.4.msysgit.0)