Si vous utilisez un shell tel que Bash 4, ** est essentiellement une version récursive de *, qui correspondra à un nombre quelconque de sous-répertoires.
Cela a plus de sens si vous ajoutez une extension de fichier à vos exemples. Pour faire correspondre les fichiers journaux immédiatement à l'intérieur de tmp, vous devez taper :
/tmp/*.log
Pour faire correspondre les fichiers journaux n'importe où dans n'importe quel sous-répertoire de tmp, vous devez taper :
/tmp/**/*.log
Mais en testant avec la version 1.6.0.4 de git et la version 3.2.17(1)-release de bash, il apparaît que git ne supporte pas du tout ** globs. Le site la page de manuel la plus récente pour gitignore ne mentionne pas non plus **, donc ceci est soit (1) très nouveau, (2) non supporté, ou (3) dépendant d'une manière ou d'une autre de l'implémentation de globbing sur votre système.
De plus, il y a quelque chose de subtil dans vos exemples. Cette expression :
tmp/*
...signifie en fait "ignorer tout fichier à l'intérieur de un répertoire tmp, n'importe où dans l'arbre des sources, mais n'ignorez pas les répertoires tmp eux-mêmes". Dans des circonstances normales, vous écrirez probablement simplement :
/tmp
...qui ignorerait un seul répertoire tmp de premier niveau. Si vous avez besoin de conserver les répertoires tmp, tout en ignorant leur contenu, vous devriez placer un fichier .gitignore vide dans chaque répertoire tmp pour vous assurer que git crée effectivement le répertoire.