1.版本控制系统主要用途
协同开发
通常在软件项目的开发建设过程中,一般会有多名工作人员同时对项目开展工作,那么此时的项目工程不可能是一个独立的资源,这个时候就需要将项目工程提供给各个工作人员对同一份项目进行操作。
冲突解决
在软件协同开发的过程中,很有可能出现多名开发人员对同一个功能下的同一文件进行编辑,由于各自的编辑的内容不同,那么在上传编辑的内容时就会发生冲突,此时版本控制系统就有一种机制来解决冲突。
版本记录
每辆车到了一定时间都会有更新换代的时候,软件项目亦是如此,软件项目会根据不同业务阶段迭代形成不同阶段的版本,那么此时就需要版本控制系统来对不同的版本进行记录。
有版本的记录我们可以根据不同的使用场景对项目版本进行调度使用,例如项目接入了某个新的功能,在上线后出现了很严重的Bug,并且Bug很难再一时之间解决,这个时候为了保险起见不影响正常的业务,通常会要求项目回退到新功能上线前的一个版本,由于版本控制系统的记录功能,此时我们可以稳定快速的进行版本的回退操作。
历史追查
项目接入了版本控制,那么任何对项目的操作都会留下痕迹。例如在生产环境出现Bug,我们可以通过版本控制系统查阅开发阶段是谁负责编写的代码,以便进行追责。另外也可以用于不同版本之间对代码的改动进行分析。
分支管理
通常实际项目中,我们的软件工程文件不会仅仅只有单独一份。我们会根据不同的场景将软件工程文件划分为多份。
试想下如果你的项目工程只有一份,当你正如火如荼的开发实现新的需求功能时,在生产环境上出现了Bug需要及时的修复,此时你只能在仅有的一份项目工程中进行Bug修复,但是新开发的功能还没有完成,这就产生了一个混乱的局面。
所以我们必须对项目工程通过版本控制系统建立不同的分支体系,每个使用场景都是独立的,不同使用场景之间就不会出现冲突。
2.集中式与分布式
2.1.集中式版本控制系统
结构图:
集中式实现了大部分开发中对项目版本控制的需求功能,结构简单,上手容易。另外集中式版本控制系统存在一个很明显的问题,所有的项目文件都集中存储在一台服务器上,一旦服务器出现问题(崩溃、硬件损坏),那么项目文件会有丢失的风险。
经典的集中式版本控制系统包括以下:
CVS:很老的系统太过陈旧、简陋;
VSS:微软的产品,可视化效果好但并不流行,该工具使用了悲观锁,一旦上锁一个代码文件在同一时间只能允许一名开发者操作,其他的开发者要使用必须要等待前一个开发者使用完成解锁后,开发效率低。
SVN:当下最主流的集中式版本控制系统。
2.2.分布式版本控制系统
结构图:
Git就是目前世界上最先进、主流的分布式版本控制系统。
与集中式最大的区别:不仅仅使用云服务器托管了项目,在每个项目人员电脑本地都存储这一份项目仓库。另外这样的结构这有两点好处:
1.即使是托管服务器出现了各种故障,也不会造成项目文件的丢失;
2.即使是于托管服务器断开了连接,也可以进行项目的版本控制管理。
3. Git的基本使用
Git安装程序
链接:https://pan.baidu.com/s/1d6S3Eoohfwpnx-jBkQyTww
提取码:9agh
3.1.设置用户名和邮箱
操作命令:
git config --global user.name "用户名"
git config --global user.email "邮箱"
操作参考图:
另外可以通过“当前用户”的文件夹中,找到.gitconfig文件查看配置的用户信息。当然也可以直接通过编辑该文件修改用户信息。如图:
3.2.创建初始化仓库
在项目目录空白处鼠标右键弹出菜单列表,在其中点击选择“Git Bash Here”,在命令窗口输入:git init,此时项目就通过Git建立了一个版本库,并且项目目录中会创建一个名称为“.git”的隐藏目录。
操作参考:
如果项目使用SVN进行版本控制的话,同样也会创建一个名称为“.svn”的隐藏目录,它们两者的区别:
“.svn”目录不会因为项目体积的增长而影响自身的体积也过大的增长,该目录始终都属于体积很小的目录,因为“.svn”目录只会记录一些版本信息;
“.git”的隐藏目录则会因为随着项目体积的增长而增长自身的体积,因为“.git”目录相当于一个本地的代码库,会存储着各个版本的源代码信息并包括版本信息。
3.3.提交文件到版本库
3.3.1.查看项目状态
项目通过Git建立版本库后,可以通过在命令行窗口输入“git status”来查看当前项目中文件的控制状态,操作参考如图:
上图在输入命令后,提示出当前版本库有一个文件处于未提交的状态。
3.3.2.添加操作
操作命令:git add 文件名
操作参考图-输入添加命令后再查看状态:
通过此命令后新增的文件仅仅被添加到暂存区,实际上没有加入到版本库中。PS:如果需要提交所有文件,则可以将文件名替换为*
3.3.3.提交
在命令行输入:git commit 文件名 -m “注释” ,通过此命令后文件则才会提交到版本库中,从而才能进行版本的控制。
操作参考图-输入提交命令后再查看状态:
注意:不管是新增或是修改操作,最终都需要进行commit命令操作。
3.4.查看文件操作记录
可以通过输入命令:”git log --pretty=oneline 文件名”或”git log 文件名”
3.4.1.”git log 文件名”—操作参考图:
3.4.2.操作参考图-”git log --pretty=oneline 文件名”:
3.5.版本穿越
用于将当前项目回退到我们指定的版本
第一步,查询获取版本标识
操作命令:git reflog
第二步,使用版本标识进行回退
操作命令:git reset --hard 版本标识
3.6.文件检出
用于获取新文件或覆盖当前工作副本
操作命令:git checkout 文件名
3.7.文件删除
通过文件的物理删除是无法直接将版本库中的文件删掉的,需要在对版本库执行提交命令。
第一步,物理删除文件
第二步,执行提交命令
4.Git文件区域
工作区
从版本库检出存储在本地硬盘的文件区域,也叫工作副本用于我们实际开发工作的区域;
本地库
隐藏目录.git就是一个本地的代码仓库,它会存储所有版本的文件信息,即使和代码托管的服务器断开也可以通过本地库进行版本控制,也可以用于在代码托管的服务器文件丢失情况下作为备份。
暂存区
在对文件进行修改、新增、删除时,往往这些操作没有实际的同步到版本库,只是将这些操作停留在暂存区,这个时候需要commit命令才能将操作同步到版本库。
后续详见第二节.....