発生した事象
Windowsで VS Code を利用した開発環境を整えているときのこと。
git clone
でgithubからリポジトリを落とし、VS Codeで表示したところ、
改行コードが全て'CRLF'になっていた。
改行コードを'LF'に変更しても、'CRLF'に自動変更されたりしたので状況をメモする。(未経験向け)
原因
- git for Windowsの設定
core.autocrlf
のせい
(VS Code関係なかったパターン)
試したこと
VS Codeの設定変更
1. コマンドパレットを起動(以下のいずれか)
-
F1
キー - Windows:
Ctrl
+Shift
+P
Mac:command
+Shift
+P
2. 基本設定を開く
3. 改行コードの設定を検索し設定を変える
4. 再度git clone
して改行コードを確認する
左上タブにユーザー、ワークスペース、フォルダ(上の画像にはない)があり、
権限毎に設定が存在する。
優先度は ユーザー
< ワークスペース
< フォルダ
のため、設定が効かない場合は全ての権限の設定を確認してみる。
git for Windowsの設定変更(VS Codeの設定でなおらない場合)
1. gitの設定を確認する
- 実行コマンド(local設定) :
git config core.autocrlf
- 実行コマンド(global設定):
git config --global core.autocrlf
PowerShellでコマンド実行すると結果は正しく表示されるものの、
実際は設定ファイルが作成されない事象が発生した。
コマンドプロンプトで実行すると正しく設定できた。 謎。
(linuxで同事象は未確認。PowerShellでgit configはしない方がいいだろう)
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config core.autocrlf
True /* Trueは改行コードをCRLFに変更する */
git config --global core.autocrlf
False /* falseは改行コードをCRLFに変更しない */
2. 設定を変更する
・1の実行結果を見ると、local設定がTrueになっているのが原因で、git clone
したファイルの改行コードが'CRLF'に自動変更されていたことが分かった。
・対象のプロジェクトの改行コードが自動的に変換されないように以下のコマンドを実施した。
(『tip.設定ずみのローカル設定を削除する方法』の方がオススメかも)
- 実行コマンド(local設定) :
git config core.autocrlf false
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config core.autocrlf false
3. gitの設定を確認する
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config core.autocrlf
False
基本的にはグローバル設定をしておき、特定プロジェクトのみグローバル設定とは別にしたい場合にローカル設定を行うようにする。
tip. 設定ずみのローカル設定を削除する方法
グローバル設定を使用し、ローカル設定を削除したい場合は以下のコマンドを実施する
#local設定は設定を適用させたいリポジトリ(プロジェクトフォルダ)のルートディレクトリに移動して実施する
git config --unset core.autocrlf
#確認コマンド
git config core.autocrlf
← 実行結果:設定が消えて何も表示されない
その他
git の設定ファイル(.gitconfig)の場所
/* ユーザーのカレントフォルダ直下に隠しファイルで存在しているはず */
/Users ─ [user名] ┬ [省略] ┬ リポジトリフォルダ
└ .gitconfig
/* 設定したリポジトリ(プロジェクトフォルダ)の直下に隠しフォルダがあるはず */
/Users ─ [user名] ┬ [省略] ┬ リポジトリフォルダ
└ └ .git ┬ .gitconfig
VS Code の設定ファイル(setting.json)の場所
1. コマンドパレットを起動(以下のいずれか)
-
F1
キー - Windows:
Ctrl
+Shift
+P
Mac:command
+Shift
+P
2. 基本設定(JSON)を開く
{
"files.eol": "\n"
}
基本はユーザー設定のみ行っておけばOK。
ユーザー設定・ワークスペース設定はgitと同様、全体的な設定を行なっておき、
例外的な場合に部分的な設定を行う。
優先度 | 範囲 | git | VS Code |
---|---|---|---|
低い | 設定されてない全体 に適用される |
グローバル設定 | ユーザー設定 |
高い | 設定した場所に だけ適用される |
ローカル設定 | ワークスペース設定 |
オチ
git config core.autocrlf
の設定で改行コードが変更され、ローカルで'CRLF'で作業を行なっても、再度githubへプッシュする時に改行コードを'LF'へ戻してくれるっぽい?
あまり気にしなくてもいいような気がする。
※指摘があれば是非