前言

通常,为了管理代码,我们会在服务器上使用如下方法创建一个[裸库]

1
git init --bare [裸库]

但是裸库的问题,在于文件夹结构不正确,因此也只能用来管理代码,不能作为部署的项目。
代码地址、部署地址搞得太多之后,管理起来很麻烦,经常要做些重复的劳动。因此希望,代码管理和项目访问,能够统一起来
因此考虑用 git hook 的方式解决这个问题

方法

在服务端,创建一个正常的git库,而不是[裸库]

1
2
3
4
cd /root
git init 80
chmod -R 777 80
####给予库足够的权限,否则无法推送

设置可以被推送

通常情况下,只要 [裸库] 才能被推送代码,但是前文说过,我们这里的 [裸库] 不能满足项目需求,因此我们上一步选择了创建普通库,对于普通库,需要增加如下配置,才能接受代码推送

1
vim /root/80/.git/config

在最后,增加如下内容

1
2
[receive]
denyCurrentBranch = ignore

增加钩子(hook)

1
vim /root/80/.git/hooks/post-receive

创建post-receive钩子,增加如下内容

1
2
3
4
5
6
7
####!/bin/sh

unset GIT_DIR
NOW_PATH="/root/80/"

cd $NOW_PATH
git reset --hard

到这里还没结束,还需要进一步给post-receive文件设置权限,755

1
2
cd /root/80/.git/hooks
chmod 755 post-receive