これ本当なの？→「gitはデフォルトでファイルの大文字小文字を区別しない」

今回、pdfファイルをgitのバージョン管理の対象から外すと仮定します。
「.gitignore」に「*.pdf」と書けば、pdfファイルはバージョン管理の対象から外れるはず。
いや、待てよ。もしファイルの拡張子が大文字だったら？

ネットで調べると、多くのサイトに「gitはデフォルトでファイルの大文字小文字を区別しない」と書かれています。
それならファイルの拡張子が「.pdf」でも「.PDF」でも、バージョン管理の対象から外れてくれる？
本当にそうなるか、実験してみました。

## 環境

- Ubuntu 18.04
- git version 2.17.1

## 実験

ローカルリポジトリを作成します。

```
$ mkdir foo
$ cd foo
$ git init
Initialized empty Git repository in /home/laradock/foo/.git/
```

### core.ignorecase未設定での実験

core.ignorecaseが未設定の時の挙動が知りたいので、一旦設定をunsetします。

```
$ sudo git config --system --unset core.ignorecase
$ git config --global --unset core.ignorecase
$ git config --local --unset core.ignorecase
```

core.ignorecaseの設定を確認します。

```
$ git config --list | grep core.ignorecase
```

設定がないので何も表示されませんでした。
続いて、ローカルでファイルをいくつか生成し、git statusでgitの追跡状況を確認します。

```
$ touch a.pdf
$ touch A.PDF
$ touch README.md
$ touch readme.md
$ git status
ブランチ master

No commits yet

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)

	A.PDF
	README.md
	a.pdf
	readme.md

nothing added to commit but untracked files present (use "git add" to track)
```

gitは生成した4つのファイルを認識しています。
続いて、.gitignoreを作成・編集します。

```
$ vim .gitignore
```

内容は以下の通り。

```
*.pdf
```

保存後、git statusで追跡状況を確認します。

```
$ git status
ブランチ master

No commits yet

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)

	.gitignore
	A.PDF
	README.md
	readme.md

nothing added to commit but untracked files present (use "git add" to track)
```

a.pdfの表示が消えましたが、A.PDFはバージョン管理の対象のままです。
両方の表示が消えてくれると期待していたのですが．．．
core.ignorecaseが未設定の時（つまりデフォルト？）の挙動は、少なくともUbuntuではファイルの大文字小文字を区別しているのでは？？？
git addも試してみます。

```
$ git add .
$ git status
ブランチ master

No commits yet

コミット予定の変更点:
  (use "git rm --cached <file>..." to unstage)

	new file:   .gitignore
	new file:   A.PDF
	new file:   README.md
	new file:   readme.md

$ git reset .
```

README.md と readme.md の両方とも git add できています。
大文字小文字を区別している様子です。
ちなみに[こちらのサイト](https://git-scm.com/docs/git-config)には、core.ignoreCaseについて以下のように記述されています。

```
The default is false, except git-clone or git-init will probe and set core.ignoreCase true if appropriate when the repository is created.
```

冒頭の「The default is false」だけ読むと、デフォルトはファイルの大文字小文字を区別すると読み取れますが、これを読んでも私にはgitの挙動がよくわかりません．．．
ともかく、実験を続けます。

### core.ignorecaseをtrueにして実験

core.ignorecaseをtrueにしてみます。

```
$ git config --local core.ignorecase true
$ git config --list | grep core.ignorecase
core.ignorecase=true
$ git status
ブランチ master

No commits yet

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)

	.gitignore
	README.md
	readme.md

nothing added to commit but untracked files present (use "git add" to track)
```

ファイルの大文字小文字を区別しないので、.gitignoreの設定が大文字にも小文字にも効いて、a.pdfとA.PDFの表示が消えました。
git addも試してみます。

```
$ git add .
fatal: Will not add file alias 'readme.md' ('README.md' already exists in index)
```

README.md と readme.md のファイル名がコンフリクトして、失敗しました。

### core.ignorecaseをfalseにして実験

続いて、core.ignorecaseをfalseにしてみます。

```
$ git config --local core.ignorecase false
$ git config --list | grep core.ignorecase
core.ignorecase=false
$ git status
ブランチ master

No commits yet

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)

	.gitignore
	A.PDF
	README.md
	readme.md

nothing added to commit but untracked files present (use "git add" to track)
```

ファイルの大文字小文字を区別するので、a.pdfの表示は消えたままですが、A.PDFはバージョン管理の対象になりました。
core.ignorecaseが未設定の時の挙動と同じです。
git addも試してみます。

```
$ git add .
$ git status
ブランチ master

No commits yet

コミット予定の変更点:
  (use "git rm --cached <file>..." to unstage)

	new file:   .gitignore
	new file:   A.PDF
	new file:   README.md
	new file:   readme.md

$ git reset .
```

core.ignorecaseが未設定の時と同様、成功しました。
今回のUbuntuでの実験では、gitはデフォルトでファイルの大文字小文字を区別しました．．．
（誰か解説お願い）