当前位置: 首页 > 面试题库 >

描述使用版本控制(VCS或DVCS)的工作流程。

梁建德
2023-03-14
问题内容

我想在使用vcs或dvcs时学习其他人的工作流程。

请描述您处理以下任务的策略:

  • 实施功能
  • 修复错误(在开发和部署应用期间)
  • 代码审查
  • 重构代码(审查后的代码)
  • 合并补丁
  • 发布较新版本的应用程序(台式机,网络,移动设备,您是否会区别对待?)

随意组织您的答案,而不是按任务分组,而是按您认为相关的任何分组,但请按VCS / DVCS进行组织(请不要混合使用)。

谢谢。


问题答案:

VCS用于您要提到的各种任务的主要功能是分支:以协作方式隔离开发工作的能力。由于它是中央VCS,因此多个开发人员可以在同一个分支上进行协作,对文件进行悲观或乐观锁定,以便开发并行历史记录。

但是,成为VCS对分支有两个主要影响:

  1. 它倾向于阻止提交,因为一旦提交了文件,它将立即影响具有相同配置的其他视图的工作区(即“在同一分支上工作”)。
    〜“发布”过程是一个主动的过程,具有立即后果,
    〜而“消费”部分(更新您的工作空间)是一个被动的过程(您被迫在工作空间更新时立即处理其他人发布的更改)

  2. 它适用于线性 合并工作流(即“仅从分支A合并到分支B,不混合双向合并”-A到B到A到B …)。合并是微不足道的,所有来自A的修改都简单地转移到B
    现在:

实施功能

任何VCS都会通过创建一个分支来做到这一点,但令我惊讶的是,“功能”分支并不容易:
功能可能变得过于复杂
可能为下一个版本及时准备了
仅其中一部分可能需要合并回到主开发分支中
它可能取决于尚未完全完成的其他功能

因此,您在管理功能分支和提交的方式时需要谨慎:如果它们与同一个功能紧密相关,它将很好(您需要时将整个内容合并回主开发分支) 。否则,使用这些工具进行部分合并并不容易。

修复错误

开发期间和发布后的错误修复之间的区别在于,在前一种情况下,您通常可以在同一分支中线性完成它,因为在后一种情况下,您将必须建立一个Bug-fix分支,并确定将要解决的错误需要移植到您当前的开发分支。

代码审查

最好与外部工具(例如Crucible)一起使用,并广泛使用VCS功能(例如责备或注释),以便在审阅后更好地分配代码修复。

重构代码(审查后的代码)

如果重构较小,则可以在同一分支中进行。但是,如果很大,则需要建立一个特殊的分支,并在开始进行重构之前进行单元测试。

合并补丁

与最后一点相同的评论。如果补丁很大,则需要创建一个分支。

发行新版本的应用程序

VCS并不是发行管理工具,所以仅在发布应用程序时能带您到此为止。
您将需要以前确定要发布的版本(标签),但是之后是涉及以下内容的部署过程:

* 停止当前正在运行的
* 复制新文件
* 部署它们(更新sql数据库,webapp等)
* 实例化所有配置文件(具有正确的值,地址,端口号,路径等)
* 重新启动(如果您的系统由多个组件组成,请以正确的顺序重新启动它们!)

VCS和版本管理的关键在于:

* 它们不太适合存储要发布的二进制文件,这意味着您需要它们来构建应用程序,而不是存储生成的可执行文件
* 在生产环境中(安全限制限制了写访问权限以及在这些平台上运行的工具的数量,本质上是监视和报告工具),它们并不总是受欢迎的。

释放机制还对二进制依赖项有影响:

* 对于外部二进制依赖关系,您可能会使用诸如maven之类的机制来获取外部库的固定修订版
* 但是对于内部依赖关系,当您开发的不是一个应用程序而是几个依赖另一个应用程序时,您需要知道如何引用其他应用程序生成的二进制文件(内部二进制依赖关系),并且通常不会存储它们在您的VCS中(尤其是在开发阶段,您可以在其中产生许多不同的发行版,以供其他应用使用)

您还可以选择依赖于源代码(并获取自己需要的其他内部项目的所有源代码),而VCS很好地适应了此要求,但是重新编译所有内容并不总是/可行。



 类似资料:
  • 在我们开始搞明白 Git 命令之前,你有必要先了解一下版本控制的基本流程。这本书会向你一步步地详细阐述各种不同的工作流程。但是首先还是让我们先来一起了解一下版本控制的最基本的流程。 版本控制中的最基本的模块就是 “仓库(Repository)”。 名词解释 仓库(Repository) 你可以把一个仓库想象成一个数据库,在那里你的版本控制系统存储了项目积攒的所有版本和元数据(metadata)。在

  • 节奏工作流版本控制: 工作流执行具有以下代码: 工作流1: o/p的开始--版本1:1 工作流实施中的更改: 工作流2: o/p的开始--版本1:2 工作流实施中的更改: 工作流3: o/p的开始--版本1:3 工作流2的重放:o/p版本1: -1 工作流重播 1 : o/p --version1: -1 我期待低于o / p 重播工作流程2: o/p--版本1:2 工作流重播 1 : o/p -

  • Cadence工作流需要具有确定性,这意味着如果使用相同的输入参数执行工作流,工作流预计会产生完全相同的结果。 当我作为Cadence的新用户了解到上述需求时,我想知道当需要打破确定性的变化时,我如何才能长期维护工作流。 一个示例场景是,您有一个连续执行Activity1和Activity2的工作流,然后您需要更改这些活动的顺序,以便工作流在Activity1之前执行Activity2。还有许多其

  • Unix was not designed to stop you from doing stupid things, because that would also stop you from doing clever things. — Doug Gwyn 你曾经遇到过误删除了某些文件而又希望恢复的情形吧? 本书中提及的最重要的技巧就是将 Puppet 的 配置清单(manifests)纳入像

  • 这是一个具备完整结构的标准流程工作台,如果你希望隐藏一些功能模板,可以进行如下操作,Excel服务器系统管理—〉其它设置,如图所示: E立方管理软件Excel服务器在你不需要显示的模块前面打勾选择即可,另外对于管理员来说他们总是可以看见一个完整的流程工作台。      如果你不想改变整个流程工作台的结构,而只是不想在“已处理-未完成”显示某个工作流模板的未完成工作流,那么只需要在该模板的流程图属性

  • 我有两个 Jenkins 实例正在运行。一个旧的(旧版)版本为 1.614,另一个是 1.633 版的新版。 在旧的中,可以在工作描述中使用HTML(它甚至可以进行语法突出显示编辑)。新的没有。HTML 内容被转义并显示为纯文本。我在发行说明中找不到解释此行为的更改。我缺少配置吗?