文章目录
为什么需要版本控制
概述
在软件开发过程,每天都会产生新的代码,代码合并的过程中可能会出现如下问题:
代码被覆盖或丢失
代码写的不理想希望还原之前的版本
希望知道与之前版本的差别
是谁修改了代码以及为什么修改
发版时希望分成不同的版本(测试版、发行版等)
因此,我们希望有一种机制,能够帮助我们:
可以随时回滚到之前的版本
协同开发时不会覆盖别人的代码
留下修改记录,以便随时查看
发版时可以方便的管理不同的版本
什么是版本控制系统
一个标准的版本控制系统 Version Control System (VCS),通常需要有以下功能:
能够创建 Repository (仓库),用来保存代码
协同开发时方便将代码分发给团队成员
记录每次修改代码的内容、时间、原因等信息
能够创建 Branch (分支),可以根据不同的场景进行开发
能够创建 Tag (标签),建立项目里程碑
版本控制系统的发展史
版本控制系统发展至今有几种不同的模式:
Local VCS
本地使用 复制/粘贴 的方式进行管理,缺点是无法协同开发
Centralized VCS (Lock,悲观锁)
中央集中式版本控制系统团队共用仓库,当某人需要编辑文件时,进行锁定,以免其他人同时编辑时造成冲突。缺点是虽然避免了冲突,但不是很方便。其他人需要排队才能编辑文件,如果有人编辑了很久或是忘记解锁就会造成其他人长时间等待的情况。
Centralized VCS (Merge,乐观锁)
中央集中式版本控制系统团队共用仓库,不采用悲观锁方式来避免冲突,而是事后发现如果别人也修改相同文件(冲突),再进行手动修改解决。有很多 VCS 属于这种类型,如:CVS,Subversion(SVN),Perforce 等
中央集中式版本控制系统的共同问题是,做任何操作都需要和服务器同步,如果服务器宕机则会造成无法继续工作的窘迫。
Distributed VCS
分布式版本控制系统,本地也拥有完整的代码仓库,就不会出现上述集中式管理的问题,即使没有网络,依然可以 commit 和看 log,也无需担心服务器同步问题。如:Git,Mercurial,Bazaar 等就属于分布式版本控制系统。缺点是功能比较复杂,上手需要一定的学习时间。
什么是 Git
概述
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
安装 Git
下载
下载地址:https://git-scm.com/downloads
安装
双击安装文件,然后出现安装向导界面,点击下一步(Next)即可
接着出现授权信息界面, Next即可
选择安装路径
选择文件关联,如果你不清楚,直接默认,下一步即可
接着出现开始菜单文件夹,默认,下一步即可
然后是是否配置Path的配置,选择中间一个,可以通过 Windows命令行(CMD)调用 git 命令。 然后点击下一步
选择回车换行的格式。默认即可.(检出时转换为Windows风格,提交时转换为Linux风格.)
然后是安装进度界面
安装完成. 去掉那个查看版本说明的复选框,点击完成(Finish)按钮即可
可以在cmd里面测试是否设置了Path,是否安装成功. 在CMD中输入 git 或者 git --version 试试
Git 工作流简介
概述
工作流有各式各样的用法,但也正因此使得在实际工作中如何上手使用增加了难度。这篇指南通过总览公司团队中最常用的几种 Git 工作流让大家可以上手使用。
在阅读的过程中请记住,本文中的几种工作流是作为方案指导而不是条例规定。在展示了各种工作流可能的用法后,你可以从不同的工作流中挑选或揉合出一个满足你自己需求的工作流。
集中式工作流
如果你的开发团队成员已经很熟悉 Subversion,集中式工作流让你无需去适应一个全新流程就可以体验 Git 带来的收益。这个工作流也可以作为向更 Git 风格工作流迁移的友好过渡。
功能分支工作流
功能分支工作流以集中式工作流为基础,不同的是为各个新功能分配一个专门的分支来开发。这样可以在把新功能集成到正式项目前,用 Pull Requests 的方式讨论变更。
GitFlow 工作流
GitFlow 工作流通过为功能开发、发布准备和维护分配独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
Forking 工作流
Forking 工作流是分布式工作流,充分利用了 Git 在分支和克隆上的优势。可以安全可靠地管理大团队的开发者(developer),并能接受不信任贡献者(contributor)的提交。
Pull Requests
Pull requests 让开发者更方便地进行协作的功能,提供了友好的 Web 界面可以在提议的修改合并到正式项目之前对修改进行讨论。