21CTO导读:本文讲述研发团队为何需要VCS版本管理控制系统,如何选择提高效率和灵活性的最佳VCS工具。
版本控制系统(Version Control System,VCS),也称为源码控制管理(Source Control Manager),是一种管理和记录开发人员对软件代码所做更改的方法。 SCM系统存储IT资源,只需保存状态,就可以访问所有版本的软件,并提供所有不同版本之间的比较,从而提高开发效率和灵活性。
如果开发过程只涉及一个人,代码更新也就不那么困难了:开发者只需更新代码并记录文档中的更改就可了。但是开发过程开始涉及两个或更多人处理相同的代码部分,就会出现一些挑战。
在这些情况下,团队协作很快就变得令人头痛,不能像预期的那样加快交付速度。问题是在于协作的解决方式,而不是协作本身。在让协作更有效的过程中,版本控制系统诞生了。
SCM系统背后的思想是防止和解决开发人员代码之间的冲突。版本控制系统不是用文件锁定的方法,而是允许代码贡献者同时工作,对源代码的任何部分进行更改甚至可以并发访问。这样,开发者可以顺利地执行并行更改。
VCS方法非常容易实现,需遵循以下几个步骤:
VCS的不同类型:
分布式- 克隆和检出源代码的每台机器都将充当存储库
集中式- 将每个更新集中在一台服务器上,开发人员将在其中克隆并签出源代码,然后推送其修订版本
如何选择一个VCS工具:
设置工作区,远程或中央存储库。
共享指向存储库的链接
开发者从中央或远程存储库签出,开始在本地工作
开发都分享他们对远程或中央存储库的更改
为了有效地使用版本控制系统,建议开发遵循以下做法:
1.经常提交
在开发功能时,需要执行几个步骤才能完成整个功能。通过经常提交,你确保一次处理一个小的更改,如果更改引入了错误,更容易恢复。它还可以帮助你用一致的方式对提交进行分组。每个提交都将包含特定的更改。
2.添加提交消息
提交也是一种通信 - 提交信息是向团队其他成员传达消息的一种方式。一个好的提交信息应该是一个简短的文本,解释所做的事情。即使不是强制性的,提交信息也非常重要。
3.不要推送或提交未完成的工作
即使建议经常提交,这并不意味着你应该提交一些没什么用的东西。
4. 共同决定分支实践
使用分支并坚持使用的规则设置。在开发之前应该商定一种共识的做法,每个团队成员都必须严格遵循。
例如,通常的做法可能是不断更新自己的分支。 SCM的最大优势之一是可以在分支上工作并一次在给定分支中应用小的更改。因此,更新分支通常会使集成更容易,更少的冲突处理。更新分支涉及检出中央或远程存储库并集成当前分支中的更改。
另一个最佳实践是为每个更改创建一个新分支,因为分支通常易于操作和创建,这使管理更容易。根据开发的类型,应该清楚开发人员应该从哪里派生他们的工作分支。例如,一个主要分支开始新功能的开发,另一个为Master主分支,生产图像环境等。
通常情况,我们建议尽可能使用分支。
5.将源代码推送到存储库
存储库不是您推送所有内容的地方。只可将项目相关源代码推送到存储库,而不是本地工作区的镜像。比如向存储库中推送某些文件:生成的exe文件,工作区配置等。
SCM帮我们解决了许多编写代码方面的限制。
如果选择使用集中式版本管理工具,则需要一台服务器来为所有开发者提供服务。集中式VCS工具分为两部分: 安装在中心服务器上的服务器工具和将安装在开发者机器中的客户端工具。定义好服务器后,可以为每个软件项目创建一个存储库,并在你和其他开发者之间共享存储库链接。其它代码贡献者需要检查存储库更新项目,就可以开始他们的开发工作。
所有贡献者将在中央存储库上分享他们的更新,保存更改的唯一方法是共享它们。
我们还可以选择分布式VCS工具。在这种情况下,你不需要定义服务器,所有工作站都可以充当存储库。开发人员工作站中的存储库将称为本地存储库,其它存储库被称为远程存储库。给定的软件项目可以有几个远程存储库。在实践中,通常存在一些通用存储库,每个环境通常用作开发人员的远程存储库。关于使用这些不同的公共远程存储库,可以设置额外的规则。
使用分布式VCS时,开发人员可以脱机工作并保存更改,并在重新联机后共享到远程存储库。
目前在市面中,有几种SCM工具,在本文中,我们介绍三种最流行的开源SCM工具。
Git (https://www.git-scm.com/)
Git是一个分布式版本控制系统,绝对是当今使用最多的SCM。许多开发人员可能认为Git是最难的VCS之一,确实如此:它具有更高的学习曲线,但它也让分支管理变得更加容易。使用git在两个分支之间切换不需要开发人员更改目录,他只需要让git用他想要使用的分支来更改内容即可。
在Git中,你可以选择共享更改的位置,从而也可以更轻松地在不同环境中进行部署。可以使用命令行以及GUI界面来使用Git。
Mercurial(https://www.mercurial-scm.org/)
Mercurial是另一种开源分布式版本控制系统,也被广泛使用着。此VCS系统是用Python编写的,并提供了很多有用的工具。它具有分布式版本控制系统的所有优点。与Git等分布式VCS相比,Mercurial在学习曲线方面更平滑易学。在Mercurial中,每个分支都有自己的目录,因此在分支之间切换意味着在目录之间切换。
SVN(https://subversion.apache.org/)
Subversion或SVN是集中式版本控制系统。
SVN可靠且安全,被大量开发人员使用。它是最常用的集中式VCS。它被认为是最简单的SCM,但其分支管理在中央服务器上消耗了大量资源。它比分布式VCS稍慢一点。
作者:俊峰
来源:21CTO社区
领取专属 10元无门槛券
私享最新 技术干货