介绍
版本控制系统是一类软件工具,可帮助软件团队基于时间的变化来管理源码。版本控制系统跟踪特殊类型数据库中代码的每个修改。如果发生错误,开发人员可以回到某个时间点,比较早期版本的代码,以帮助解决错误,同时最大限度地减少对所有团队成员的干扰。
对于几乎所有的软件项目,源代码就是财富 - 这个珍贵的资产必须被保护。对于大多数软件团队来说,源代码是开发者们通过认真的努力工作和宝贵知识的结晶。版本控制系统保护源代码免受灾难事故、偶尔人为错误的和意外的后果的破坏。
团队合作的软件开发人员不断编写新的源代码和更改现有的源代码。项目,应用程序或软件组件的代码通常组织在文件夹结构或“文件树”中。团队中的一名开发人员可能正在开发新功能,而另一位开发人员通过更改代码来修复无关的错误,每个开发人员可能会在文件树的多个部分进行更改。
版本控制可帮助团队解决这些问题,跟踪每个贡献者的每一个变化,并帮助防止并发工作的冲突。在软件的一部分进行的更改可能与另一位开发人员同时进行的更改不兼容。这个问题应该有序发现和解决,而不会阻止团队其他成员的工作。此外,在所有软件开发中,任何更改都可能无意引入新的错误,并且新的软件在被测试之前是不可完全相信的。所以测试和开发同时进行,直到新版本准备就绪。
良好的版本控制系统支持开发人员的喜爱的工作流程,而不强加一种特定的工作方式。理想情况下,它也适用于任何平台,而不是指定开发人员必须使用的操作系统或工具集。优秀的版本控制系统应当促进代码的流畅和持续的修改,而不是带来令人沮丧和笨拙的给文件加锁的机制 - 给一个开发人员带来绿灯,却付出阻止其他人的继续操作的代价。
不使用任何形式的版本控制的软件团队经常遇到问题,例如不知道已经为用户提供了哪些更改,或者在两个不相关的工作之间创建不兼容的更改,然后必须非常痛苦地解决问题甚至重头再来一遍。如果您是从未使用版本控制的开发人员,您可能已经添加了您的文件的版本,也许使用后缀“final”或“latest”,然后再处理新的最终版本。也许你已经注释掉了代码块,因为担心以后可能会使用它。你想禁用某些功能而不删除代码。版本控制是摆脱这些困扰的一种办法。
版本控制系统是现代软件团队专业实践的每一天的重要组成部分。习惯于在其团队中使用能力强大的版本控制系统的个人软件开发人员通常认识到版本控制的巨大价值,因此他们甚至在小型个人项目上也使用版本控制系统。一旦习惯了版本控制系统的强大优势,即使是非软件项目,许多开发人员也不会考虑工作。
版本控制系统的好处
开发软件而不使用版本控制是有风险的,就像没有备份一样。随着团队规模扩大,版本控制还可以使开发人员能够更快地开发,并允许软件团队保持效率和敏捷性。
版本控制系统(VCS)在过去几十年中取得了很大的进步,一些比其他控制系统更好。VCS有时被称为SCM(源代码管理)工具或RCS(版本控制系统)。今天使用的最流行的VCS工具之一就是Git。Git是一个分布式 版本控制系统。像许多目前最流行的VCS系统一样,Git是免费的和开源的。不管它们被称为什么,或使用哪种系统,您应该期望从版本控制的主要好处如下:
每个文件的完整的修改历史。这意味记录每个人的每一个修改,这些修改包括文件的创建和删除以及对其内容的编辑。不同的VCS工具在处理文件的重命名和移动方面有所不同。这个历史还应包括作者的日期和修改说明,以便每次更改的目的。具有完整的历史记录可以回溯到以前的版本,以帮助根本原因分析错误,并且在需要修复旧版软件的问题时至关重要。如果软件正在积极地工作,几乎所有的东西都可以被认为是软件的“旧版本”。
分支和合并。团队成员同时开发一个文件是不太好,但是即使个人也可以从独立的开发流中获益。在VCS工具中创建“分支”可以使多个工作流彼此独立,同时还提供将该工作合并到一起的功能,使开发人员能够验证每个分支上的更改是否都不会发生冲突。许多软件团队采用针对每个功能进行分支的做法,或者针对每个版本或两者都采用分支。当他们决定如何利用VCS中的分支和合并工具时,团队有许多不同的工作流可以选择。
- 可追溯性。能够跟踪对软件的每个更改,并将其连接到项目管理和错误跟踪软件(如JIRA),并且能够通过描述更改目的的消息来注释每个更改,可以帮助根本上分析问题原因和其他取证。当您阅读代码时,将代码的注释历史记录在您的电脑,可以使开发人员尝试了解它正在做什么以及为什么这样设计,并能够据此进行正确合理的开发工作。这对于遗留代码尤其重要,并且对开发人员能够准确性估计未来工作至关重要。
总结
虽然在不使用任何版本控制系统的情况下也可以开发软件,但这样做会使项目面临巨大的风险,建议专业团队必须使用版本控制系统。所以问题不在于是否使用版本控制(因为必须使用),而是使用哪个版本控制系统。
版本控制系统有很多选择,但是在这里我们将专注于一个,Git。