CygwinでGitを使うと.gitconfigが効かない問題

Windows機にCygwinを入れ、その上でGitを使おうとして少しハマったのでメモ。

現象

  • git cloneしたリポジトリのファイルフォーマットがDOS形式になっている

僕はGitHubでdotfilesを管理し、Zsh / Tmux / Vimの設定ファイルをほぼ自動でデプロイできるようにしている。

以前にCygwin環境を構築したWin機では、特に問題なく設定ファイルを使用できていたので、 今回も同じようにリポジトリをcloneし、インストール用のスクリプトを動かそうとすると、 下記のように怒られた。

'r\' command not found

これはWindowsLinux系で改行コードが違うことから発生する問題で、cloneしたリポジトリ内のファイルの fileformatをいくつか見てみると、確かにすべてDOS形式になっていた。


試したこと

適当にググって、以下のことを試した。

clone時の改行コードの変換設定を変更

Cygwin内で以下のコマンドを実行。

> git config --global core.autocrlf input

~/.gitconfigに以下の設定が追加されていることを確認。

……
[core]
    autocrlf = input
……

この状態でリポジトリを再cloneするも、解決せず。

どうやら.gitconfigが効いていない様子。

GitHubから直接ZIPファイルを落とす

さすがにファイルフォーマットはunixになっていて、デプロイも問題無く行うことができた。

しかし、ZIPファイルでダウンロードしてきたリポジトリには.gitフォルダが作成されないので、 リポジトリに変更があった際にgit pullできず、その都度最新のZIPを落として展開……などという 無駄につらい作業が発生してしまう。

また、この手段では今回の問題の本質的なところは解決せず、別のリポジトリを取得して実際に開発を行う場合に 結局同じ問題が発生することになるので、この案は最悪の手段として一旦保留にした。


解決

何気なくwhich gitしてみたら、なんと以下のように表示された。

> which git
/cygdrive/c/Program Files/Git/cmd/git

以前同機にインストールした、Git for Windowsのgitコマンドのパスだ。 原因はこれだった。

Git for Windows~/.gitconfigではなくWindowsユーザーフォルダ直下の.gitconfigを見に行くため、 ~/.gitconfigをいくら編集しても意味が無かったということだった。

Git for Windowsはもう使っていなかったのでアンインストールし、Cygwinのsetup.exeでgitをインストールすると問題が解決した。

setup.exeでgitをインストールするのを忘れていて、かつGit for Windowsのおかげでgitコマンドが使えてしまっていたせいで時間をとられてしまった。