Git post-receive プルされない

広告

前置き


以前の記事で、gitでhookのpost-receiveを使用して、プッシュされたら本番環境に反映をプルさせるということをしました。

フレームワークを使用していると特にパーミッションが大事になってくると思います。
本番環境の一部ディレクトリのパーミッションを変更したらhookが失敗するようになりました泣

ちなみにリモートリポジトリのpost-receiveは以下のようになってます。
※リモートリポジトリにプッシュがかかったら変更を反映させたい本番環境にプルさせてる。
#!/bin/sh
cd /var/www/html/本番環境/
git --git-dir=.git pull

原因は本番環境(git cloneで作成)の一部ディレクトリのパーミッションを直接変更させたから。
当たり前といえば当たり前ですが、パーミッションの変更で以下のようにdiffが出てます。
そのせいで本番環境で差分が生じ、プルできなくなっているようです。
# git diff
diff --git a/app/views/sample/hoge.phtml b/app/views/sample/hoge.phtml
old mode 100644
new mode 100755
diff --git a/app/views/sample/hoge.phtml.php b/app/views/sample/hoge.phtml.php
old mode 100644
new mode 100755
diff --git a/app/views/sample/hoge2.phtml b/app/views/sample/hoge2.phtml
old mode 100644
new mode 100755
diff --git a/app/views/sample/hoge2.phtml.php b/app/views/sample/hoge2.phtml.php
old mode 100644
new mode 100755

そこで「パーミッションの変更を無視する」設定をすることで再びpost-receiveが動作してくれるようになりました!
こんな措置が最適とはとても思えませんが、一応メモ。

解決策


core.filemodeのfilemodeをfalseにすればOKです。
やり方は二つあります。

コマンドで変更


変更
# git config core.filemode false
確認
# git config -l | grep filemode
core.filemode=false

設定ファイルを変更


# vi プロジェクトフォルダ/.git/config
filemode = true => filemode = falseにする

以上!
もっとベストな改修を発見次第、記事を更新予定。

参考


https://blog.t5o.me/post/20121119/git-chmod-git-config-core-filemode.html
https://qiita.com/ayies128/items/6cea9be7d47101510f14
広告


おススメコンテンツ


この記事を読んだ人におススメな記事
Centos7 最新Gitインストール

Centos7 最新Gitインストール

Git 2018-09-24
SourceTree + Gitでプロジェクト管理

SourceTree + Gitでプロジェクト管理

Git 2018-09-25
Git  .gitignoreでファイルの更新を監視しないようにする

Git  .gitignoreでファイルの更新を監視しないようにする

Git 2018-09-30

Profile