TL;DR
WindowsでLinuxのDevcontainerを生成している場合、
gitの設定でcore.autocrlf=false
があるか確認しましょう。
環境
ホスト :Windows
コンテナ:Linux
エディタ:Visual Studio Code
問題の発生
WindowsマシンでDevContainerを構築しようとコンテナを作成した際、ソースコード内の全てのファイルがGitのファイル変更リストに表示される問題が発生しました。
Windowsにインストールしてある「GitHub Desktop」や「Sourcetree」には変更があがってこないので、最初はコンテナ生成時にgitの変更履歴が同期されていないと思い、以下の点を疑って調べていました。
- GitのSSH関連設定の同期(そういう記事も多かったし…)
- .gitフォルダの同期(変更履歴情報があるから)
- devcontainer.jsonやdocker-compose.ymlファイルの設定
原因の特定
「docker等の同期設定が問題ではないのであれば、本当にファイルが変更されているのでは?」と思い、ファイルが勝手に変更される要因を考えてみたところ、Gitが自動的に改行文字を変更する設定があることを思い出しました。
git config --global -l
でgitの設定一覧を確認したところ、やっぱり改行文字の自動変換設定であるcore.autocrlf=false
の項目がありませんでした。
この項目がないとWindowsからDevcontainer内のLinuxにファイルを同期させた際に改行文字が自動で変換されてしまいます。
※プロジェクト生成をLinuxや他のDevcontainerなどで行ってもWindowsのローカルにクローンした際に変更されてしまいます
解決策
-
git config --global -l
でgitの設定一覧内にcore.autocrlf=false
という項目があるかを確認 - なければ
git config --global core.autocrlf false
で設定項目を追加 - Devcontainerをリビルド
※設定を追加したのに改善しない場合はコンテナを削除したり、docker builder prune
でdockerのビルドキャッシュを削除してみてください
まとめ
初歩的なミスですが、すぐには気付けずハマってしまったので、同じ轍を踏む人が少しでも減るように記事としてあげてみました。