• 前言

有同事反馈创建分支时出现了错误,查看walle日志发现报错如下

[www@localhost Demo]$ git push origin  newer
Total 0 (delta 0), reused 0 (delta 0)
remote: warning: unable to unlink app/folder/index.html: Permission denied
remote: warning: unable to unlink source/js/demo/demo.js: Permission denied
remote: fatal: cannot create directory at 'app/Ctl/commands/shell/demo': Permission denied
To git@192.168.100.200:/home/git/Demo.git
 * [new branch]      newer -> newer

这里有几点需要注意下

  • 1、用户为www,不是root
  • 2、涉及到push时才会有此报错

  • 分析

一开始以为是php执行命令时权限有问题,因为执行php命令的用户是www,所以可以直接在www用户下执行相关命令,执行相关命令后和日志中打印的情况一样,

1、到这里就查google了,查了半天也没有结果,大多数都是权限的问题,但是在这里修改权限后并没有解决问题,

2、用其它的仓库做测试,没有发现此类问题,这里就挑选了一个权限控制比较严格的仓库,然后在远程克隆后,做提交测试没有发现异常

3、在网上继续查阅的时候,发现有网友有遇到类似的问题的时候和服务器端的hook有关,然后就做了以下测试

  • a、对比发现,两个仓库确实一个有hook文件,post-receive,这就是一个shell脚本,和客户端推送有送的,即远程客户端有推送操作,就会自动执行此脚本,而另外一个idme钩子脚本
  • b、将钩子文件暂时挪走后,再测试,一切正常

4、到这里问题就比较明朗了,和钩子有关

5、从报错信息来看,只能和权限相关,再联想到钩子文件,惟一可能有关联的就是钩子文件里面涉及到的路径(因为一般情况就是,有合并master操作,然后把master分支代码拉到指定的位置)

6、测试后发现问题奇迹般的解决了

到这里,其实也不怨git,因为他只知道报错了,但是不记录执行那个步骤时出错了,因为执行相关的操作没有问题,但是就是有报错信息

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐