2020年2月24日月曜日

【GIT】Windowsの改行コードに注意!

この前からちょいちょいVirtualBox関連の投稿してますが、
Windows環境のVirtualBoxでLinuxのサーバーを立ち上げて
ローカルの開発環境を作りたいのが目的です。

そして、今回GITで問題が発生しました。
ごく単純な問題だったのですが、
意外に詰まったので忘れずに書いておこうと思う。





1.どういった状況で発生した?


状況としてはこうです。

先ず環境として、
ホストPCはWindowsで、
VirtualBox内でLinuxの仮想OSを立ち上げていました。

Linux上でサーバーを立ち上げ、
編集などの作業はWindowsで行いたいな、と思ったので、
ホストPCとゲストPC間に共有フォルダ設定を行ったんですね。
多分ここまでは大丈夫だと思う。

で、WindowsからGitのCloneでDockerのリポジトリをダウンロードして、
ゲストPC先でDockerを起動、ビルドなどをしたところ、
…ビルドが通らない。

でも、他の人は出来たって言ってました。
同じ設定で通らないのか…等としばらく詰まっていました。
でも、これはGitの設定が原因だったんですね。


2.そのとき何が起こっていた?


Dockerが上手くいった人の環境を聞いてしばらくして
ようやっと原因が分かったのですが、
その人はMacで行っていました。

原因は改行コードですね…

LinuxやMacは改行コードはLFです。
Windowsは改行コードはCRLFです。
Git内で管理されているコードはLFで管理されていましたが、
Windows上にCloneしたリポジトリ内のコードはCRLFになっていました。

改行コードがCRLFで書かれているコードを共有して
Linux内で動作させるとどうなる?
…まあ、上手くいきませんよね。

というか、なんでCloneしただけなのに改行コードが変わってるんだよ?


3.犯人はデフォルト設定


Windows上でGitを使用する際に「Git For Windows」をインストールするのですが、
この時にデフォルト設定のままでインストールしていました。
どうもこのデフォルト設定のままだと、

・Pull時にはLF→CRLFに変換するよ!
・Commit時にはCRLF→LFに変換するよ!

という設定になっているらしいんですね。
犯人はコイツですね。

インストール後でもこの設定は確認できます。
下記のコマンドを実行します。

git config --global -l

ここで、「core.autoctrl」という設定がそうです。
下のはもう修正した状態のものですが、デフォルト設定だと「true」になっています。



4.改行コードを自動で変更する設定を変更する


と、まあ、
原因はGitの設定だった、ということですね。
そんなわけで、Gitの設定を直す方法です。

先ず確認、これはさっき書いたコマンドですね。

git config --global -l

で、変更するコマンドが下記のコマンドです。

git config --global core.autocrlf xxx

xxxに設定値を入れます。「true」「input」「false」があります。

・true
 -Pull時にLF→CRLFに変更する
 -Commit時にCRLF→LFに変更する
・input
 -Pull時は変更しない
 -Commit時にCRLF→LFに変更する
・false
 -Pull時は変更しない
 -Commit時も変更しない

今回は「true」以外なら、改行コードはLFのまま取得でき、
そのまま共有フォルダでLinuxで実行しても大丈夫そうですね。
自分は上の画像の通り「true」にしました。
この場合は下記のようなコマンドですね。

git config --global core.autocrlf input

この状態でCloneして取得したコードはちゃんと改行コードはLFのままでした。
そして共有フォルダ先のLinuxでも無事動作させることが出来ました。

いや~思わぬところに落とし穴。
結構ハマりました。
やっぱりなんか新しいことをすると、分からないことは出てくるね。

ちなみに、下記のコマンドを行うとviで設定ファイルを開くので、
ここで編集→保存して設定を変更することもできます。

git config --global -e

方法の一つとして覚えておくのはありかなって。





0 件のコメント:

コメントを投稿