当一个项目须要归入到版本控制的时候,选择的工具仍是比较多的,最多见的就是工具备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