最佳版本控制托管2020年5月

披露: 您的支持有助于保持网站的正常运行!我们会为此页面上推荐的某些服务收取推荐费.


在版本控制中查找具有这些功能的主机

  • 水银
  • SVN

版本控制和托管

版本控制托管

编码员喜欢编码.

养成简单地打开编辑器并敲出尽可能多的代码的习惯可能很容易.

如果您正在从事个人项目或您是唯一的开发人员,则尤其如此.

如果您是一个快速的编码人员,或者有一个老板想要立即解决问题和解决方案,那可能会更具诱惑力.

但是,如果您在没有适当的版本控制系统的情况下将新代码投入生产,那么您实际上并不是在进行软件开发,而是在进行“牛仔编码”。

版本控制如何工作

版本控制的工作方式

版本控制(也称为修订控制,版本控制或源代码控制)是一种跟踪对文档,代码或其他文件进行的修订的方法.

版本控制系统(VCS)或版本控制软件可以是内置于文档编辑应用程序(例如Word或Google Docs)中的独立应用程序.

它们也可以嵌入内容管理系统(例如WordPress或MediaWiki)或集成开发环境(IDE)(例如Microsoft的Visual Studio)中.

版本控制做什么?

版本控制软件允许开发人员,编辑者和其他团队成员查看文件的先前版本,以及还原早期版本.

版本控制维护代码库的主副本。许多版本控制系统允许整个代码库的多个并行副本同时存在.

每个软件开发人员都有自己的代码库副本:他们可以进行修订而不会影响主源代码.

这些修订会在适当的时候引入,并合并到主源代码中.

合并的方式取决于所使用的版本控制系统(VCS).

使用版本控制的原因

使用版本控制的原因

尚未确信您需要版本控制系统?

以下是值得使用版本控制的原因:

  • 自由犯错
  • 自由尝试新事物
  • 对您的代码库进行修订的完整历史记录
  • 较少回答的问题
  • 所做的事情以及原因的书面记录
  • 后备
  • 促进团队成员之间更轻松的协作.

自由犯错

您在工作时是否使用过UNDO按钮(CTRL-Z)?当然可以这是现代计算机最重要的功能之一.

UNDO按钮为您提供了犯错的自由。这是您从版本控制中获得的优势之一-实际上,这可能是最重要的优势.

自由尝试新事物

使用版本控制,您可以尝试一些东西-新解决方案,新功能,错误修复.

如果不起作用,您可以将代码还原到较早的位置,或者放弃建议的修订.

这些修订将不会合并到主源代码中。 (这有点像在电子游戏中保存积分。)

这很有帮助,原因有两个:

  1. 您将不可避免地犯错误,因此您也可以轻松地纠正错误.
  2. 一旦您知道自己有办法扭转错误,就可以更轻松地进入未知领域并以新颖的解决方案或未经检验的想法冒险.

对您的代码库进行修订的完整历史记录

您是否曾经在一个项目上工作了很长时间,然后使用它的人说:“在关闭应用程序之前,退出按钮是否用于触发保存警告?”

如果系统存在的时间足够长,则不可避免地会更改和删除某些功能.

一旦您知道自己有办法扭转错误,就可以更轻松地进入未知领域并以新颖的解决方案或未经检验的想法冒险.

通常,首先有一些原因需要使用该功能(即使最终被删除的功能).

但是,删除给定功能也是有原因的(即使原因是某人不小心这样做了).

更少的未回答问题

稍后,当有人出现并询问曾经存在的某些功能时,您可以非常努力地记住发生了什么.

或者,如果您具有版本控制,则可以查找过去的修订,然后返回有关以下内容的明确答案:

  • 该功能曾经做什么
  • 当它被删除时
  • 为什么将其删除.

如果您必须:

  • 重新实现该功能(有时您可以重新实现已删除的代码!)
  • 防止其继续从生产就绪应用程序中排除.

做过什么以及为什么做的纸迹

这与版本历史记录密切相关,但更多地与开发人员有关,而与功能无关.

您的纸张记录(通常)不是文字记录,但是版本控制使您可以看到以下内容:

  • 进行了哪些修订
  • 何时进行修订
  • 谁修订的.

当试图弄清事物为何如此时,这很有用。您可以指责或指责,也可以只找出谁来询问某些特定功能或实现.

后备

通常,版本控制的存储库存储在多个位置.

这样可以避免您的项目将一台机器视为灾难性的单点故障.

促进团队成员之间更轻松的协作

如果只有一个人在一个项目上工作,那么您可能无需使用任何版本控制系统就可以逃脱(尽管这仍然是一个坏主意).

但是,如果多个人一起从事一个项目,那么人们互相覆写修订或创建不兼容的代码(也称为合并冲突)的风险就很高。.

因此,版本控制系统(VCS)的一项必不可少的功能是能够检查主代码库的相互不兼容的修订版,以确保所有内容都能一起工作.

部署

部署和版本控制

您如何将文件从本地开发计算机移至测试环境,然后再移至生产环境?

有些人只是保持FTP窗口打开,并在更改文件时放入文件.

这是不明智的。遗漏所需的文件太容易了,如果服务器上出现意外问题,则很难撤消修订.

一次推送所有修订

如果您使用某些类型的版本控制(尤其是Git),则只需将所有修订一次推送到远程服务器即可。服务器处理何种环境(开发,测试或生产)都没有关系.

如果您的任何修订版本在将来的任何时候都引起了问题,则可以轻松地回滚这些修订版本,以使事情重新开始起作用.

版本控制系统(VCS)的类型

基本上有两种类型的版本控制系统:

  • 集中式版本控制系统
  • 分散版本控制系统.

让我们在下面深入了解.

集中版本控制

集中式版本控制系统

集中式版本控制系统遵循客户端-服务器模型.

在这些系统中,一个单一的主代码(“中央”)集位于服务器上。开发人员检出正在处理的单个文件.

然后将工作副本“锁定”。其他人被警告不要对文件进行修订,甚至被禁止编辑文件(或两者都禁止).

然后,开发人员将对这些文件所做的修订推回到中央源代码,该源代码是用于将代码/软件部署到生产环境的版本。.

集中式VCS工作流程示例

在集中式版本控制系统中,有一个中央服务器(或存储库)充当事实来源.

这也是通常保持生产就绪状态的代码集.

这意味着,在任何给定时间,代码都可以不带负面影响地交付到生产环境中。.

工作流程

当您需要处理某些内容时,您会找到需要处理的文件。然后,您“签出”这些文件,这意味着:

  1. 您将副本拉到本地计算机上,可以在其中工作
  2. 文件本身已被锁定,不能被团队中的其他人编辑

完成更改后,可以提交更改,包括有关所做操作的注释.

与分散式系统中您要合并的内容不同(我们将在稍后详细讨论合并),您只需将变更推送到中央服务器即可。这将释放您对这些文件的锁定.

分散版本控制

分散(或分布式)版本控制系统

分散/分布式版本控制系统是所涉及的软件开发人员具有以下功能的系统:

  • 整个代码库的完整副本(而不是精选文件的工作副本)
  • 修订历史.

真相,用户和节点的来源

尽管通常只有一个单一的存储库被指定为源,但是没有一个用户或节点比任何其他节点都重要。 (将存储库视为文件,但包含历史信息。)

来源类似于集中式VCS中的“中央”源代码.

准备好各个更改后,它们就会合并为真理的来源(通常标记为 主分支).

由于采用了分散式VCS的异步和独立方法, 合并冲突必须在合并发生之前由开发人员解决.

这样可以防止两个或多个开发人员之间无法协调的差异破坏master分支.

分散式VCS工作流程示例

在本节中,我们将介绍使用分散版本控制系统的过程.

所需的分支和合并使此类系统的使用比集中式系统稍微复杂一些.

入门

您可以通过以下两种方式之一开始:

  • 您可以在开发机器上初始化新的存储库
  • 您可以克隆现有存储库.

无论选择哪种选项,最终都将在计算机上获得源代码的完整副本.

代码的不同版本称为分支,其中包含真理的来源以及交付给生产部门的称为主分支的版本。使用分布式VCS时,良好的做法是始终将主分支保持在准备好进行生产部署的状态.

做出改变

每次您要更改一个或多个文件时,都会创建一个新分支。顾名思义,分支是主代码的分支.

您在分支机构中包含的更改数量可能会有所不同.

您可能只做了很小的更改,或者可能在单个分支上保留了几个月的更改.

通常,您(至少)将确保所有更改都与单个功能相关.

保存更改的过程称为 提交.

您所做的每次提交都要求您添加所做操作的注释-VCS应该自动记录您是所做更改的人以及何时进行更改.

管理承诺

随着时间的流逝,您将能够查看所有提交,执行时间以及提交者的日志。.

提交具有奖励功能,允许您一次仅回滚更改.

这是假设您在项目结束时创建了多个提交,而不仅仅是一个大提交).

您可以将提交视为分支的划分.

分支保留与给定功能相关的更改,而提交则是较小的更改,这些更改加在一起便成为完整的功能更新.

推树枝

分支机构也有助于共享您的工作.

例如,假设您正在与其他几个人一起工作,并且都在为一个存储库做出贡献.

好吧,如果您想共享您的工作(也许您想对自己编写的代码进行审查),则可以直接推送您一直在处理的分支,而不是整个存储库.

运输您的工作

阅读要发送的作品时,您可以开始合并过程,在此过程中,某人(通常不是您自己)将您的功能分支合并到master分支中.

大致过程如下:

  1. 您将分支推送到中央存储库,并请求将其拉入主分支
  2. 有人检查您的分支,如果一切正常,他们将完成合并.

请注意,如果您建议的更改与已经合并到master分支中的任何内容不冲突,则版本控制系统将仅允许审阅者合并.

如果不是这种情况,则必须解决合并冲突并更新您的请求.

比较版本控制系统

比较和对比分布式(分散式)与集中式版本控制系统

分散式/分布式版本控制系统与集中式版本控制系统之间的主要区别是什么?

集中式和分散式VCS之间最明显的区别在于访问和便利性.

集中式系统的缺点

您可以认为集中式系统类似于通过Web浏览器访问共享的Dropbox文件夹.

相反,访问分布式系统等同于将共享的社区Dropbox文件夹同步到您自己的计算机上.

使用集中式系统,您的用户需要先进行以下操作,然后才能开始编辑:

  • 访问中央源文件
  • 下载他们需要的工作副本
  • 签出工作副本,以使它们被锁定并且不能被其他人编辑.

分布式系统中的文件

在分布式系统中,文件已经在您需要的位置.

这是因为建立分布式系统的第一步是将所有文件以及版本历史克隆到本地开发工作站。.

克隆存储库类似于复制文件-但是请记住,存储库拥有其他历史信息.

准备开始工作时,只需打开“拉到”计算机的文件即可。.

在速度和效率方面,将本地需要的所有文件都拥有是一个巨大的优势.

与服务器通信的唯一时间是从服务器中拉出文件或将文件推回服务器.

分布式系统的决定性优势和劣势

此异步方法还允许用户在决定下一步之前在本地进行多个修订:

  • 将修订发布到项目的其他所有人(通过推送到Origin分支并导入修订)
  • 在将修订发布给整个团队之前,将其修订发送给选定的团队成员进行审核.

但是,分布式VCS的一大缺点是本地存储库可能需要的空间量.

根据项目的大小,克隆到计算机的单个存储库最终可能会占用大量空间.

如果必须为单个(甚至多个)项目克隆多个存储库,则会放大此问题。.

为什么有这些缺点?

当您考虑大量文本文件,图像文件,视频和变更日志大小时,这可能会出现问题,尤其是对于预算有限的工作站而言.

对于有此类限制的用户,集中式VCS可能是一个更好的选择,因为用户只需要下拉所需的文件,而不必提取整个源代码和随附的修订历史记录.

分散选项版本控制

分布式版本控制系统选项

选择版本控制系统(VCS)时,可以使用哪些选项?

您应该选择哪一个?

在以下各节中,我们将介绍几种流行的分布式版本控制系统以及几种流行的集中式版本控制系统.

希望这可以帮助您选择适合您需求的选项。如果没有,此列表将帮助您快速开始搜索适用的选项!

让我们从一些最受欢迎的分布式选项开始.

市场

Bazaar是由Canonical赞助的版本控制系统,使用Python编写.

作为跨平台的开源项目,macOS,Linux和Windows上的用户可以使用此产品.

对于熟悉并发版本系统(CVS)或Subversion(SVN)的用户,Bazaar命令将显示类似.

与其他一些分布式VCS不同,Bazaar允许您在带有或不带有主源代码集的中央存储库或服务器的情况下使用它.

它还可以与其他VCS很好地集成-您可以将更改提交到SVN,并且可以读取Git或Mercurial跟踪的文件.

您还可以将Bazaar历史记录导出到许多其他系统.

化石

Fossil是一个跨平台的分布式版本控制系统,还包括以下功能:

  • 错误追踪
  • 维基
  • 写博客.

Fossil带有内置的Web界面,可显示详细的更改历史记录和项目状态信息.

该界面的目的是 降低复杂度 固有地参与项目跟踪并改善用户的 对情况的意识 在代码库中.

与集市相似

像Bazaar一样,Fossil不需要您使用中央服务器,但是如果您这样做,团队成员之间的协作将更加容易.

Fossil利用SQLite数据库存储其内容.

吉特

Git是由“ Linux之父” Linus Torvalds创建的版本控制系统.

尽管Git在软件开发领域中具有突出的功能,但它可用于跟踪任何类型的文件集中的更改.

除此之外,Git 优先考虑性能.

当分布式版本控制系统要求:

  • 初始拉动所有项目文件(不仅仅是正在处理的文件)
  • 数据的完整性
  • 支持非线性工作流程.

在不同平台上的Git

尽管Git是使用Linux开发的,但它是一个跨平台的解决方案.

通常,每个项目都在单独的存储库中进行管理。 (请记住,存储库本质上是一个文件夹,但是具有更改日志).

大型项目的文件有时会拆分为多个存储库.

Git通常与某些类型的基于Web的托管服务结合使用.

通过这种方法,多个协作者可以共享他们的工作,并提取原始源代码和同行所做的更改.

的GitHub

用于Git的最常见的基于Web的托管服务之一是GitHub(表面上,GitHub是世界上最大的源代码托管者).

除了支持Git的所有版本控制和源代码管理功能外,GitHub还提供:

  • 访问控制工具
  • 错误追踪工具
  • 功能请求管理
  • 任务管理/生产力工具
  • 维基.

您甚至可以使用GitHub生成和托管简单的网页.

尽管GitHub提供公共和私有存储库,但使用私有存储库会产生费用(而公共存储库是免费的).

这符合GitHub对开源代码的奉献精神.

比特桶

Bitbucket是Atlassian为Git(和Mercurial)用户提供基于Web的托管世界的贡献.

除了免费帐户,Bitbucket还提供功能更丰富的商业计划.

对于某些用户,Bitbucket比GitHub更好,因为如果使用私有存储库,Bitbucket不会更改任何内容.

免费帐户可以获得无限数量的私人存储库,尽管贡献者的数量是有上限的.

通常将Bitbucket视为用于 专业开发商 与…合作 专有源代码.

它的主要用途是用于代码和代码审查,尽管Bitbucket确实提供了一些额外的功能,例如:

  • 文献资料
  • 维基
  • 静态网站功能.

亚搏体育app

GitLab是由Git创建的存储库的经理,该存储库提供自托管选项或基于Web的服务。 GitLab提供与Wiki相关的功能和工具,以及问题跟踪功能.

Gitlab自托管和完全托管计划

GitLab提供了四种不同的自托管解决方案计划:

  • 核心:适用于小型团队或个人项目(核心完全免费使用)
  • 入门:适用于需要专业支持的个人项目或小型团队.
  • 高级:适用于需要高可用性,高性能或24/7支持的团队.
  • 终极:对于大型企业,需要额外的安全性和合规性功能.

如果您对自托管不感兴趣,则可以选择 完全托管的Git版本. 对于每个自托管计划,都有一个相应的托管计划:

  • 核心→免费
  • 入门→铜牌
  • 高级→银
  • 终极→黄金

Gitlab计划之间的功能均等

GitLab确保其自托管和完全托管计划之间的功能均等(即,提供给Starter计划中的功能与Bronze计划中的功能相同).

需要一个私人仓库?

对于那些需要私有存储库(或多个私有存储库)的人,您可以强烈考虑使用GitLab.

在这种情况下,GitLab比GitHub便宜,并且比Bitbucket快(尽管显然,您的里程可能因情况而异).

水银

Mercurial是一个跨平台的分布式版本控制系统,它是:

  • 高效能
  • 轻松扩展
  • 能够处理纯文本和二进制文件
  • 分支和合并功能先进.

尽管这些功能可能会带来复杂性,但工程师们仍在努力推出具有易于使用的集成Web界面的概念上简单的产品.

尽管命令行是用户与Mercurial交互的主要方法,但是有许多可用的图形用户界面(GUI)扩展,并且许多集成开发环境(IDE)提供了内置的Mercurial集成支持.

集中版本控制选项

集中版本控制系统选项

以下版本控制系统是一些可用的最受欢迎的集中式选项.

并发版本系统(CVS)

并发版本系统(CVS)是免费的版本控制软件.

CVS的起源是在1986年中期交付的一系列shell脚本.

CVS已不再维护(开发人员上次发布新版本的时间是2008年),但是您仍然会发现一些使用CVS的人.

使用CVS时,请注意它使用的术语与其他版本控制系统使用的术语略有不同.

例如,一组相关文件称为模块,而CVS服务器管理的一系列模块称为存储库。.

CVS调用开发人员签出的文件是工作副本,沙箱或工作区.

工作副本的修订通过提交发送到存储库,而更新是获取存储库中当前存在的更改的过程.

颠覆(SVN)

Apache的Subversion(SVN)是开源的版本控制/修订控制系统.

我们提到并发版本系统(CVS)仍然有一些用户,但是CVS自2008年以来就没有更新.

因此,Subversion被设计为可以(通常)用作CVS的(大多数)兼容替代品/后继产品.

是什么使颠覆值得?

虽然像Git这样的分布式系统似乎在版本控制系统领域引起了大多数关注,但Subversion还是很常用的,尤其是在开源社区中.

Subversion最初于2000年开发,是CVS的替代产品,但具有错误修复和CVS中未发现的其他功能。.

它的内置功能是Subversion的最大优势之一, 细粒度权限 系统.

您可以基于每个用户限制对文件和目录的访问.

此外,对于那些想要将二进制文件和其他资产与源代码存储在相同存储库中的人来说,Subversion是一个不错的选择(如果您拥有大量的上述二进制文件,则更是如此).

易于使用和目标市场

最后,不要轻视版本控制系统存在学习曲线的事实.

可以颠覆 更轻松 供人们(尤其是非技术用户)学习和理解,而不是其他版本控制系统.

最后,对于在以下地区运营的企业而言,Subversion是不错的选择 严格管制的行业.

尽管您当然可以破解任何版本控制系统来维护审核跟踪,但您需要确保您的公司符合适当的法规.

SVN作为企业级系统,具有使您简化此过程所必需的功能集.

Team Foundation Server(TFS)

Team Foundation Server(TFS)是Microsoft对版本控制系统世界的贡献.

TFS还包括以下功能:

  • 报告中
  • 需求管理
  • 项目管理
  • 测试和发布管理功能.

本质上,TFS包含管理软件开发生命周期各个方面所需的一切.

什么是TFS?

TFS可以与许多不同的集成开发环境(IDE)一起使用.

专为与 视觉工作室 要么 日食.

您可以自托管TFS,也可以订阅称为Visual Studio Team Services的托管版本。.

此外,TFS是少数具有内置可扩展性的产品之一.

如果与产品的设计背道而驰,您当然可以破解其他系统来执行您想要的方式,但是TFS使此过程更加容易.

摘要

有很多不同的版本控制系统,尽管它们在实现版本控制方面略有不同,但重要的是您要采用一种.

Git,CVS和SVN之间的差异不如不具有版本控制系统之间的差异大.

不要冒险遭受源代码灾难性损失—今天就采用版本控制系统!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map