Ecco il contenuto della mia directory corrente.Quale modello segue .gitignore?
$ ls
foo.foo
$ ls -a
. .. .bar.foo .foo foo.foo .gitignore
Quindi trasformo questa directory in un repository git.
$ git init
Initialized empty Git repository in /home/lone/foo/.git/
$ ls -a
. .. .bar.foo .foo foo.foo .git .gitignore
Questo è il contenuto di .gitignore
.
$ cat .gitignore
*.foo
vedo che il pattern nella .gitignore
comporta diversamente dal medesimo modello in guscio. Nella shell *.foo
corrisponde solo i file non nascosti, ovvero nomi di file che non iniziano con un punto.
$ echo *.foo
foo.foo
Ma *.foo
in .gitignore
sembra corrispondere qualsiasi file, nascosti o non nascoste, che termina con .foo
.
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Dove posso saperne di più sulla definizione precisa dei modelli che .gitignore segue, in modo che io possa capire dove e perché il suo comportamento è diverso da quello dei modelli della shell glob?
Ecco una risorsa: https://git-scm.com/docs/gitignore. Sotto certe condizioni viene trattato esattamente come un guscio glob. "Altrimenti, Git tratta il pattern come una shell glob adatta al consumo da fnmatch (3) con il flag FNM_PATHNAME" (ma leggi le cose sopra per quando non lo fa) – hiandbaii
@hiandbaii Ho letto quella documentazione prima di fare questa domanda . Tuttavia, un paio di cose non mi sono chiare. La shell usa anche 'fnmatch (3)' per elaborare i glob pattern? In tal caso, perché '*' non corrisponde a zero caratteri prima di '.' (cioè i file nascosti) ma gitignore fa? Non riesco a trovare la sezione precisa nella documentazione 'gitignore' che spiega questo. –