😸

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