Git 简介及安装
一、版本控制
1、团队开发问题
企业项目一般以团队形式实施开发,那团队开发中会出现哪些问题呢?
-
需求一:备份 – 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流。
-
需求二:代码还原 – 这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这被改得面目全非的代码已经回不到从前了。什么地方能买到哆啦A梦的时光机啊?
-
需求三:协同修改 --小刚和小强先后从文件服务器上下载了同一个文件:
Analysis.java
。小刚在Analysis.java
文件中的第30行声明了一个方法,叫count()
,先保存到了文件服务器上;小强在Analysis.java
文件中的第50行声明了一个方法,叫sum()
,也随后保存到了文件服务器上,于是,count()
方法就只存在于小刚的记忆中了。 -
需求四:多版本项目文件管理 – 老许是一位项目经理,他需要把每一个版本的项目都保存一份, 而且这些工程里其实有很多文件都是重复的,导致电脑空间经常不足 , 要找某个版本的时候也很麻烦。
-
需求五:追溯问题代码的编写人和编写时间 – 老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来说吧,有个该死的
Bug
调试了30多个小时才知道是因为相关属性没有在应用初始化时赋值!可是小强、小明、小刚和小军都不承认是自己干的! -
需求之六:权限控制 – 小温这两天幸福的如同掉进了蜜罐里,因为他成功的得到了前台MM丽丽的芳心,可他郁闷的是这几天总是收到
QA
小组的邮件,要求他修正程序中存在的Bug
,可他自己本地电脑上是没有这些Bug的,“难道我的代码被哪个孙子给改了?”。是的,小温没来的时候,丽丽是QA
小组小郑的女朋友啊!
2、版本控制思想
要解决上面问题,需要引入新的思想:版本控制思想
版本控制(Revision control
): 是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化过程,以便将来查阅特定版本修订情况的系统。
2.1、版本控制工具
集中式版本控制(SVN)
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
下图就是标准的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
- 服务器单点故障
- 容错性差
分布式版本控制(Git)
Git是分布式版本控制系统,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。然后团队协作再通过远程仓库进行协作。
当然,Git
的优势不单是不必联网这么简单,后面我们还会看到Git
极其强大的分支管理,把SVN
等远远抛在了后面。
二、Git 简介
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
了。
三、Git 环境的搭建
1、Git 下载
我们使用Windows系统,所以安装Windows 版本的git软件。一路“Next”使用默认选项即可,安装完成后,可以在任意文件夹点右键,看到如下菜单:
2、Git可视化客户端
TortoiseGit是一款开源的Git图形界面工具,使用TortoiseGit可以简化Git相关的操作(本质上还是执行的Git相关命令)。
TortoiseGit下载地址: https://tortoisegit.org/download/
安装 TortoiseGit,基本上也是一路“Next”使用默认选项直到Finish完成。安装完毕后在系统右键菜单中会出现 TortoiseGit 的菜单项。
三、Git 可视化客户端图标说明
1、可视化图标说明
一个新的检出的工作树会有一个绿色的勾号作为覆盖。表示 Git 状态正常。
一旦开始编辑文件,状态就会变为*“已修改*”,然后图标覆盖将更改为红色感叹号。这样,您可以轻松查看自上次更新工作树以来更改了哪些文件并需要提交。
如果在更新期间发生冲突,则图标将变为黄色感叹号。
这告诉您此文件被标记为“假设有效”。此叠加层是可选的。
这告诉您此文件被标记为“跳过工作树”。此叠加层是可选的。
此图标显示当前文件夹中的某些文件或文件夹已计划从版本控制中删除。
加号表示已计划将文件添加到版本控制中。
条形符号告诉你,一个文件或文件夹被忽略了版本控制目的。这个覆盖是可选的。
此图标显示不受版本控制但未被忽略的文件和文件夹。此叠加层是可选的。
2、图标显示异常解决方案
创建 git 项目仓库文件夹,名称为test,进入test文件夹,右键空白区域,点击 Git Bash Here。初始化 git 项目,创建并添加 a.txt 文件至暂存区,可以看到 a.txt 文件有 + 符号,表示已计划将文件添加到版本控制中。
1 | git init # 初始化仓库 |
如果未出现加号,重启也不能解决,原因是系统图标显示与TortoiseGit 图标显示冲突导致的。解决方法如下:
(1) 打开注册表
windows + r 组合键键打开运行窗口,输入regedit.exe 注册表,如图:(2) 修改 Max Cached Icons 参数
找到路径 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer 的Max Cached Icons选项,如果不存在,新建->字符串值 ,名字Max Cached Icons 数值为2000。
(3) 修改Git的图标顺序
找到路径 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 修改Git的图标顺序。把tortoisegit文件夹重新名,添加几个空格键,完成之后 点击工具栏->查看->刷新,是否在最前面。
(4) 重启电脑或者重启windows 资源管理器
到此可以解决 git 图标状态显示异常问题。