签入源代码管理之前的程序?

时间:2010-01-13 14:56:12

标签: version-control

我开始在工作中获得声誉,因为“打破了构建的人”。

问题不在于我正在编写狡猾的代码,但在检查我的修复程序回到源代码控制时,一切都出错了。

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

  • 忘记添加新文件
  • 意外地检查代码中的半修复错误以及其他错误修复
  • 中检查之前忘记将文件保存在VS中

我需要养成一些习惯/工具来阻止这种情况。

您经常做些什么来确保您签入的代码是正确的并且需要进行哪些操作?

修改

我忘了提到这个地方的事情会变得非常混乱。在任何时候,我经常会在同一个代码库中处理两到三件事。当我办理登机手续时,我只想检查其中一件事。

9 个答案:

答案 0 :(得分:7)

一些建议:

  • 一次尝试一个问题。很容易对代码库进行无关的更改,然后最终被提交为一个具有较差日志消息的大块。 Git在这里很出色,因为你可以轻松地移动开关分支,隐藏和樱桃选择更改。
  • 在提交之前运行status命令,以查看您触摸了哪些文件,以及是否已创建需要添加到版本控制的新文件。
  • 运行diff命令以查看您实际更改的内容。很多时候你会发现你已经离开了一些应该被取出的调试日志记录,或者做了一些不必要的改变,这只会让差异变得混乱。尽量使你的差异尽可能小而干净。
  • 确保您的工作副本随着您的更改而构建
  • 在签入之前进行更新,并确保您的工作副本与其他人员的更改构建
  • 运行您可能需要的任何冒烟测试套件,以确保您的更改正常工作
  • 做小而频繁的提交。当破坏提交很小时,弄清楚破坏构建的内容要容易得多。

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

答案 1 :(得分:4)

我通常总是先做一个Get Latest,然后再进行构建。如果构建良好,那么我签入我的代码。

答案 2 :(得分:2)

首先,使用多个工作副本(a.k.a沙箱) - 每个问题一个。因此,如果您已经在一段时间内处理某些复杂功能,并且需要在同一个项目上处理快速错误修复,请查看新的干净工作副本并在那里修复错误。对于每个问题都有独立的工作副本,不会混淆从工作副本提交到reposistory的更改。

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

  1. Buld the software。
  2. 进行冒烟测试(启动并运行而不会崩溃)。
  3. 通过将更改与基准区分开来检查您正在检入的更改。
  4. 这些应该在任何合并操作之后重复(例如在SVN更新之后)。

答案 3 :(得分:2)

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

  1. 更改代码并在本地计算机上构建。

  2. 确保他们确实修复了有问题的错误。

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

  4. 运行自动单元测试以验证它们是否通过。

  5. 如果有自动烟雾测试,它会自动测试系统的许多功能,请运行它。验证结果是否正确。

  6. 然后转到构建计算机并运行构建脚本。

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

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

答案 4 :(得分:2)

在我的工作场所,此安全网是同行评审。也就是说,让他人在他们的视图上构建,运行和重现您的计算机上的解决方案。

我不能推荐这个。它已经捕获了许多遗漏,可能存在的问题以及其他偶然的垃圾碎片,使其成为这一过程的重要组成部分。更不用说仅仅知道你必须将你的工作放在别人面前才能进入主要分支,这意味着你提高了自己的质量标准。

答案 5 :(得分:1)

过去我在Clear Case中使用分支来帮助解决这个问题。我使用的过程如下。我从未使用过SorceDepot,所以我不知道如何使用它来适应它。

  1. 为错误修复创建分支
  2. 对分支机构的所有更改进行编码
  3. 代码审核
  4. 在不同视图中合并到稳定分支(不同视图很重要)
  5. 在签入之前:编译,测试和运行
  6. 将代码签入稳定分支
  7. 通过创建分支然后将更改合并到不同的视图(我使用合并管理器进行合并),任何未包含或签入的文件都会立即导致问题。这样一切都会在稳定分支上检查时进行测试。

答案 6 :(得分:1)

避免问题的最好方法是使用大多数SCM中提供的钩子(它们肯定在SVN和Mercurial中,我相信它们必须在其他高级SCM中)。将单元测试附加到钩子上,并在每次有人检查代码时使其运行 - 恰好在签入之前。这样你就可以实现两件事:

  • SCM repo中的代码将始终通过测试,
  • 你不会犯最简单的错误,因为如果你有合适的测试套件,它们应该很容易被发现。

答案 7 :(得分:1)

我喜欢Windows资源管理器的Tortoise插件。文件图标都标有提交,修改或未添加的图标,这使得查看文件的状态非常容易。我还启用了修改的元数据,因此我可以在列表(详细信息)视图中对已更改的文件进行排序,其中它们起泡到顶部所以我可以看到它们。

我打赌你的SCM有一个Tortoise *插件,我看到一个用于Mercurial和SVN(以及CVS,呃)。我真的希望Mac OS X的Finder能够接受像Tortoise这样的插件,它比在大多数时候打开专用应用程序要容易得多。

答案 8 :(得分:1)

在您签入代码之前,让其他人完成“每次”更改。