- 本来我搭建了一个git环境,可以实现代码上传提交,同时我提交的时候能够部署到网站目录下,google说需要执行post-receive脚本,但是我写了貌似也没被触发不知道什么情况
具体情况如下:
hooks下面的脚本文件,没有自带post-reveive.sample文件,我自己写的
脚本的内容
git用户配置
网站目录对git用户的权限使用setfacl -m d:u:git:rwx配置的
我在本地使用phpstrom进行git push上传,上传成功了
现在不知道怎么回事,求指点,谢谢!!
安装完git后,git自带有钩子脚本
比如我们的仓库是 /var/git-repository/myRepo.git
那么在/var/git-repository/myRepo.git/hooks目录下有很多脚本文件的示例
查看post-receive.sample文件是否存在如果存在
cp post-receive.sample post-receive
不存在
touch post-receive
sudo vi post-receive # 写入下面脚本
!/bin/bash
指定我的代码检出目录
DIR=/home/wwwroot/sowork/readingopen
git --work-tree=${DIR} clean -fd
直接强制检出
git --work-tree=${DIR} checkout --force
修改该文件所有者为git用户(上面安装git创建的用户)
sudo chown git:git post-receive
sudo chomd +x post-receive # 添加执行权限
然后当你push的时候就会将文件检出到你指定网站目录下
在git客户端push的话可以得到反馈,如果失败,可能是权限造成的
sudo setfacl -m u:git:rwx /home/wwwroot/sowork/readingopen # 添加git用户对网站目录下的写权限
当网站检出到网站目录下时,代码归属为git用户,假设我们的网站目录是www用户所管,那么他下面的所有目录没有权限去删除
如果想管理的话,可以
sudo usermod -a -G git www # 将www用户加入git组,同时git 组权限 能够有rwx 权限即可
不过一般不会有这种操作,因为每次代码检出都会覆盖网站,所以一般不建议在服务器上修改代码,只能由本地提交
有一些特殊的配置文件git可能不会提交,但是push的时候可能会将网站目录下的配置文件默认删除掉,所以我们将自定义的文件锁定掉或者本地和服务器上代码保持一致
sudo chattr +i /home/wwwroot/sowork/readingopen/.env # 锁定网站配置文件 当检出时不会被删除
修改时
sudo chattr -i /home/wwwroot/sowork/readingopen/.env #解除锁定
sudo vi /home/wwwroot/sowork/readingopen/.env #编辑,记住编辑完以后继续执行锁定操作,下面提交才不会被覆盖掉
还有一种办法是,在脚本里将生成的文件所有者修改为www,但是chown只有root用户才能操作,需要一些手段修改才行, 不推荐