这里只做过程的记录,不过多解释,首先要明白裸仓库和本地仓库的区别,不明白得去先了解其概念,然后再继续往下。
服务端
创建一个 git 专属用户
创建 git 用户,并且给予裸仓库的权限
$ useradd git
$ passwd git
$ chown -R git:git project.git
编辑 /etc/passwd
$ vim /etc/passwd
禁止该 git 用户使用 shell 登录系统
git:x:1000:1000::/home/git:/usr/bin/git-shell
找到 git 用户并将 shell 改为/usr/bin/git-shell
,git 用户可以正常使用 git 功能,但无法登录shell,为 git 用户指定的 git-shell 每次一登录就自动退出
创建 git 裸仓库
- 默认情况下
创建裸仓库
$ cd /home/git
$ git init --bare project.git
- 已经是 git 项目的情况下
将现有仓库导出为裸仓库
$ cd /var/www/project/
$ git init
$ cd /home/git/repositories/
$ git clone --bare /var/www/project/ project.git
$ cd /var/www/project/
// 在你的项目目录添加远程服务器
$ git remote add origin /home/git/repositories/project.git
$ cd /var/www/project/
// 提交初始化代码
$ git add .
$ git commit -m "init"
$ git push origin master
这里 project 本身就一个 git 项目了,但现在要将这个项目转为裸仓库
添加 post-receive 钩子
进入 hooks 目录,创建并编辑 post-receive
$ cd project.git/hooks
$ touch post-receive && vim post-receive
将当前裸仓库和 project 这个项目挂钩
GIT_WORK_TREE=/var/www/project git checkout -f
保存后给 post-receive 加上运行权限
$ chmod +x post-receive
上述中基本完成了裸仓库的部署,最主要的两步:
- 创建裸仓库
- 设置钩子进行同步
完成重点后,其他的都是锦上添花。
客户端
克隆项目
$ git clone git@<ip>:/home/git/project.git
<ip>
为「服务端」的 IP 地址,输入正确的密码后就能成功克隆
添加远程
$ git push -u origin master
测试 git 是否自动同步
打开两个终端 A 和 B,确保 A 和 B 在不同目录下,并且都进行了克隆
A 终端中进行修改并提交
$ echo 'hello' > index.html
$ git add .
$ git commit -m 'init'
$ git push
完成后以上步骤后 B 终端进行拉取
$ git pull
发现项目下存在 index.html 则代表自动同步部署成功
常见问题
推送后没同步
检查项目和 git 仓库目录权限,将其权限设为 git 用户
chown git:git /var/www/project/ -R
chown git:git /home/git -R
参考URL
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000
http://www.berlinix.com/it/autoweb.php
网友评论