前幾天把 Hexo 博客部署到了阿里雲服務器,但發現每次推送文章都須要去服務器同步代碼。最終尋找到 git hook 來解決了這個問題html
更新於 2017.11.14
首發於夏味的博客: xiaweiss.comgit
在服務器,要建一個至關於 github 存放功能的裸倉庫來存儲代碼。 之因此叫裸倉庫,是由於這個倉庫只是爲了存代碼用的,沒有工做目錄,不能夠在它裏面查看改寫代碼。github
在網站文件夾下,會有一個工做目錄來存放代碼,這個目錄的代碼能夠像clone github代碼庫同樣,clone 服務器裏的裸倉庫。vim
當服務器裏裸倉庫收到提交進來的代碼後,會觸發 git hook 的 post-receive 事件,配置好的程序就能夠自動去工做目錄的倉庫執行 git pull,服務器代碼就自動更新了bash
遠程鏈接服務器,登陸 root 帳號服務器
新增用戶xiawei,這裏能夠寫你的名字微信
useradd xiawei
複製代碼
修改用戶密碼post
passwd 你的新密碼
複製代碼
給添加 sudo 權限 經過修改 /etc/sudoers學習
必須使用命令網站
visudo
複製代碼
按 i 鍵進入, 找到 root ALL=(ALL) ALL 而後下面添加 xiawei ALL = (ALL) ALL
root ALL=(ALL) ALL
xiawei ALL = (ALL) ALL
複製代碼
查看是否安裝 git
git --version
複製代碼
若是沒有看到版本號,則繼續安裝 git
yum install git
複製代碼
設置 git 用戶名郵箱
git config --global user.name "yourname"
git config --global user.email "your_email@example.com"
複製代碼
假設網站的在 /www/blog/ 目錄下,建立裸倉庫
cd /www
sudo git init --bare blog.git
複製代碼
更改所屬用戶和用戶組,得到權限
sudo chown -R xiawei:xiawei blog.git
sudo chown -R xiawei:xiawei blog
複製代碼
cd /www/blog
git clone /www/blog.git
複製代碼
若是此時 blog 文件夾不是空的,會不能 clone 按先定義倉庫,再設置遠端倉庫地址便可
cd /www/blog
git init
git remote add origin /www/blog.git
複製代碼
注意這時要刪除掉 index.html 等和本地待提交代碼重複的文件
rm index.html
複製代碼
cd /www/xiaweiss.git/hooks/
vim post-receive
複製代碼
按 i 鍵,將下面這幾行代碼粘貼進去
#!/bin/sh
unset GIT_DIR
cd /www/blog
git pull origin master
複製代碼
賦予 post-receive 文件可執行權限
chmod +x post-receive
複製代碼
最後修改 Hexo 配置文件裏 deploy項,每次發佈代碼會提交到這兩個倉庫
deploy:
- type: git
repo: git@github.com:xiaweiss/xiaweiss.github.io.git
- type: git
repo: xiawei@xiaweiss.com:/www/blog.git
複製代碼
若是是本地的其餘項目,能夠直接
git clone xiawei@xiaweiss.com:/www/blog.git
複製代碼
修改代碼後,提交便可