2
0

More than 1 year has passed since last update.

Git 権限777のファイルなのに755で登録される

Posted at

概要

  • Git管理されいているファイルの権限を任意の権限から777に変更した。差分を確認すると「644 → 755」に変更された旨の内容が出た。どうして777のファイルが755で扱われているのか気になって調べてみた。

Gitはファイルの権限情報を基本は保持しない

  • 当たり前と言ったら当たり前なのだがGitはファイルの中身の差分しか基本的に保持しない。
  • ただし例外的にcore.filemodeという設定がtrueになっているときだけ権限情報を保持する。
    • core.filemodeの設定値はローカルリポジトリで$ git config -lを実行した出力内容の中に記載されている。
  • しかしcore.filemodetrueになっていようともGitが管理する権限はファイル所有者の権限が「読み書き実行(7)」かどうかのみ保持する。

そもそもファイルの権限とは

  • Linuxのファイルの権限は下記の3種類である。
    • 読み
    • 書き
    • 実行
  • その権限にはそれぞれ整数が振られている。
    • 読み → 1
    • 書き → 2
    • 実行 → 4
  • 権限は整数の足し算で表される。
  • 例えば「読み、書き、実行」権限がある場合「1 + 2 + 4 = 7」ということになる。
  • Linuxのファイルに対するユーザーは書きの3種類である。
    • 所有者
    • 同グループユーザー
    • その他ユーザー
  • Linuxのファイル権限は必ず「3種類のユーザー」に対して設定され、「所有者、同グループユーザー、その他ユーザー」の順番で表される。
  • 例えば下記のような権限のファイルがあったとする。
    • 所有者が「読み書き実行(7)」できる
    • 同グループユーザーが「読み実行(5)」できる
    • その他ユーザーが「読み実行(5)」できる
  • その場合当該ファイルの権限は「755」となる。

core.filemodetrueだったとして

  • 設定がONだったとしてもファイル所有者の権限がファイル所有者の権限が「読み書き実行(7)」かどうかのみGitは保持すると記載した。これはどういうことなのか。
  • これは例えば「721」という権限のファイルだった場合、頭の7、つまり当該ファイルの所有者の権限が「読み書き実行」かどうかだけを保持する。
  • そしてGitは権限の頭の数値が7の場合、強制的に「755」として保持する。
  • なのでファイル権限が「777」だろうが「711」だろうが「741」だろうが頭の数値が7の場合必ず「755」として保持する。
  • 逆に頭の数値が7以外の場合、権限が何であろうとも「644」として保持する。

まとめ

  • Gitは基本権限情報を保持しない。
  • core.filemodeという設定がtrueになっていると権限情報を保持する。
  • ただし、ファイル所有者の権限が「読み書き実行(7)」かどうかしか保持しない。
  • ファイル所有者の権限が7の場合Gitは「755」として権限を保持する。同グループユーザーやその他ユーザーの権限は何であれ関係ない。とにかく権限の頭が7なら「755」として保持する。
2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0