私の現在のディレクトリの内容です。.gitignoreはどのパターンに従っていますか?
$ ls
foo.foo
$ ls -a
. .. .bar.foo .foo foo.foo .gitignore
次に、このディレクトリをgitリポジトリに変更します。
$ git init
Initialized empty Git repository in /home/lone/foo/.git/
$ ls -a
. .. .bar.foo .foo foo.foo .git .gitignore
ここには.gitignore
の内容があります。
$ cat .gitignore
*.foo
.gitignore
のパターンは、シェルの同じパターンとは異なる動作をしています。シェル内では、*.foo
は非隠しファイル、つまりピリオドで始まらないファイル名にのみ一致します。 .gitignore
で
$ echo *.foo
foo.foo
しかし*.foo
.foo
で終わるすべてのファイル、非表示または非表示でないと、一致しているようです。どこで、なぜその行動は、シェルのglobパターンとは異なる私が理解できるように、私は、次の.gitignoreパターンの正確な定義について詳しく学ぶことができ
$ 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)
?
ここにリソースがあります:https://git-scm.com/docs/gitignore。特定の条件下では、シェルグロブとまったく同じように扱われます。 "そうでなければ、GitはFNM_PATHNAMEフラグでfnmatch(3)が消費するのに適したシェルグロブとしてパターンを扱います"(しかし、そうでないときは上のものを読む) – hiandbaii
@hiandbaiiこの質問をする前に、 。しかし、いくつかのことは私には分かりません。シェルはglobパターンを処理するために 'fnmatch(3)'も使用しますか?その場合、なぜ '* 'は' .'(つまり隠されたファイル)の前にゼロ文字とマッチしませんが、gitignoreはしますか?私はこれを説明している 'gitignore'ドキュメントの正確なセクションを見つけることができません。 –