這個世界是由懶人驅動的。 PS: 參考這類技術文章還是要找原文,國內的翻譯,不說了。
之前常用的部署代碼就是用svn,或是更老土的ftp。每次的git pull實在是一個讓人煩躁的東西,就網上查找了一下,發現git-hook 是個好東西。參考原文
實現原理是當我們push 代碼到remote repository
時,通過git的post-receive hooks
。執行
git checkout prod -f
來幫助我們實現自動部署。
1. 在本地創建一個git repository
$ mkdir test && cd test
$ git init
$ echo 'Hello, world!' > index.html
$ git add index.html
$ git commit -q -m "init"
index.html
就是我們希望能夠部署到服務器的代碼
2. 然后在服務器創建一個repository
要注意,服務器要設置兩個目錄,一個是 git 目錄,一個是代碼目錄。服務器的git目錄和本地的代碼目的都要指向服務器的代碼目錄。
這里可不是服務器部署代碼的位置
$ mkdir test.git && cd test.git
$ git init --bare
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/dir/to/your/webpage/root git checkout -f
#!/bin/sh
GIT_WORK_TREE=/root/www/test git checkout -f // 這個是我的網站路徑,這就是服務器git目錄指向服務器代碼目錄的方式
$ chmod +x hooks/post-receive
這是服務器的git代碼目錄
/dir/to/test.git
這里的 /root/www/test
就是我將要部署服務器代碼的位置,一般的lamp,我們喜歡放在www里,當然這里需要根據不同的環境更換就好了。
3. 在本地的git目錄下增加一個remote
$ git remote add web ssh://root@47.93.234.60:/root/www/test.git
$ git push web +master:refs/heads/master
server_address 可以是 ip,域名。
也可以使用 SourceTree 來實現上面兩個步驟。
這時我們切換到服務器目錄下,就可以看到我們的index.html
在我們向web push
的之后,已經自動check out
到我們指定目錄下了。
之后我們只需要修改完成之后,git push web
就可以自動部署代碼了。
SourceTree
- New Repository -> add Existing Local Repository -> 選中本地代碼目錄
- 更改文件后添加并push即可。
我的做法是把 hexo 的 public 目錄作為本地代碼目錄,編譯生成靜態文件后通過git上傳到服務器代碼目錄,然后nginx將站點指向服務器代碼目錄即可。服務器上不需要配置hexo,只保留靜態文件即可。
在本地寫markdown文件并調試好再上傳。
最后還是決定同步整個 hexo 文件夾。本地和服務器都可以做更改。但在服務器上做的更改需要注意,可能會被本地的更改沖掉。所以盡量在本地做更改。