binи bin/отличаются только тем, что последний будет соответствовать только каталогу.
bin/**/*совпадает с bin/**(очевидно, начиная с 1.8.2, согласно ответу @VonC).
Сложность заключается в том, что я только что потратил час или около того на то, чтобы вырвать себе волосы, bin/и bin/**это не совсем то же самое! Поскольку более ранний игнорирует каталог в целом, а последний игнорирует каждый из файлов в нем, а git почти во всех случаях не заботится о каталогах, обычно нет никакой разницы. Однако, если вы попытаетесь использовать !для отмены игнорирования подпути, вы обнаружите, что git (кхм) игнорирует его, если вы проигнорировали родительский каталог! (опять же, а не содержимое каталога)
Это наиболее ясно из примера, поэтому для недавно созданного репозитория, настроенного так:
$ 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
Существуют следующие неотслеживаемые файлы:
$ git ls-files --other
.gitignore
dir-contents/can-reinclude
dir-only/cant-reinclude
file
ignored-file
or-dir/ignored-file
Но вы можете видеть, что следующие файлы не игнорируются:
$ git ls-files --other --exclude-standard
.gitignore
dir-contents/can-reinclude
file
А если попробовать добавить, получится:
$ 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
Я считаю такое поведение ошибкой. (Это все включено git version 1.8.4.msysgit.0)