Version control 签入源代码管理之前的过程?

Version control 签入源代码管理之前的过程?,version-control,Version Control,我开始在工作中获得“破坏构建的家伙”的名声 问题不在于我编写的代码不可靠,而是当涉及到将我的修复返回到源代码控制时,一切都出了问题 我经常做一些愚蠢的事情,比如: 忘记添加新文件 意外地检入代码以查找半修复的错误和另一个错误修复 在签入文件之前忘记将其保存在VS中 我需要养成一些习惯/工具来阻止这种情况 您经常做些什么来确保您签入的代码是正确的,并且是需要签入的代码 编辑 我忘了提到这个地方会变得非常混乱。我经常在同一时间在同一个代码库中处理两三件事情。当我签入时,我真的只想签入其中的一项。

我开始在工作中获得“破坏构建的家伙”的名声

问题不在于我编写的代码不可靠,而是当涉及到将我的修复返回到源代码控制时,一切都出了问题

我经常做一些愚蠢的事情,比如:

  • 忘记添加新文件
  • 意外地检入代码以查找半修复的错误和另一个错误修复
  • 在签入文件之前忘记将其保存在VS中
我需要养成一些习惯/工具来阻止这种情况

您经常做些什么来确保您签入的代码是正确的,并且是需要签入的代码

编辑


我忘了提到这个地方会变得非常混乱。我经常在同一时间在同一个代码库中处理两三件事情。当我签入时,我真的只想签入其中的一项。

我通常都会先做“获取最新信息”,然后再构建。如果构建良好,那么我将签入我的代码。

一些建议:

  • 试着一次解决一个问题。很容易对代码库进行不相关的更改,然后将其作为一个大的块提交,并且日志消息很差。Git在这里非常出色,因为您可以非常轻松地移动交换机分支,并隐藏和挑选更改
  • 在提交之前运行status命令,查看您已经接触了哪些文件,以及是否创建了需要添加到版本控制的新文件
  • 运行diff命令查看实际更改的内容。通常情况下,您会发现您留下了一些应该删除的调试日志记录,或者进行了一些不必要的更改,这些更改会使差异变得混乱。请尝试使差异尽可能小和干净
  • 确保您的工作副本中包含您的更改
  • 在签入之前进行更新,并确保您的工作副本中包含其他人的更改
  • 运行您可能必须运行的测试套件,以确保您的更改正常工作
  • 做出小而频繁的承诺。在中断提交很小的情况下,更容易找出是什么破坏了构建

团队可以做的其他事情是像David M建议的那样设置一个持续集成服务器,以便尽快自动发现损坏的构建。

在过去,我使用“清晰案例中的分支”来帮助解决此问题。我使用的过程如下。我从来没有使用过SorceDepot,所以我不知道如何将其适应于它

  • 为bug修复创建一个分支
  • 对分支上的所有更改进行编码
  • 代码审查
  • 合并到不同视图中的稳定分支(不同视图很重要)
  • 签入前:编译、测试和运行
  • 将代码签入稳定分支

  • 通过创建分支,然后将更改合并到不同的视图(我使用合并管理器进行合并),任何未包含或未签入的文件都会立即导致问题。这样,在稳定分支上签入时,所有内容都会得到测试。

    避免问题的最好方法是使用大多数SCM中提供的挂钩(SVN和Mercurial中肯定有挂钩,我相信其他高级SCM中也一定有挂钩)。将单元测试附加到钩子上,并使其在每次有人签入代码时运行—恰好在代码签入之前。通过这种方式,您将实现两件事:

    • SCM repo中的代码将始终通过测试
    • 您不会犯大多数简单的错误,因为如果您有像样的测试套件,它们应该很容易被检测出来

    首先,使用多个工作副本(又称沙盒)-每期一份。因此,如果您已经在某个复杂的功能上工作了一段时间,并且需要在同一个项目上处理一个快速的bug修复,请查看一个新的干净的工作副本,并在那里进行bug修复。对于每个问题都有独立的工作副本,不存在从工作副本提交到repository的更改的混淆

    其次,在提交更改之前,请始终执行以下三个步骤:

  • 构建软件
  • 运行烟雾测试(是否启动并运行而不崩溃)
  • 通过将更改与基线进行区分,检查正在签入的更改

  • 在任何合并操作之后(例如,在SVN更新之后),都应该重复这些操作。

    以下是我一直在做的事情。我过去使用ClearCase和CVS进行源代码控制,最近我使用Subversion和VisualStudio2008作为我的IDE

  • 更改代码并在本地计算机上构建

  • 事实上,确保他们修复了问题中的bug

  • 在本地计算机上运行SVN更新,并重复步骤1和2

  • 运行自动化单元测试以验证它们是否通过

  • 如果可以使用自动烟雾测试,自动测试系统的许多功能,请运行它。验证结果是否正确

  • 然后转到构建机器并运行构建脚本

  • 如果项目的配置发生了变化,这肯定会破坏构建。在生成计算机上执行SVN更新,无论生成脚本是否执行该更新。打开生成计算机的IDE副本,并执行完整的重建。这将向您显示生成框是否存在您在计算机上处理过但在生成框上没有处理过的任何问题


    如果您能够跟踪您正在处理的所有问题,那么为每个问题保留单独分支的建议也非常好。

    我喜欢为Windows资源管理器提供Tortoise插件。文件图标都标有提交、修改或未添加的图标,因此很容易查看文件的状态。我还为修改后的文件启用元数据,这样我就可以在列表(详细信息)视图中对更改的文件进行排序,在列表(详细信息)视图中,这些文件会冒泡到顶部,以便