【注】本文译自:https://www.edureka.co/blog/w...
Git是一个免费的开源分布式版本控制系统工具,旨在快速高效地处理从小型到大型的所有项目。它是由 Linus Torvalds 在2005年创建的,用于开发 Linux 内核。Git具有大多数团队和开发人员所需的功能、性能、安全性和灵活性。它还用作重要的分布式版本控制 DevOps 工具。
在本文中,你将学到:
- 为什么会有 Git?
- Git 是什么?
- Git 的特性
- Git 如何在 DevOps 中发挥至关重要的作用?
- 微软和其他公司如何使用Git
Git 的来由
我们都知道“需要是一切发明之母”。同样,Git 的发明也是为了满足开发人员在 Git 出现之前所面临的某些需求。
Git 的目的是什么?
Git 主要用于管理您的项目,包括一组可能会更改的代码/文本文件。
但是在进一步讨论之前,让我们回顾一下所有有关版本控制系统(VCS)的知识,以及 Git 是如何诞生的。
版本控制是对文档、计算机程序、大型网站和其他信息收集的变更进行管理。
VCS 有两种类型:
- 集中版本控制系统(CVCS)
- 分布式版本控制系统(DVCS)
集中式 VCS
集中式版本控制系统(CVCS)使用中央服务器来存储所有文件并支持团队协作。 它在单个存储库上工作,用户可以直接访问该存储库。
请参考下图,以更好地了解CVCS:
上图中的存储库指示一个中央服务器,可以是本地的,也可以是远程的,它直接连接到每个程序员的工作站。
每个程序员都可以使用存储库中存在的数据来提取或更新其工作站,或者可以对数据进行更改或提交到存储库中。每个操作都直接在存储库上执行。
尽管维护单个存储库似乎很方便,但它也有一些主要缺点。其中一些是:
- 它在本地不可用; 这意味着您始终需要连接到网络才能执行任何操作。
- 由于所有内容都是集中式的,在任何情况下中央服务器都崩溃或损坏都将导致丢失整个项目的数据。
分布式 VCS 就是这些问题的救星。
分布式 VCS
这些系统不必依赖中央服务器来存储项目文件的所有版本。
在分布式VCS中,每个贡献者都有主存储库的本地副本或“克隆”,即每个人都维护自己的本地存储库,其中包含主存储库中存在的所有文件和元数据。
参考下图,您会更好理解:
如上图所示,每个程序员都自己维护一个本地存储库,它实际上是其硬盘驱动器上的中央存储库的副本或克隆。他们可以提交和更新其本地存储库,而不会受到任何干扰。
他们可以通过“拉”操作使用来自中央服务器的新数据更新本地存储库,并通过本地存储库中的“推”操作影响对主存储库的更改。
将整个存储库克隆到工作站以获取本地存储库的操作为您带来以下优势:
- 所有操作(推和拉除外)都非常快,因为该工具仅需要访问硬盘驱动器,而无需访问远程服务器。因此,您并不总是需要互联网连接。
- 可以在本地完成新变更集的提交,而无需处理主存储库上的数据。一旦准备好一组变更集,就可以一次推送所有变更集。
- 由于每个贡献者都有项目存储库的完整副本,因此,如果他们希望在影响主存储库中的更改之前获得一些反馈,则可以彼此共享更改。
- 如果中央服务器在任何时间崩溃,丢失的数据可以很容易地从贡献者的任何本地存储库中恢复。
了解了分布式 VCS 之后,是时候深入了解一下什么是 Git 了。
什么是 Git?
Git 是一种分布式版本控制工具,它通过为开发高质量软件提供数据保证来支持分布式非线性工作流。
Git为用户提供了前面提到的所有分布式 VCS 工具。Git仓库很容易找到和访问。当您了解以下功能时,您将知道 Git 与系统的灵活性和兼容性:
Git 的特性
免费和开源:
Git是根据GPL(通用公共许可证)的开源许可证发布的。您无需购买Git。它是完全免费的。并且由于它是开源的,因此您可以根据需要修改源代码。
速度:
由于您不必连接到任何网络即可执行所有操作,因此它可以非常快速地完成所有任务。Mozilla 所做的性能测试表明,它比其他版本控制系统快一个数量级。从本地存储的存储库中获取版本历史记录的速度可能比从远程服务器中获取版本历史记录的速度快一百倍。Git 的核心部分是用C编写的,这避免了与其他高级语言相关的运行时开销。
可扩展性:
Git 具有很好的可扩展性。因此,如果将来合作者的数量增加,Git 可以轻松应对这一变化。尽管 Git 代表了一个完整的存储库,但是存储在客户端上的数据非常少,因为 Git 通过无损压缩技术压缩了所有大数据。
可靠性:
由于每个贡献者都有自己的本地存储库,在系统崩溃时,可以从任何本地存储库中恢复丢失的数据。您将始终拥有所有文件的备份。
安全性:
Git使用 SHA1(安全哈希函数)来命名和标识其存储库中的对象。在签出时,每个文件和提交都通过其校验和进行校验和并检索。Git 历史记录的存储方式使得特定版本的 ID(在 Git 术语中是提交)取决于提交之前的完整开发历史记录。一旦发布,就无法在不被注意的情况下更改旧版本。
经济性:
对于 CVCS,中央服务器必须足够强大以服务于整个团队的请求。对于较小的团队来说,这不是问题,但是随着团队规模的扩大,服务器的硬件限制可能会成为性能瓶颈。对于 DVCS,除非开发人员需要推送或提取更改,否则它们不会与服务器交互。所有繁重的工作都发生在客户端,因此服务器硬件实际上非常简单。
支持非线性开发:
Git 支持快速分支和合并,并包括用于可视化和导航非线性开发历史的特定工具。Git中的一个核心假设是,变更的合并频率要比写入的频率高,因为变更会在各个审阅人员之间传递。Git 中的分支非常轻巧。Git 中的分支只是对单个提交的引用。借助其父提交,可以构造完整的分支结构。
易于分支:
使用 Git 进行分支机构管理非常简单。创建、删除和合并分支仅需几秒钟。特性分支为代码库的每次更改提供了独立的环境。当开发人员想要开始做某件事时,无论大小,他们都会创建一个新的分支。 这样可以确保 master 分支始终包含生产质量代码。
分布式开发:
Git 为每个开发人员提供了整个开发历史的本地副本,并将更改从一个这样的存储库复制到另一个存储库。这些更改将作为其他开发分支导入,并且可以以与本地开发分支相同的方式合并。
与现有系统或协议的兼容性:
可以通过 http,ftp 或 Git 协议通过普通套接字或 ssh 发布存储库。Git 还具有并发版本系统(CVS)服务器仿真,它可以使用现有的 CVS 客户端和IDE 插件来访问 Git 存储库。Apache SubVersion(SVN)和 SVK 存储库可以直接与 Git-SVN 一起使用。
Git 在 DevOps 中的作用?
既然您知道什么是 Git,那么您应该知道 Git 是 DevOps 不可或缺的一部分。
DevOps 是将敏捷性引入开发和运营过程的实践。这是一种全新的意识形态,席卷了全世界的It组织,促进了项目生命周期,进而增加了利润。DevOps 促进开发工程师和运营人员之间的沟通,共同参与整个服务生命周期,从设计到开发过程,再到生产支持。
下图描述了 Devops 的生命周期,并显示了 Git 如何适合 Devops。
上图显示了 Devops 的整个生命周期,从计划项目到部署和监视。当管理协作者为共享存储库贡献的代码时,Git 扮演着至关重要的角色。然后提取该代码以执行连续集成,以创建内部版本并在测试服务器上对其进行测试,最后将其部署在生产环境中。
诸如Git之类的工具使开发人员与运营团队之间能够进行沟通。当您开发一个拥有大量协作者的大型项目时,在项目中进行更改时,在协作者之间进行沟通非常重要。在Git 中提交消息在团队之间的沟通中起着非常重要的作用。我们所有人部署的零碎内容都位于版本控制系统(如 Git )中。要在 DevOps 中取得成功,您需要在版本控制中进行所有通信。因此,Git 在 DevOps 的成功中起着至关重要的作用。
使用 Git 的热门公司
与市场上其他可用的版本控制工具(例如Apache Subversion(SVN),并发版本系统(CVS),Mercurial等)相比,Git 更受欢迎。您可以通过下面的 Google 趋势图来比较 Git 和其他版本控制工具的兴趣:
在大型公司中,产品通常是由遍布世界各地的开发人员开发的。为了实现它们之间的通信,Git 是解决方案。
一些使用 Git 进行版本控制的公司包括:Facebook、Yahoo、Zynga、Quora、Twitter、eBay、Salesforce、Microsoft等。
最近,Microsoft 的所有新开发工作都已包含在 Git 特性中。微软正在迁移 .NET 和它的许多开源项目迁移到 GitHub 上,这些项目都是由 Git 管理的。
其中一个项目是 LightGBM。 它是一种快速、分布式、高性能的基于决策树算法的梯度增强框架,用于排序、分类等许多机器学习任务。
在这里,通过提供速度和准确性,Git 在管理 LightGBM 的分布式版本中扮演着重要角色。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。