.gitignore: according to what rules does this work

From: Konrad Karl <hidden>
Date: 2016-06-15 22:48:51

I have the following directory layout and want to exclude
dir2 .. dirN

The following arrangement of .gitignore seems to work ok
but I was unable to find docs about the double asterisks.

./.gitignore:

*
*/
!.gitignore
!/dir1/


dir1/.gitignore:

!**
!**/

these two lines seem to be enough to have all subdirectories
within dir1 being included (which is desired) but why?

|-- .gitignore
|-- dir1
|   |-- .gitignore
|   |-- file1
|   |-- subdir1
|   |   |-- file1
|   |   `-- subsubdir1
|   |       |-- file1
|   |       `-- subsubsubdir1
|   |           `-- file1
|   `-- subdir2
|       `-- file1
|-- dir2
|   `-- file1
.
.
.
--- dirN
    `--file1
git add . says:
....
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   .gitignore
#       new file:   dir1/.gitignore
#       new file:   dir1/file1
#       new file:   dir1/subdir1/file1
#       new file:   dir1/subdir1/subsubdir1/file1
#       new file:   dir1/subdir1/subsubdir1/subsubsubdir1/file1
#       new file:   dir1/subdir2/file1

Before discovering this I was playing like this:

!*
!*/
!*/*
!*/*/ 

and so on.

Greetings,
Konrad
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help