使用 git 同步管理自己的网站

在本地修改网站的文件,如果需要使用 ftp 上传,太麻烦,如果文件一多,也不知道哪个文件应该上传。传统方式,几个人同时对网站进行更改,就不容易区分了。这时用 git 管理项目就可以很容易看出来哪里的文件修改了。 前面有写过 通过 SSH 创建私有 git 仓库,此处在服务器上创建了一个公共的仓库,里面只是存放着文件的更改记录。我们可以看本地的文件,一个 project 里有 .git 文件夹,里面存放着更改记录,然后还有我们的具体的 project 的源代码。但是 git 服务器只存放着 .git 里的内容,没有本地的源代码。所以没办法直接更新网页。但是有个方法,既然我们的 git 历史记录在服务器上保存着,而且我们可以从 git 仓库中 checkout 出来源代码到服务器上,这样我们在本地 push,然后在服务器上使用 checkout,就可以改变网页的文件了。

在服务器上配置

第一步,新建一个 git 私有仓库 test.git。可以参考文章 通过 SSH 创建私有 git 仓库

$ mkdir /home/git/test.git # 将来网站 git 的记录存放位置
$ chown -R git:git test.git # 修改权限
$ cd test.git
$ git init --bare

Initialized empty Git repository in /home/git/test.git/

第二步,当客户端 push 到服务器来时,checkout 出来源码。

mkdir /home/www/test # 网站的目录地址
vi hooks/post-receive # 新建文件

输入以下内容

#!/bin/sh
GIT_WORK_TREE=/home/www/test git checkout -f
# or GIT_WORK_TREE=../test git checkout -f

添加可执行权限

chmod +x hooks/post-receive

post-receive 这个脚本在提交文件到 git 仓库时,会运行文件内的代码,所以通过这样的方法,我们在客户端 push 提交代码后,就能自动更新网站的文件了。 有时候 git 账号和网站账户可能不一样,以下脚本可以为更新的文件重新赋值权限,同样是修改 post-receive 这个脚本

#!/bin/sh
GIT_WORK_TREE=/home/www/test git checkout -f
# or GIT_WORK_TREE=../test git checkout -f

cd /home/www/test || exit
unset GIT_DIR
files=`git diff HEAD~3 --name-only --diff-filter=ACMRTUXB`;
for file in $files
do
    chown www:www $file
done

/home/www/test 为网站目录 HEAD~3 与第三版本比较 www:www 网站的用户名和组

在本地客户端配置

第一步,参考上边的文章,新建一个本地的仓库。

第二步,commit 文件。

第三步,push 文件到服务器上。在远端地址写入 ssh://git@youurl.com/home/test.git,然后输入密码,push 后,就可以发现服务器下的那个文件夹发生变化了。

除非注明, 风波竹林 文章均为原创,转载请以链接形式标明本文地址
本文地址: https://blog.fbzl.org/使用git同步管理自己的网站/

发表回复