与分布式源代码控制的持续集成

2024-03-05

我想我误解了一些东西,但无法找到到底是什么。我用谷歌搜索,但没有明白这个想法。有两种流行的技术——持续集成和分布式源代码控制。人们以某种​​方式将它们结合起来,但我不明白如何结合。

AFAIK,持续集成意味着在本地测试代码后立即提交到中央存储库(推送)。与此同时,分布式系统受到如此多的喜爱,除其他外,因为你可以在本地提交、提交、提交并使用代码,只有当你对代码足够有信心和满意时,才能将其推送给其他人。因此,虽然它不强制,但它鼓励不要急于推动。在我看来,经典的 CI 每隔几个小时推送一次的情况不会发生。

那么如何以及何时将这两件事联系在一起呢?还是我说的有错?

EDIT

我读了前三个答案。感谢您的答复。我仍然很困惑,但现在我可以更准确地提出问题。

在分布式系统中,没有那么多频繁提交的愿望,而在集中式系统中。那么,是否有任何关于在分布式系统中发布的频率以符合 CI 的指南?仍然是一天几次还是这个规则有其他版本?


分布式源代码控制和持续集成并不是相互排斥的概念。事实上他们在一起玩得很好。

尽管 DVCS 本质上是分布式的,但您仍然拥有一个代表集中式版本系统中传统“主干”的中央存储库。您不应该根据“发布”到中央存储库的时间和内容来更改您的开发模型。因为 DVCS 不会强迫您推动更改,所以您需要在这方面非常自律。

另一方面,DVCS 使开发人员能够在其私有分支上进行更小规模的增量提交。这种方式不仅更容易遵循更改,而且最终也更容易合并。在增加功能或进行实验性更改时,本地提交特别有用。或者当您需要中断功能 A 的工作来修复非常重要的错误 B 时。

各个开发人员决定何时推送/发布什么。一如既往,额外的权力伴随着额外的责任。


您应该在准备就绪时推送/发布更改。例如我想重命名一个类。这将涉及 50 多个文件,即使只有几行。我使用重构工具进行重命名。

在集中式系统中,我现在必须决定这是否真的值得单独提交,或者它是否是我当前正在进行的更大工作的一部分。根据经验,人们通常会选择第二个选项,因为你不确定是否希望它成为永久历史的一部分。

在分布式系统中,我可以在本地提交更改,我在机械(重构)和功能代码更改之间有清晰的历史记录。此刻,我不会影响其他任何人。在我最终推出更改之前,我可能会很容易地修改该决定。那么这本身就是一个干净的提交。

此示例中的问题在于以下情况:假设我在本地分支或“延迟提交”上重命名该类。与此同时,有人向主干提交了使用我刚刚重命名的类的新代码。合并我的重命名会很麻烦。

当然,您可以在执行此操作后立即发布该更改。在两个系统中。责任是一样的。但由于 DVCS 鼓励您进行更小、增量的提交,因此合并会更容易。如果您尽早发布更改,两个系统都可以为您提供相同的“退出策略”以摆脱这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与分布式源代码控制的持续集成 的相关文章

  • 由于 poms 中的版本发生更改,合并来自 Maven 发布分支的更改会产生冲突

    按照标准实践 我有一个用于功能开发的 svn 主干 以及一个用于构建版本的分叉分支 该分支是使用 maven 发布插件创建的 该插件也用于创建发布 碰巧的是 偶尔的错误将在分支上修复 并且这些更改需要合并回主干 为了不错过任何更改 我希望能
  • 如何在 gitlab-ci 作业之间传递变量?

    我有一个像这样的 gitlab ci stages calculation execution calculation job stage calculation script calculate something and output
  • 如何将 Mercurial 存储库克隆到已存在的目录中?

    我有一个客户的 Django 项目 正在本地开发 使用 Mercurial 进行版本控制 我将本地存储库推送到我的个人远程服务器 我保存所有项目的地方 然后当我部署它时 在任何 Web 服务器上 我从我的个人服务器克隆该存储库 这在大多数服
  • 以最小的努力在多台计算机之间同步代码

    我希望能够跨多台计算机 准确地说是 3 台 同步源代码和整个项目 我尝试过使用 git 但从来没有获得过无忧无虑的体验 也许是因为我从来没有投入很多精力 所以 我理想中想要的是 能够将文件夹及其所有子文件夹添加到 同步 列表 基本上 一旦我
  • Git Visual Studio 与 Bitbucket confluence 连接到现有项目错误/获取失败

    如何使用 Visual Studio 17 从现有 Bitbucket GIT 存储库中提取数据 Error git 因致命错误而失败 找不到 xyz 存储库 I added 这个迷雾 https marketplace visualstu
  • 如何使用 git-svn 使 svn:external 保持最新?

    将我的存储库视为 SVN 存储库 我得到 svn co http myrepo foo trunk foo foo bar baz gt http myrepo baz trunk 将其视为 Git 存储库 我得到 git svn clon
  • 根据代码版本测试和管理数据库版本

    当您开发应用程序时 数据库的更改不可避免地会出现 我发现的技巧是让数据库构建与代码保持同步 过去 我添加了一个针对目标数据库执行 SQL 脚本的构建步骤 但这很危险 因为您可能会无意中添加虚假数据或更糟的情况 我的问题是保持数据库与代码同步
  • Jenkins - Xcode 构建工作协同设计失败

    下面是我的构建脚本 不使用 xcodebuild 插件 构建步骤工程 我使用所需的证书和私钥创建了一个单独的钥匙串 它们在钥匙串访问中可见 脚本中的钥匙串命令不会失败 安全列表钥匙串将这些显示为有效的钥匙串 它的表现就像解锁命令并未真正成功
  • 我可以在 git 中使用单个命令推送到多个存储库吗?

    基本上我想做一些类似的事情git push mybranch to repo1 repo2 repo3 现在我只是多次输入push 如果我急于完成push 我只需将它们全部发送到后台git push repo1 git push repo2
  • 清理 Subversion 存储库的最佳方法是什么?

    我有一个不断增长的存储库 其中包含十几个我使用 TortoiseSVN 维护的项目 因为我对此完全陌生 还不知道其来龙去脉 我保存存储库的空间有限 因此我想备份它 然后删除一些旧版本 例如 如果一个项目的版本为 50 我只想保留 50 49
  • 如何将参数从jenkins传递到selenium

    我正在使用詹金斯和硒 我需要将测试 url 从 jenkins 发送到 selenium 服务器 在常规选项卡下 詹金斯字符串参数 Name APP Default Value http localhost basecode 在构建后操作下
  • 在源代码管理中管理我的数据库

    由于我正在处理一个新的数据库项目 在 VS2008 中 而且我从未从头开始开发数据库 因此我立即开始研究如何在源代码管理 在本例中为 Subversion 中管理数据库 我找到了一些关于SO的信息 包括这篇文章 保持多个环境中的开发数据库同
  • 如果文件已在服务器上,请避免使用 git-ftp 上传

    假设我有应用程序的本地副本 我将其推送到 github 然后使用 git ftp 将任何更改上传到我的服务器 我首先会使用 git ftp init u
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • 如何定制Maven唯一版本字符串?

    我想知道有哪些选项可以自定义 Maven 工件部署时使用的时间戳字符串
  • git 可以与 Xcode 集成吗?

    有没有办法将 git 存储库与 Xcode 内置的 SCM 功能一起使用 Xcode 4 原生支持 git WWDC 2010 上的开发者工具国情咨文演讲 在这里了解更多 Xcode 4 中的新增功能 http developer appl
  • 在 System Groovy 中暂时禁用 Jenkins 服务器上的 SCM 轮询

    我们有一个 Jenkins 服务器 正在运行 20 到 30 个作业 由于构建过程相当复杂 我们将实际构建分解为 1 个子构建 其中一些可以同时运行 其他则必须遵循之前的构建步骤 因此 我们将每个构建步骤分为 3 组 这三组在构建进行时会被
  • Maven 中不同配置文件的不同 SCM

    在我的项目中 我们必须使用 maben build number 插件来构造 jar 的最终名称 为此我们使用 SCN 的修订版 因此我们需要 SCM 但是我们在无法直接访问的受控环境和本地测试环境上有两个 SVN 因此对于我们的 poup
  • 纯基于网络的版本控制系统

    我的托管服务当前不允许在其服务器上运行 允许 svn git cvs 我真的希望能够将我的开发计算机上的当前源代码与我的生产服务器 同步 我正在寻找一个纯php python ruby版本控制系统 不只是一个client对于版本控制系统 不

随机推荐

  • 调用 AutoFixture 自定义的 Dispose 方法

    我正在使用 AutoFixture 自定义来测试访问 SQL Compact DB 的存储库 测试完成后立即删除该数据库对我非常有帮助 因为数据库是在自定义构造函数中创建的 所以我认为删除它的最佳位置是在 dispose 方法中 我正在想的
  • 如何执行“nslookup主机服务器”

    My C 服务需要定期轮询nslookup host server 目前它产生了一个Process执行批处理脚本 由于性能原因 我正在考虑使用一些进行此检查API 但问题是 例如 使用System Net Dns GetHostAddres
  • g++ __static_initialization_and_destruction_0(int, int) - 它是什么

    编译 c 文件 带有全局静态对象 后 我进入nm输出这个函数 00000000 t Z41 static initialization and destruction 0ii static initialization and destru
  • 如何在 Play! 中将复选框绑定到布尔值!框架

    我正在使用 Play 开发一个应用程序 框架有一个名为gift 的对象 它具有一个名为Taken 的布尔属性 如何在我的视图中将该值的状态显示为复选框 我试过了
  • PyQt - QTableView 不响应 dataChanged 信号?

    QSqlQueryModel是一个很棒的数据库模型 但它是只读的 所以我重写了它setData and flags 方法 现在 我可以编辑我的数据库表QTableView 但是当我发出一个 QTableView 时 它不会刷新自己dataC
  • 在java中为以下数据选择完美的数据结构

    我必须根据我的需要选择一种数据结构 下面我解释一下有以下值的条件 abc def rty ytr dft which all are map to row R1B1 actully key is combination of R1 B1 a
  • 我该如何优化 IE7/IE8 的 ajax 应用程序以避免“停止运行此脚本”?

    我的预订引擎在 IE7 中运行非常缓慢 它是 ajaxified 和基于 hash window onchange 的 总共有 5 个步骤 我遇到的主要问题是第 2 步在 IE 中速度非常慢 当用户到达第 2 步时 系统会发出 ajax 请
  • 用作默认参数的 C#“常量对象”

    有没有办法创建一个常量对象 即它不能编辑并且在编译时创建 我只是在玩 C 语言 注意到可选参数功能 并认为能够使用默认对象作为可选参数可能会很不错 考虑以下 this class has default settings private c
  • 无状态 Apache Wicket 无状态页面/请求

    所以我在读另一个问题 https stackoverflow com questions 2168249在 Wicket 标签下进行比较阿帕奇检票口 http wicket apache org and 阿帕奇点击 http incubat
  • 将电子表格数据显示为 HTML 表格

    我的 HTML 表有问题 我希望我的电子表格数据显示在那里 我不知道我错过了什么 这是我的代码 GS function getTableData var url3 https docs google com spreadsheets d x
  • Vue 3:getCurrentInstance() 是否已弃用?

    我看过参考文献getCurrentInstance 可以在一些旧的 文档和代码上使用 但在当前的 Vue 3 文档中找不到它 Is getCurrentInstance 已弃用 如果有 原因是什么 inject 考虑够了吗 如果没有 为什么
  • Ruby 在哪里跟踪其打开的文件描述符?

    这个问题是什么Not About 这个问题是not关于如何使用 File close 或 File open 块语法自动关闭文件 这是一个关于 Ruby 在运行时将打开的文件描述符列表存储在哪里的问题 实际问题 如果您有一个具有打开描述符的
  • Typeahead.js 在 Knockout 3 foreach 绑定中不起作用

    我将一个 Web 应用程序更新为 Bootstrap 3 和 Knockout 3 因此丢失了 Bootstrap 2 中的内置 typeahead 我添加了 typeahead js 它工作得很好 除非我在 Knockout foreac
  • 如何在C#中快速将二维数组转换为一维数组?

    我有一个多维的double 数组 其大小为 1 N 假设 N 已知 将其转换为一维的最快方法是什么double 长度为 N 的数组 我是 C 新手 我用它与 Matlab 函数交互 我使用的 Matlab 函数返回一个一维行向量 在 C 中
  • 如何确定 DICOM 系列是 3D 体积还是一系列图像?

    我们正在为 dicom 文件编写一个导入器 人们通常如何确定一系列图像形成 3D 体积还是只是一系列 2D 图像 对于大多数供应商来说 是否有通用的方法来决定这一点 我查看了 DICOM 标签 但找不到明显的解决方案 DICOM 标准定义了
  • 如何捕获Tomcat启动日志

    如何捕获Tomcat启动日志 要在Windows中启动Tomcat 可以执行命令 卡塔琳娜运行 在你的 tomcat bin 文件夹中 Tomcat 启动的输出将保留在当前窗口中 以便您可以对其进行分析
  • ValidationResult.MemberNames 属性是否会包含多个值?

    我用反射器搜索 但没有找到一个案例ValidationResult MemberNames http msdn microsoft com en us library system componentmodel dataannotation
  • VBA Excel 中的范围查找

    我正在尝试使用以下指令在 Excel 工作表中执行 查找 Set Found Columns 2 Find What value to find After ActiveCell LookIn xlFormulas LookAt xlPar
  • 有关 IsNullOrWhiteSpace() 的快速提示中的“字符串”与“字符串”

    在 Visual Studio 2015 中工作 我对以下效果进行了条件检查 if String IsNullOrWhiteSpace stringToTest 我看到了一个 IDE001快速提示或行动 https msdn microso
  • 与分布式源代码控制的持续集成

    我想我误解了一些东西 但无法找到到底是什么 我用谷歌搜索 但没有明白这个想法 有两种流行的技术 持续集成和分布式源代码控制 人们以某种 方式将它们结合起来 但我不明白如何结合 AFAIK 持续集成意味着在本地测试代码后立即提交到中央存储库