實現git push
直接完成代碼部署到服務器的目錄php
利用git
的hooks中的post-receive
來實現代碼提交完成以後的動做。將倉庫指定一個--work-tree
而後進行檢出操做checkout --force
git
我本身的項目結構是這樣的,每個倉庫對應一個項目,例如public/wx
項目對應repo/wx.git
倉庫web
. ├── public │ └── wx // 這是咱們的web代碼部署目錄 │ ├── index.php │ ├── test2.php │ ├── test3.php │ └── test.php └── repo // 這個是咱們的倉庫目錄 └── wx.git // 這個對應wx項目的倉庫 ├── branches ├── config ├── description ├── HEAD ├── hooks // post-receive鉤子代碼寫在這裏面 ├── index ├── info ├── objects └── refs
再看下hooks文件目錄服務器
. ├── applypatch-msg.sample ├── commit-msg.sample ├── post-commit.sample ├── post-receive ├── post-receive.sample ├── post-update.sample ├── pre-applypatch.sample ├── pre-commit.sample ├── prepare-commit-msg.sample ├── pre-rebase.sample └── update.sample
咱們將post-receive.sample
複製一份post-receive
,而且編寫代碼以下app
# 指定個人代碼檢出目錄 DIR=/www/public/wx git --work-tree=${DIR} clean -fd # 直接強制檢出 git --work-tree=${DIR} checkout --force
上面看到的repo目錄中的wx.git
其實是一個裸倉庫,咱們用下面的命令來生成這樣一個倉庫。ssh
cd /www/repo git init --bare wx.git
對於代碼部署目錄和倉庫咱們已經經過post-receive
進行了關聯了,由於咱們一旦將代碼push到倉庫,那麼會自動檢出到publish/wx
目錄下。post
在本地電腦上,咱們添加遠程倉庫測試
git init git remote add origin root@xxx.xxx.xxx.xxx:/www/repo/wx.git
這個時候咱們添加了遠程倉庫,那麼咱們來測試下push
操做code
touch index.php git add . git commit -m 'test' git push
可能會提示一個--set-upstream
,直接執行下就行了。執行完以後咱們登錄服務器,會發現文件已經出如今public/wx/index.php
ip
ssh免密碼登錄
的話,咱們須要在push
代碼的時候輸入密碼root@xxx.xxx.xx.xx
,例如是abc@xx.xx.xx.xx
,那麼咱們要確保abc
用戶對wx.git
目錄下的文件有777
權限。repo_name.git
倉庫public/repo_name
文件夾,而且修改權限爲777hooks/post-recieve
文件,修改裏面的DIR路徑爲public/repo_name