经过实践,下面的方法在Centos服务器配置成功,实现利用Git命令自动将版本库内容同步到网站目录,避免使用常见的ftp工具软件来上传更新网站文件。

1、在服务器上安装好Git环境后,创建裸版本库:

[root@remotehost]$ mkdir /home/git
[root@remotehost]$ cd /home/git
[root@remotehost]$ git init -bare webroot.git

在服务器/home/git目录下创建了一个webroot.git的裸版本库

2、创建web目录:

[root@remotehost]$ mkdir -p /home/www/webroot

设置网站目录权限为775:即用户组有写入权限。在ftp工具软件里面设置:

775.png

或者使用linux命令:

[root@remotehost]$chmod -R 775 ./www/webroot

假设当前网站目录webroot的所属用户组为apache,需要git用户添加一个所属用户组(注意:非去掉原来所属的用户组),让git用户有访问webroot目录的权限。

[root@remotehost]$ usermod -a -G apache git

3、在本机从服务器上克隆裸版本库,PC初始化一个版本库

[Administrator@pc]$ cd cd d:\workspace
[Administrator@pc]$ git clone git@git.yourdomain.com:/home/git/webroot.git

现在本地版本库目录:d:workspacewebroot

4、在服务器上设置钩子

[root@remotehost]$ cd /home/git/webroot.git/hooks

使用vi创建一个新的post-receive文件:

[root@remotehost]$ vi post-receive

输入以下内容并保存:

#!/bin/bash
git --work-tree=/home/web/wwwroot checkout -f

上面的 --work-tree对应网站根目录。
给新建的post-receive文件添加可执行权限,并将该文件的用户及用户组都设置成git:

[root@remotehost]$ chown git:git post-receive
[root@remotehost]$ chmod +x post-receive

现在配置过程基本结束。

在本地版本库工作区里开发,然后使用git push指令推送到远程裸版本库,钩子会使post-receive自动生效,远程服务器裸版本库接收到推送内容后会自动将版本库里的文件检出到--work-tree指定的/home/web/wwwroot目录里,实现和网站目录同步。

由于远程库是空的,我们第一次推送master分支时,需要加上-u参数:

git push -u origin master

如果你在Git push到远程服务器成功 但是在wwwroot目录下并没有发现自己的代码,一般是由于文件夹的权限的原因造成的。

可能用到的命令:
查看用户所属的用户组
1、groups 查看当前用户所属组
2、groups username 查看用户所属组

3、将已存在的用户添加到多个用户组
usermod -G groupname username (注意:这个命令会把用户从原来所属的用户组中去掉,只属于现在命令里面指定的用户组)
如:usermod -G git git (git只属于git组)

usermod -a -G groupname username (把用户添加到这个组,之前所属组不影响)
如:usermod -a -G apache git (git属于之前的git用户组,现在也同时属于apache用户组)。

标签: none

添加新评论