当我们的代码上线部署到Linux服务器后,后期可能会对代码进行修改。如果直接在Linux服务器上修改有太多的不方便,所以大多数情况下我们会选择在Windows下修改,然后再把代码部署到Linux服务器。

那么问题来了,你有多少次修改代码,就要有多少次重新部署到Linux服务器,那么有什么方法可以实现,是每次在Windows下修改代码后自动部署到Linux服务器,那就是使用Git钩子

Git钩子

Git(hooks)钩子就是,就是Git事件发生时执行的一些动作。

Linux服务器需要的配置

1.创建git仓库
下面代码在tmp目录下,新建了testhook.git仓库

1
2
mkdir tmp/testhook.git
git init --bare

2.编辑hooks目录下post-update文件

进入到testhook.git/hooks文件下,可以看到下面存在以下文件

1
2
3
4
5
6
7
8
9
10
11
12
[xin@centos-vps testhook.git]$ cd hooks
[xin@centos-vps hooks]$ ll
total 40
-rwxrwxr-x. 1 xin xin 452 Jul 17 11:00 applypatch-msg.sample
-rwxrwxr-x. 1 xin xin 896 Jul 17 11:00 commit-msg.sample
-rwxrwxr-x. 1 xin xin 189 Jul 17 11:00 post-update.sample
-rwxrwxr-x. 1 xin xin 398 Jul 17 11:00 pre-applypatch.sample
-rwxrwxr-x. 1 xin xin 1704 Jul 17 11:00 pre-commit.sample
-rwxrwxr-x. 1 xin xin 1239 Jul 17 11:00 prepare-commit-msg.sample
-rw-rw-r--. 1 xin xin 1348 Jul 17 11:00 pre-push.sample
-rwxrwxr-x. 1 xin xin 4951 Jul 17 11:00 pre-rebase.sample
-rwxrwxr-x. 1 xin xin 3611 Jul 17 11:00 update.sample

修改 post-update.sample文件名为post-update

1
cp post-update.sample post-update

在 post-update文件中添加下列代码
下面代码含义:每当有客户端向linux服务器提交代码的时候,自动将testhook.git仓库中代码checkout到/xinfile/tmp/code目录下

1
git --work-tree=/xinfile/tmp/code --git-dir=/xinfile/tmp/testhook.git checkout -f

至此Linux服务器端的配置就完成了

Windows下使用Git自动部署到Linux服务器

通过SSH协议clone Linux远程服务器的代码仓库到windows

1
2
3
git clone xin@<hostname>:/xinfile/tmp/testhook.git
#hostname: 代指Linux服务器地址
#/xinfile/tmp/testhook.git代指git仓库所在服务器的路径

当在windows下修改的代码push到linux server,就会自动更新到Linux目录/xinfile/tmp/code