VS Codeの改行コード設定が効かずにどハマりした話

## 発生した事象
Windowsで VS Code を利用した開発環境を整えているときのこと。
`git clone`でgithubからリポジトリを落とし、VS Codeで表示したところ、
改行コードが全て'CRLF'になっていた。
![改行コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455612/e5e9ab16-c7a1-9524-7a95-9d9051410941.png "右から２番目がCRLFになっている")
改行コードを'LF'に変更しても、'CRLF'に自動変更されたりしたので状況をメモする。(未経験向け)

## 原因
- git for Windowsの設定`core.autocrlf`のせい
（VS Code関係なかったパターン）

## 試したこと
#### VS Codeの設定変更
###### 1.&ensp;コマンドパレットを起動(以下のいずれか)
- `F1`キー
- Windows：`Ctrl`+`Shift`+`P` &emsp; Mac：`command`+`Shift`+`P`

###### 2.&ensp;基本設定を開く
- コマンドパレットの検索欄に入力：`user setting`
※「基本設定: ユーザー設定を開く」を選択
![cp_user_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455612/9607fd46-3572-1187-abcf-38d41cdaaa6b.png "JSON形式で直接変更してもOK")

###### 3.&ensp;改行コードの設定を検索し設定を変える
- 検索欄に`EOL`を入力し、プルダウンで変更
 ※`\n`：LF &emsp; `\r\n`：CRLF &emsp; `auto`：OS固有に合わせる
![2_user_setting_EOL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455612/24805584-fa23-6df5-adca-038cec2ebe1f.png)

###### 4.&ensp;再度`git clone`して改行コードを確認する
:::note
左上タブに***ユーザー***、***ワークスペース***、***フォルダ***(上の画像にはない)があり、
権限毎に設定が存在する。
優先度は&ensp;`ユーザー`&nbsp;<&nbsp;`ワークスペース`&nbsp;<&nbsp;`フォルダ`&ensp;のため、設定が効かない場合は全ての権限の設定を確認してみる。
:::

#### git for Windowsの設定変更（VS Codeの設定でなおらない場合）
###### 1.&ensp;gitの設定を確認する
- 実行コマンド(local設定)&nbsp;&nbsp;：&nbsp;`git config core.autocrlf`
- 実行コマンド(global設定)：&nbsp;`git config --global core.autocrlf`
:::note warn
PowerShellでコマンド実行すると結果は正しく表示されるものの、
実際は設定ファイルが作成されない事象が発生した。
**コマンドプロンプトで実行すると正しく設定できた。** 謎。
（linuxで同事象は未確認。PowerShellでgit configはしない方がいいだろう）
:::
```zsh:実行結果
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config core.autocrlf
True     /* Trueは改行コードをCRLFに変更する */

git config --global core.autocrlf
False    /* falseは改行コードをCRLFに変更しない */
```

###### 2.&ensp;設定を変更する
・１の実行結果を見ると、**local設定**が***True***になっているのが原因で、`git clone`したファイルの改行コードが'CRLF'に自動変更されていたことが分かった。
・対象のプロジェクトの改行コードが自動的に変換されないように以下のコマンドを実施した。
　（『[tip.設定ずみのローカル設定を削除する方法](#tip設定ずみのローカル設定を削除する方法)』の方がオススメかも）
- 実行コマンド(local設定)  ： `git config core.autocrlf false`
```zsh:実行結果
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config core.autocrlf false
```

###### 3.&ensp;gitの設定を確認する
```zsh:コマンドの実行＆結果
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config core.autocrlf
False
```
:::note warn
基本的にはグローバル設定をしておき、特定プロジェクトのみグローバル設定とは別にしたい場合にローカル設定を行うようにする。
:::

###### tip.&ensp;設定ずみのローカル設定を削除する方法
グローバル設定を使用し、ローカル設定を削除したい場合は以下のコマンドを実施する
```zsh
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config --unset core.autocrlf

#確認コマンド
git config core.autocrlf
　　　← 実行結果：設定が消えて何も表示されない
```
## その他
#### git の設定ファイル(.gitconfig)の場所
```zsh:グローバル設定
/* ユーザーのカレントフォルダ直下に隠しファイルで存在しているはず */
/Users ─ [user名] ┬ [省略]　┬　リポジトリフォルダ
                  └ .gitconfig
```

```zsh:ローカル設定
/* 設定したリポジトリ(プロジェクトフォルダ)の直下に隠しフォルダがあるはず */
/Users ─ [user名] ┬ [省略]　┬　リポジトリフォルダ
                  └    　　　　　└ .git　┬　.gitconfig
```

---
#### VS Code の設定ファイル(setting.json)の場所
###### 1.&ensp;コマンドパレットを起動(以下のいずれか)
- `F1`キー
- Windows：`Ctrl`+`Shift`+`P` &emsp; Mac：`command`+`Shift`+`P`

###### 2.&ensp;基本設定(JSON)を開く
- コマンドパレットで検索：`setting json`
![setting_json.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455612/1c609a72-13d4-498f-ca0d-bfecc0a9ebd5.png)
```json:setting.json のなかみ
{
    "files.eol": "\n"
}
```
:::note
基本はユーザー設定のみ行っておけばOK。
ユーザー設定・ワークスペース設定はgitと同様、全体的な設定を行なっておき、
例外的な場合に部分的な設定を行う。
|優先度|範囲|git|VS Code|
|:-:|:-:|:-:|:-:|
|低い|設定されてない全体<br>に適用される|グローバル設定|ユーザー設定|
|高い|設定した場所に<br>だけ適用される|ローカル設定|ワークスペース設定|
:::
---
#### オチ
`git config core.autocrlf`の設定で改行コードが変更され、ローカルで'CRLF'で作業を行なっても、再度githubへプッシュする時に改行コードを'LF'へ戻してくれるっぽい？
あまり気にしなくてもいいような気がする。
　　※指摘があれば是非