binі bin/відрізняються лише тим, що останні будуть відповідати лише каталогу.
bin/**/*це те саме, що bin/**(мабуть, з 1.8.2, відповідно до відповіді @ VonC).
Хитрий, який я щойно витратив годину чи близько того, вириваючи волосся, - це bin/і bin/**не зовсім однаковий! Оскільки попередній ігнорує каталог в цілому, а другий ігнорує кожен з файлів у ньому, і git майже у всіх випадках не турбується про каталоги, як правило, різниці немає. Однак, якщо ви спробуєте використати, !щоб ігнорувати підпуть, тоді ви виявите, що git (ahem) ігнорує його, якщо ви проігнорували батьківський каталог! (знову ж таки, а не вміст каталогу)
Це ясніше на прикладі, тому для нещодавно запущеного сховища, створеного так:
$ 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)