MacでLinux Kernelをcloneするといじってないファイルがmodifiedされていると言われる現象
閲覧用にMac上にLinux Kernelをcloneしたところ、いじってないファイルがmodifiedであると言われて何もできなくなる事態が発生した。
具体的には以下のようなエラーメッセージが出力される。
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: include/uapi/linux/netfilter/xt_CONNMARK.h modified: include/uapi/linux/netfilter/xt_DSCP.h modified: include/uapi/linux/netfilter/xt_MARK.h modified: include/uapi/linux/netfilter/xt_RATEEST.h modified: include/uapi/linux/netfilter/xt_TCPMSS.h modified: include/uapi/linux/netfilter_ipv4/ipt_ECN.h modified: include/uapi/linux/netfilter_ipv4/ipt_TTL.h modified: include/uapi/linux/netfilter_ipv6/ip6t_HL.h modified: net/netfilter/xt_DSCP.c modified: net/netfilter/xt_HL.c modified: net/netfilter/xt_RATEEST.c modified: net/netfilter/xt_TCPMSS.c
検索したところ、以下のようなページが見つかった。
git - Linux Kernel sources modified on OSX right after clone - Stack Overflow
要するにHFS+ではファイル名の大文字と小文字の区別がつかないので、上のファイルは衝突してgitが混乱するというのが原因らしい。
実際に確認してみたところ、確かにinclude/uapi/linux/netfilter/xt_CONNMARK.hとinclude/uapi/linux/netfilter/xt_connmark.hというファイルが見つかった。
解決策は大文字と小文字が区別される専用のディスクイメージを作成し、その中でcloneするのが良いとのこと。ディスクユーティリティを開いて、ファイル→新規イメージ→空のイメージを作成から、フォーマットの欄で大文字/小文字を区別にすればcase-sensitiveなディスクイメージが作成できる。
結構回りくどいような…
回答者も言及しているが、Virtual Box等でVMを立ててLinux環境を作り、ssh越しに閲覧するのが早いと思う。emacs派ならTRAMPを使おう。