一、版本控制
1.1 团队开发问题
企业项目一般以团队形式实施开发,那团队开发中会出现哪些问题呢?
-
小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流——需求之一:备份!
-
这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这被改得面目全非的代码已经回不到从前了。什么地方能买到哆啦A梦的时光机啊?需求之二:代码还原!
-
小刚和小强先后从文件服务器上下载了同一个文件:
Analysis.java
。小刚在Analysis.java
文件中的第30行声明了一个方法,叫count()
,先保存到了文件服务器上;小强在Analysis.java
文件中的第50行声明了一个方法,叫sum()
,也随后保存到了文件服务器上,于是,count()
方法就只存在于小刚的记忆中了——需求之三:协同修改! -
老许是一位项目经理,他需要把每一个版本的项目都保存一份, 而且这些工程里其实有很多文件都是重复的,导致电脑空间经常不足 , 要找某个版本的时候也很麻烦——需求之四:多版本项目文件管理!
-
老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来说吧,有个该死的
Bug
调试了30多个小时才知道是因为相关属性没有在应用初始化时赋值!可是小强、小明、小刚和小军都不承认是自己干的!——需求之五:追溯问题代码的编写人和编写时间! -
小温这两天幸福的如同掉进了蜜罐里,因为他成功的得到了前台MM丽丽的芳心,可他郁闷的是这几天总是收到
QA
小组的邮件,要求他修正程序中存在的Bug
,可他自己本地电脑上是没有这些Bug的,“难道我的代码被哪个孙子给改了?”。是的,小温没来的时候,丽丽是QA
小组小郑的女朋友啊!——需求之六:权限控制
1.2 版本控制思想
要解决上面问题,需要引入新的思想:版本控制思想
版本控制: 版本控制(Revision control
)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化过程,以便将来查阅特定版本修订情况的系统。
版本控制深入程序员在团队配合中,如果你的项目没有版本控制: 一、 代码管理混乱。 二、 解决代码冲突困难。 三、 在代码整合期间引发BUG。 四、 无法对代码的拥有者进行权限控制。 五、 项目不同版本发布困难。 ......
1.2.1 版本工具
集中式版本控制(SVN)
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
下图就是标准的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
-
服务器单点故障
-
容错性差
分布式版本控制(Git)
Git是分布式版本控制系统,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。然后团队协作再通过远程仓库进行协作。
当然,Git
的优势不单是不必联网这么简单,后面我们还会看到Git
极其强大的分支管理,把SVN
等远远抛在了后面。
二、Git简介
2.1 简介
很多人都知道,Linus
在1991年创建了开源的Linux,从此,Linux
系统不断发展,已经成为最大的服务器系统软件了。
Linus
虽然创建了Linux
,但Linux
的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux
编写代码,那Linux
的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给Linus
,然后由Linus
本人通过手工方式合并代码!
你也许会想,为什么Linus
不把Linux
代码放到版本控制系统里呢?不是有CVS
、SVN
这些免费的版本控制系统吗?因为Linus
坚定地反对CVS
和SVN
,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS
、SVN
好用,但那是付费的,和Linux
的开源精神不符。
不过,到了2002年,Linux
系统已经发展了十年了,代码库之大让Linus
很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus
选择了一个商业的版本控制系统BitKeeper
,BitKeeper
的东家BitMover
公司出于人道主义精神,授权Linux
社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux
社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba
的Andrew
试图破解BitKeeper
的协议(这么干的其实也不只他一个),被BitMover
公司发现了(监控工作做得不错!),于是BitMover
公司怒了,要收回Linux
社区的免费使用权。
Linus
可以向BitMover
公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus
花了两周时间自己用C写了一个分布式版本控制系统,这就是Git
!一个月之内,Linux
系统的源码已经全部交由Git
管理了!牛是怎么定义的呢?大家可以体会一下。
Git
迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub
网站上线了,它为开源项目免费提供Git
存储,无数开源项目开始迁移至GitHub
,包括jQuery
,PHP
,Ruby
等等。
历史就是这么偶然,如果不是当年BitMover
公司威胁Linux
社区,可能现在我们就没有免费而超级好用的Git
了。
2.2 Git环境的搭建
2.2.1 Git的下载
我们使用Windows系统,所以安装Windows 版本的git软件。
一路“Next”使用默认选项即可,安装说明详情见 《git安装.docx》安装完成后,可以在任意文件夹点右键,看到如下菜单:
2.2.2 Git可视化客户端
TortoiseGit是一款开源的Git图形界面工具,使用TortoiseGit可以简化Git相关的操作(本质上还是执行的Git相关命令)。TortoiseGit下载地址: Download – TortoiseGit – Windows Shell Interface to Git
安装说明详情见资料下的《TortoiseGit安装》,基本上也是一路“Next”使用默认选项直到Finish完成。安装完毕后在系统右键菜单中会出现TortoiseGit的菜单项。
扩展操作
TortoiseGit 客户端可以让git文件图标根据不同状态显示不同效果,安装成功后,重启一下电脑就可以。
部分win7 win8 win10 系统即使重启,也显示不同,原因是系统图标显示与TortoiseGit 图标显示冲突导致的。
修复方式:解决git文件夹不显示图标问题_git没有图标-CSDN博客
三、Git 命令操作
3.1 初始化仓库
Git操作前需要初始化仓库,用于存储版本管理的项目代码,目前仓库有2种类型:
-
本地仓库:是在开发人员自己电脑上的仓库
-
远程仓库:是在远程服务器上的仓库(跟团队其他成员共用)
配置自己名称与邮箱账户,在公司一般是自己名称拼音与公司邮箱
git config --global user.name "Your Name"
git config --global user.email