EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

gitで管理するシェルの実行権限について

弊社では、Linuxサーバー上で使用するシェルをgitで管理しているのですが、Windowsで作業しているメンバーが「シェルに実行権限を付けた状態でgitにcommitできない」と言っていたので、調査をしてみました。

はじめは、「gitはファイル実行権限についてはリポジトリ管理していないのかな?」くらいに思って、はじめにファイル追加する時に設定した権限が活きてしまうのかと想定しました。 それで、自分の環境ですでに追加済みの"実行権限無し"のファイルに実行権限を与えて、git diffを取ってみると

$ ls -al

-rw-r--r--    17:38 README.md

$ chmod a+x README.md
$ git diff

diff --git a//README.md
old mode 100644
new mode 100755

・・・普通に権限を認識していました。

git commit

$ git add README.md
$ git commit -m 'chmod test'
[master 006af9e1] chmod test
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 README.md

普通にできました。

なので、今まではシェルに権限が無い前提で、サーバー上でgit pullする際に、シェルファイルに実行権限を与えるシェルでpullしていた(ややこしい)のですが、そのシェルで実行権限を与えた後にgit addしてgit commitしたら、リポジトリ 上で実行権限が付いている状態にできました。

そもそも何が問題だったのかを想像したのですが、

あたりの関連で、作業中に消えてしまったり、そもそも権限無しで上げてしまったりしていたのかなと思いました。