當一個項目須要歸入到版本控制的時候,選擇的工具仍是比較多的,最多見的就是工具備CVS,SVN,GIT等。在平時的開發中視狀況而定,歷來就沒有最好的版本控制工具,只有最適合的工具。在這裏我習慣用git來管理本身的項目,固然以前使用svn管理的,可是當用了git工具就不肯意再用其它的工具來管理。這裏除了習慣以外,git的不少功能是svn不具有的,最簡單的就是離線提交,用git管理的項目你會發現整個項目的大小變化不大,不像svn那樣每一個目錄又有一個.svn 的目錄,並且會使項目的變得很大。關於git與svn的區別這裏就不詳細講解了,請參考(git與svn區別)。php
GIT項目管理html
GIT 項目自動部署python
對於自動部署咱們先虛擬一個應用場景,就是你的代碼倉庫是位於A服務器上,你的項目運行在B服務器上,這裏與WEB項目爲主。假設全部開發人員把開發代碼往A服務器上提交完以後,但願代碼會自動跟新到B服務器上。這樣就省去了人工部署項目的步驟,並且服務器上永遠都是最新的代碼。這裏須要強調的是A服務器上的倉庫初始化能夠有2種方式,那就是,git init 和 git init --bare ,對於這2種區別能夠參考 git init & git init --bare difference 這裏簡單的介紹一下,就是用git init 初始化是帶有工做目錄的(work tree),也就是能夠看到一個完整的項目,用--bare 就只能git相關的文件,沒有 work-tree 。這2種初始化方式取決於你的應用場景,值得注意的是 若是你採用 git init 初始化,那麼須要修改 ,.git/config 這個文件,讓它容許往這個倉庫推送代碼。linux
[receive] denyCurrentBranch = ignore
這裏實現自動部署有2中方案,以Linux平臺爲例:git
#!/bin/bash if [ -f "deploy.lock" ] ; then git pull origin master else git init git remote add origin git@server_ip:demo.git git pull origin master BASE_DIR="/var/www/html/demo" chown -R demo:www-data $BASE_DIR find -type d -exec chmod 750 {} \; find -not -type d -exec chmod 640 {} \; chmod u+x deploy.sh touch deploy.lock fi
這裏以demo這個用戶爲例,到遠程的服務器上下載最新的代碼,而後完成一系列部署,這裏須要說明的是 ubuntu 下 apache 默認及時用www-data 這個用戶和用戶組爲www-data 來管理項目的,這裏咱們把項目的全部者修改爲demo 這個用戶,用戶組任然是www-data。這個腳本完成以後就能夠把該腳本添加到定時任務中,這裏就不講解定時任務了,能夠參考 PHP定時任務實現 。這樣作的缺點就是不實時,優勢就是容易控制。github
[core] filemode = false
#!/bin/sh #GIT_DIR=$(git rev-parse --git-dir 2>/dev/null) unset $(git rev-parse --local-env-vars) cd /var/www/html/demo || exit echo "git status info:" git status echo "***************************" git pull origin master echo "--- Done! ---"
當這個腳本完成以後,只要代碼提交到A服務器上,A服務器上立馬執行鉤子函數,代碼就會從A服務器上項目的master分支自動跟新到B服務器上(運行環境上),這樣就完成了自動部署。這裏比較重要的就是用戶權限的問題。shell
DONE!apache