Oto zawartość mojego bieżącego katalogu.Jakiego wzoru działa .gitignore?
$ ls
foo.foo
$ ls -a
. .. .bar.foo .foo foo.foo .gitignore
Następnie zamieniam ten katalog w repozytorium git.
$ git init
Initialized empty Git repository in /home/lone/foo/.git/
$ ls -a
. .. .bar.foo .foo foo.foo .git .gitignore
Tutaj jest zawartość .gitignore
.
$ cat .gitignore
*.foo
Widzę, że wzór w .gitignore
zachowuje się inaczej niż ten sam wzór w powłoce. W powłoce *.foo
dopasowuje tylko niewidoczne pliki, tj. Nazwy plików, które nie rozpoczynają się kropką.
$ echo *.foo
foo.foo
Ale *.foo
w .gitignore
wydaje się dało żadnych plików, ukryte lub nie-ukryte, że kończy się .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)
Gdzie mogę dowiedzieć się więcej o precyzyjnej definicji wzorców że .gitignore Wynika więc, że mogę zrozumieć, gdzie i dlaczego jego zachowanie różni się od wzorców powłoki glob?
Oto zasób: https://git-scm.com/docs/gitignore. W pewnych warunkach traktowany jest dokładnie tak, jak skorupa globu. "W przeciwnym razie Git traktuje wzorzec jako glob skorupowy nadający się do spożycia przez fnmatch (3) z flagą FNM_PATHNAME" (Ale czytaj rzeczy powyżej, kiedy nie jest) – hiandbaii
@hiandbaii Zrobiłem tę dokumentację zanim zadałem to pytanie . Jednak kilka rzeczy nie jest dla mnie jasne. Czy powłoka używa również 'fnmatch (3)' do przetwarzania wzorców globu? W takim przypadku dlaczego '*' nie pasuje do znaków zerowych przed '.' (tzn. Ukrytych plików), ale czy robi to gitignore? Nie mogę znaleźć dokładnej sekcji w dokumentacji "gitignore", która to wyjaśnia. –