前言
最近搞了个服务器,来放一些自己的小东西(代码)。想想 ftp 太麻烦(lower),于是选择了在服务器上搭建一个 Git,用来同步代码,特此做一个备忘录(注:我的服务器是 centos 7,lnmp 环境)。
一、在服务器安装 Git
1
yum install -y git
在安装完之后你可以运行 git 进行测试,看看是否安装成功(就不贴图了)。
二、在服务器上创建裸版本库
ps:远程仓库通常只是一个裸仓库(bare repository), 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说,裸仓库就是你工作目录中 .git 子目录内的内容。
在 /opt/git/aurora 下创建一个叫 aurora.git 的裸仓库:
1
2
3
mkdir /opt/git/aurora
cd /opt/git/aurora
git init --bare aurora.git //这里 git init 是初始化空仓库的意思,而参数 --bare 是代表创建裸仓库,这个参数一定记得带上
三、服务器上的裸仓库克隆
先确保本地是否安装 git
1
2
cd /home/www
git clone git-server:/opt/git/aurora/aurora.git aurora //其中的git-server即你服务器的公网IP地址
在这里如果没有配置公钥的话,会提示输入密码,这样每次就比较麻烦了,所以这里补充一下配置公钥:
配置公钥
1.服务器创建一个用户
1
adduser git //管理员帐户不需要加sudo
2.在服务器 git 用户文件夹配置信息
在git用户文件夹中,创建.ssh 文件夹,在.ssh 中 touch authorized_keys 文件
1
2
mkdir .ssh
touch .ssh/authorized_keys
3.用户生成 key
在客户端生成两个文件,执行如下命令,根据提示输入默认文件名,执行下去就好
1
ssh-keygen -t rsa
如图:
这我是直接将秘钥文件生成在了当前用户目录下的.ssh目录下,也可以在外面生成之后在复制进来。
注意到里面多了一个 config 文件,这是用来配置远程服务器信息的。
1
2
3
4
5
host git-server
user git
hostname 114.67.141.xxx
port 22
identityfile ~/.ssh/aurora
注意除第一行,其余要缩进一个 tab
这里的 git 替换为自己之前创建 key 时输入的用户名
hostname 后面替换为你的服务器 IP 地址
4.将公钥追加到服务器git用户下的 authorized_keys 文件中
1
2
cd /home/git/.ssh
vim authorized_keys
将公钥的内容追加到此文件中
5.重新 Clone 远程的代码仓库到本地
1
2
cd /home/www
git clone git-server:/opt/git/aurora/aurora.git aurora
git-server:表示我们在 config 文件配置的服务器 IP 地址,直接写 “git-server” 即可,当然,你也可以修改 config 文件里的名字
/opt/git/aurora/aurora.git:这个是远程服务器的仓库地址,按照实际情况自行修改
这样,会在客户端/home/www下创建一个名为 aurora 的文件夹(.git 会被省略)。
我们可以做一个测试,在/home/www/aurora 文件夹中添加一个文件,并提交。
推送到远程:
1
git push git-server:/opt/git/aurora/aurora.git master
实现自动同步到站点目录(www/aurora)
刚才我们往远程仓库推送了 readme.txt 件,虽然提示推送成功,但是我们现在在服务器端还看不到效果,如果服务器能够每次在我们上传代码后就将代码直接同步到服务器代码目录就好了。
自动同步功能用到的是 git 的钩子功能:
服务器端:进入裸仓库:/opt/git/aurora/aurora.git
1
cd /opt/git/aurora/aurora.git
创建 post-receive 文件
1
2
cd hooks
vim post-receive
在里面添加如下内容
1
2
git --work-tree=/home/www/aurora checkout -f
保存成功,退出,将该文件用户及用户组都设置成 git。由于该文件其实就是一个 shell 文件,我们还应该为其设置可执行权限(同时将/home/www/aurora 目录用户及用户组也设置为 git,不然客户端会提示没有上传权限)
1
2
chown git:git post-receive
chmod +x post-receive
可以看到,之前提交的文件已经可以看到了
说明
1.客户端中 ssh 登录,会默认读取用户目录下.ssh 文件夹的 config 文件 ssh 配置信息。
2.不论客户端还是服务器端,生成的公钥.pub 应拷贝到服务器上,私 key 自己使用。私钥一旦泄漏,任何人都可以通过该私钥提交代码。
备注: