はじめに
gitでfile permissionの変更が検出され、少し手を焼いたので調べたことと対処方法を載せておきますOS:Windows-WSL(Ubuntsu 20.0.4)
VScode + forkでgit周りの作業をしています
結論
`git config --local core.fileMode false` で解決します症状
いつも通りmasterを`git pull`しようと思ったら、error: Your local changes to the following files would be overwritten by merge:
とエラーが出てきました。これは、
「localにあるファイルが変更されてて、mergeする時に上書きされてしまうで」
ということなので、git stash
なり、git add -> git commit
すればいいのですが、git stash
も
discard change
もできないので困りました。ファイルの差分をVScodeで見ても何も変更がありません。forkで確認すると、ありがたいことに以下の記述が。
changed file mode 100755 → 100644
chmodコマンドを使用した覚えはないものの、file permission(読み込み限定とか、変更できるユーザーが限定されるとか、そういうやつ)が書き換わっていたようです。
解決策
少しググってみると、同じような症状に会った人の英語記事が出てきたので読みました。ざっくり要約すると①Gitはファイルの所有者の変更のみ検出する ②ファイルをcheck out した時に、PC環境によってはfile permissionが変わり得る ③Gitの設定で検出をオフにできる ③repoのcontributerにWindowsユーザーがいるときはオフにしといた方がいい(おまけ)
ということでした。pullしたリポジトリは自分だけWindowsメインで開発しているので、それが原因でfile permissionが書き換わっていたようです。
ということで、ターミナルでlocalの設定を調べると
$ git config --get --local core.filemode
true
localではfile permissionの変更が検出されるようになっていました。これを変えてあげればいいので
$ git config --local core.fileMode false
$ git config --get --local core.filemode
false
これでいいですね。僕の環境では実行直後にlocal changesが綺麗になくなりました。