linux git同步web,在linux下搭建git服务器,并实现web目录同步更新

git作为php开发者常用的一款分布式版本控制系统,在工作中我们可能会遇到要自己搭建git服务器的情况,在此简单介绍下在linux系统下如何搭建git服务器,希望对大家有所帮助。

1、安装git

Linux服务器端:#yum install -y git

安装完后,查看 Git 版本

[root@localhost ~]# git --version

git version 1.8.3.1

Windows客户端:

安装完之后,鼠标右键可以使用 Git Bash 作为命令行客户端。

linux git同步web,在linux下搭建git服务器,并实现web目录同步更新_第1张图片

安装完之后,查看 Git 版本

$ git --version

git version 2.10.2.windows.1

2、服务器端创建git用户并设置密码

[root@localhost home]# id git

id: git:无此用户

[root@localhost home]# useradd git

[root@localhost home]# passwd git

3、在服务器端创建裸仓库

设置 /git/gittest.git 为 Git 仓库

然后把 Git 仓库的 owner 修改为 git

[root@localhost ~]# mkdir /git

[root@localhost ~]# git init --bare /git/gittest.git

Initialized empty Git repository in /git/gittest.git

[root@localhost ~]# cd /git

[root@localhost git]# chown -R git:git gittest.git

4、在客户端clone远程仓库

在你需要存放项目文件的目录下鼠标右键,打开Git Bash,输入clone命令

$ git clone [email protected]:/git/gittest.git

由于还没有配置公钥,首次克隆会提示输入git用户密码。

5、配置公钥

在Windows用户主目录下,先看看有没有.ssh目录,如果有再看看有没有id_rsa和id_rsa.pub两个文件。如果没有,那就打开Git Bash,输入命令进行创建:

$ ssh-keygen -t rsa -C "[email protected]"

此时 C:\Users\用户名\.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub

linux git同步web,在linux下搭建git服务器,并实现web目录同步更新_第2张图片

接下来要打开linux服务器的rsa认证,进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

保存并重启 sshd 服务:

[root@localhost ssh]# /etc/rc.d/init.d/sshd restart(注意:部分系统版本可能会报文件不存在的错误,因为不同系统其重启sshd的命令不同,如centos7的命令应为:systemctl restart sshd.service)

由AuthorizedKeysFile得知公钥的存放路径是 .ssh/authorized_keys,实际上是$Home/.ssh/authorized_keys,由于管理Git服务的用户是git,所以实际存放公钥的路径是/home/git/.ssh/authorized_keys,在/home/git/下创建目录.ssh,然后把.ssh文件夹的owner修改为git.

回到客户端的 Git Bash 下,导入文件:$ ssh [email protected] 'cat >> .ssh/authorized_keys' 

此时需要输入服务器端 git 用户的密码(注意这里的ip地址为你们自己服务器的ip地址)

回到服务器端,查看 .ssh 下是否已经存在 authorized_keys 文件。(其实也可以自己新建authorized_keys文件,然后将id_ras.pub文件里的公钥复制进去就可以,一般多客户端操作就是直接在后面追加各个客户端的公钥在后面)

authorized_keys文件其实就是这样子的,每一行放一个客户端的公钥

4c1dab77a2056ab8e5fa4832cbefd9fd.png

重要:为了服务器的安全,我们需要设置一下文件的权限

修改 .ssh 目录的权限为 700

修改 .ssh/authorized_keys 文件的权限为 600

[root@localhost git]# chmod 700 .ssh

[root@localhost git]# cd .ssh

[root@localhost .ssh]# chmod 600 authorized_keys

完成以上操作后,以后我们再clone就不需要输入密码了。

6、实现自动同步到站点目录

至于网站的运行环境怎么搭建这里就不赘述了,我们假如你在home/wwwroot下有个网站目录kaky,我们现在要做的就是当git仓库gittest.git发生更新时自动同步到我们的网站目录kaky上。

为了完成这个功能我们需要用到git的钩子功能(hooks),关于hooks更深入的知识大家就自行去搜索学习吧。

服务器端:进入我们的裸仓库:/git/testgit.git

cd /git/testgit.git

cd hooks

//这里我们创建post-receive文件

vim post-receive

//在该文件里输入以下内容,wq保存后退出

#!/bin/bash

git --work-tree=/home/wwwroot/kaky checkout -f

//将该文件用户及用户组都设置成git

chown git:git post-receive

//由于该文件其实就是一个shell文件,我们还应该为其设置可执行权限

chmod +x post-receive

现在我们就可以更新客户端的文件,然后push到服务器端试试,看看文件是否会同步到网站目录kaky上。

如果你在Git推送的工程中发现推送成功 但是在www目录下并没有自己的代码,这时候你可要注意了:这是由于文件夹的权限的原因造成的!

假设你的www目录的所属的用户组为root,你可以将你的git用户加入这个组;并给git添加写入权限,或者其他解决方法,反正你要服务器上的git用户有权限进入www文件夹。

你可能感兴趣的:(linux,git同步web)