###版本控制
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
虽然基于Git的工作流可能并不是一个非常好的实践,但是在这里我们以这个工作流做为实践来开展我们的项目。如下图所示是一个基于Git的项目流:
我们日常会工作在"develop"分支(那条线)上,通常来说每个迭代我们会发布一个新的版本,而这个新的版本将会直接上线到产品环境。那么上线到产品环境的这个版本就需要打一个版本号——这样不仅可以方便跟踪我们的系统,而且当出错的时候我们也可以直接回滚到上一个版本。如果在上线的时候有些Bug不得不去修复,并且由于上线的新功能很重要,我们就需要一些Hotfix。而从整个过程来看,版本控制起了一个非常大的作用。
不仅仅如此,版本控制的最大重要是在开发的过程中扮演的角色。通过版本管理系统,我们可以:
常用的版本管理系统有Git、SVN,但是从近年来看Git似乎更受市场欢迎。
###Git
从一般开发者的角度来看,git有以下功能:
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
####Git初入
如果是第一次使用Git,你需要设置署名和邮箱:
$ git config --global user.name "用户名"
$ git config --global user.email "电子邮箱"
将代码仓库clone到本地,其实就是将代码复制到你的机器里,并交由Git来管理:
$ git clone git@github.com:someone/symfony-docs-chs.git
你可以修改复制到本地的代码了(symfony-docs-chs项目里都是rst格式的文档)。当你觉得完成了一定的工作量,想做个阶段性的提交:
向这个本地的代码仓库添加当前目录的所有改动:
$ git add .
或者只是添加某个文件:
$ git add -p
我们可以输入
$ git status
来看现在的状态,如下图是添加之前的:
下面是添加之后 的
可以看到状态的变化是从黄色到绿色,即unstage到add。
在完成添加之后,我们就可以写入相应的提交信息——如这次修改添加了什么内容 、这次修改修复了什么问题等等。在我们的工作流程里,我们使用Jira这样的工具来管理我们的项目,也会在我们的Commit Message里写上作者的名字,如下:
$ git commit -m "[GROWTH-001] Phodal: add first commit & example"
在这里的GROWTH-001
就相当于是我们的任务号,Phodal则对应于用户名,后面的提交信息也会写明这个任务是干嘛的。
由于有测试的存在,在完成提交之后,我们就需要运行相应的测试来保证我们没有破坏原来的功能。因此,我们就可以PUSH我们的代码到服务器端:
$ git push
这样其他人就可以看到我们修改的代码。