写于:2015-05-18		最近一次更新:2018-07-01

Intent:

使用git更新维护个人博客网站 使用git自动部署和更新网站代码

Oneway:

我习惯于随时随地的记录自己学到的新知识点, 大多数是在没有外网的情况下记录,而且, 我和我的好朋友一起在维护这个博客网站, 于是我做了以下操作 在服务器上的操作: [root@Slackware ~]# useradd blogAuthor -d /home/blogAuthor [root@Slackware ~]# su - blogAuthor [blogAuthor@Slackware ~]$ mkdir .ssh && touch .ssh/authorized_keys [blogAuthor@Slackware ~]$ chmod 0700 .ssh [blogAuthor@Slackware ~]$ chmod 0600 .ssh/authorized_keys [blogAuthor@Slackware ~]$ echo -n 'ssh-rsa AAA......Xo3 sman@diagmap' >> .ssh/authorized_keys [blogAuthor@Slackware ~]$ echo -n '我好朋友的公钥' >> .ssh/authorized_keys [blogAuthor@Slackware ~]$ git init --bare blog.git Initialized empty Git repository in /home/blogAuthor/blog.git/ [blogAuthor@Slackware ~]$ cd blog.git/hooks/ [blogAuthor@Slackware ~]$ mv post-receive.sample post-receive [blogAuthor@Slackware ~]$ echo 'git --work-tree=/var/www/html checkout -f' >> post-receive [blogAuthor@Slackware ~]$ chmod +x post-receive [blogAuthor@Slackware ~]$exit logout [root@Slackware ~]# chown -R blogAuthor /var/www/html 如果权限不对网站更新会失败,云服务器提供商可能会定期将此目录的权限重置为root [root@Slackware ~]# chsh -s /usr/bin/git-shell blogAuthor Changing shell for blogAuthor. Warning: "/usr/bin/git-shell" is not listed in /etc/shells. Shell changed. 接着在 /etc/ssh/sshd_config 文件中 AllowUsers 处添加 blogAuthor 用户, 重启 sshd 服务,使 blogAuthor 用户能够通过 ssh 认证 [root@Slackware ~]# exit logout 在自己的笔记本上的操作: sman@diagmap:~/blog$ ls 1.html 2.html 3.html index.html sman@diagmap:~/blog$ git init Initialized empty Git repository in /home/sman/blog/.git/ sman@diagmap:~/blog$ git add --all sman@diagmap:~/blog$ git commit -a -m 'first commit' [master (root-commit) 857b016] first commit 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 1.html create mode 100644 2.html create mode 100644 3.html create mode 100644 index.html sman@diagmap:~/blog$ git status # On branch master nothing to commit, working directory clean sman@diagmap:~/blog$ git remote add blog blogAuthor@slackware.com.cn:/home/blogAuthor/blog.git sman@diagmap:~/blog$ git config branch.master.remote blog sman@diagmap:~/blog$ git config branch.master.merge refs/heads/master sman@diagmap:~/blog$ git push 这样我在本地的网页文件就推送到服务器上了而且git会自动更新服务器上 /var/www/html 目录下的内容 我的好朋友只要克隆 blog.git 到他的电脑上就行了 friend@hisPC:~/hisDir$ git clone ssh://blogAuthor@slackware.com.cn:22/home/blogAuthor/blog.git 然后我们就能共同维护这个博客啦!
默认可能没有post-receive.sample这个文件,没关系,可以直接手动创建名为 post-receive 的sh脚本文件即可 post-update 和 post-receive 被触发执行的条件和时机是一样的,效果也是一样的,只是适用场景不同 可以 man githooks 详细查看 post-update 和 post-receive 的区别 另外注意, post-receive里的代码会比post-update里的代码先执行 再者使用post-update时要注意把代码写在 exec git update-server-info 前面, 即保持 exec git update-server-info 在最后一行,否则你的代码不会被执行