更新:我确认确实发生了导致此问题的文件权限。我的主机出于安全原因安装了suPHP,如果我没有设置适当的权限(文件夹为755,文件为644),则会导致500错误。
不幸的是,有了这些权限,我无法通过git将更改推送到该文件夹。
尝试使用权限,这样我仍然可以安全,同时还可以使用git进行部署。
======================================
======================================
我有一个非裸的远程存储库,我在本地工作后推送更改。
我的本地机器有Ubuntu 14,我的远程服务器有Cent OS。两者都使用Git版本1.9.1。
由于以下原因,我能够推送到远程存储库的主分支:
git config receive.denyCurrentBranch ignore
以下保存在“.git / hooks / post-receive”
中GIT_WORK_TREE=../ git checkout -f
它是可执行的(chmod + x)。
最近,在尝试执行“git push dev master”之后,似乎没有问题,因为它会成功推送。
当我通过SSH连接到远程存储库并执行“git log”时,它会显示我列出的最新提交。但是,在检查文件时,更改不存在。
当输入“git branch”时,我看到我当前在Master分支上(输入“git checkout master”确认我已经在主分支上)。
我看到更改的唯一方法是在git日志中查找最近的提交,然后键入“git checkout [commit ID]。”
执行此操作会显示更改,但我的权限会更改,我不得不使用bash脚本将权限更改为所需的权限。
可以采取哪些措施来防止此问题发生?
答案 0 :(得分:0)
以下是我的发现:
1。)文件权限是在“git push”之后未成功进行更改的原因。 我对文件权限进行了更改(而不是664)而不是644,并且可以推送更改。
2。)git push后文件权限会发生变化。 我试图将我的index.php文件保留在644以防止在服务器上发生500错误,但在任何“git push”之后(无论我是否编辑了index.php文件),它都会自动更改为664权限。
3.。)将“umask 022”添加到我的接收文件中修复了该问题 我现在已经成功地能够在保留正确权限的情况下推送到我的远程存储库。
以下答案帮我解决了这个问题: Git change default umask when update file
对于那些不了解umask的人,本文对我说得很好: http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html