在本地修改网站的文件,如果需要使用 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 后,就可以发现服务器下的那个文件夹发生变化了。