bine bin/diferem apenas porque o último corresponderá apenas a um diretório.
bin/**/*é o mesmo que bin/**(aparentemente desde 1.8.2, de acordo com a resposta de @VonC).
O complicado, que acabei de passar uma hora ou mais arrancando meu cabelo, é isso bin/e bin/**não são exatamente iguais! Já que o anterior ignora o diretório como um todo, e o último ignora cada um dos arquivos dentro dele, e o git em quase todos os casos não se preocupa com diretórios, normalmente não há diferença. No entanto, se você tentar !cancelar a ignorar um subcaminho, descobrirá que o git (ahem) o ignora se você ignorou o diretório pai! (novamente, em vez do conteúdo do diretório)
Isso é mais claro por exemplo, portanto, para um repositório recém-iniciado, configure assim:
$ 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
Existem os seguintes arquivos não rastreados:
$ git ls-files --other
.gitignore
dir-contents/can-reinclude
dir-only/cant-reinclude
file
ignored-file
or-dir/ignored-file
Mas você pode ver que os seguintes arquivos não são ignorados:
$ git ls-files --other --exclude-standard
.gitignore
dir-contents/can-reinclude
file
E se você tentar adicionar, obterá:
$ 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
Eu considero esse comportamento um bug. (Está tudo ligado git version 1.8.4.msysgit.0)