😸
Gitのパーミッション差分問題の解決方法
どんな問題?
macで作業しても何も問題なかったのに、linuxでgit clone
とかgit pull
してたら、ファイルを何も変更してへんのに差分が出ることがある。
こんな感じで表示されるかも。
mode change 100644 => 100755 filename
ソフトによってはこんな表示もあるかも。
(Blob ▶ Executable)
これはファイルの実行権限の違いをGitが検知してるかららしいで。
原因は?
macとlinuxでは、ファイルシステムの扱いがちょっと違うねん。だから、同じファイルでも環境によってパーミッション(実行権限)が変わってまうことがあるって。
Gitはデフォルトでこのパーミッションの変更も「ファイルが変更された」って認識してまうから、差分として表示されてまうねんな。
解決方法
1. リポジトリごとに設定する
今作業してるリポジトリだけで、パーミッションの変更を無視したい場合:
git config core.filemode false
2. すべてのリポジトリで設定する
これから使うすべてのリポジトリで、パーミッションの変更を無視したい場合:
git config --global core.filemode false
設定できたか確認する
ちゃんと設定できたか確認してみよ:
git config core.filemode
false
って表示されたらOKやで!
既に差分が出てる場合
設定した後、差分がまだ残ってる場合は:
git status
で確認してみて。差分が消えてたらそのままで大丈夫やから!
補足
この設定をすると、ファイルの実行権限の変更はGitで管理されへんようになるんよ。
実行権限を意図的に変更したい場合(シェルスクリプトとか)は、別のコマンドが必要になるから覚えといてな:
git update-index --chmod=+x ファイル名
まとめ
- macとlinuxでパーミッションの扱いが違うことが原因らしい
-
git config core.filemode false
で解決できるらしい - 全体に適用したい場合は
--global
オプションをつけたらええみたい
困ったことがあったら、いつでも聞いてな!
Discussion