git hooks实现项目自动部署

创建git用户

adduser git

创建裸仓库:

 git init --bare GitBook.git

更改仓库所属用户和组:

 chown -R git:git GitBook.git/

将本地PC秘钥添加到/home/git/.ssh/authorized_keys中,没有则创建

修改GItBook.git中的hook的post-receive文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE"
exit 1
fi

unset GIT_DIR
DeployPath="/var/www/GitBook"

echo "==============================================="
cd $DeployPath
echo "deploying the webapp"

git fetch --all
git reset --hard origin/master

time=`date`
echo "web server pull at webserver at time: $time."
echo "================================================"

更改文件用户:

chown -R git:git post-receive

更改文件权限:

chmod -R +755 post-receive

创建www文件:

 git clone ../GitBook.git

更改权限和用户:

chown -R www-data:www-data gitBookRepo/

chmod -R 775 gitBookRepo/

在本地git clone:

git clone git@*.com:/var/GitBook.git

将隐藏文件.git复制到要commit的文件夹中,使用git即可将本地文件在远端发布

可能出现的问题:

1
error: cannot open .git/FETCH_HEAD: Permission denied

解决方法:https://blog.fetdesign.com/archives/a2d5c370.html