版本控制实践

时间:2008-09-04 19:51:26

标签: version-control

在我目前的工作中,主管的做法是仅检查生产就绪代码。最近我参与的项目涉及3个不同开发人员的工作,其中有一些文件重叠。这意味着手动整合更改,尽管某些更改需要一天然后才完成。我想看看这是否是一种常见的做法,并获得有关如何改变这种做法的建议,并且知道很多时候我的意见在宏观方案中意义不大。

11 个答案:

答案 0 :(得分:4)

您可以使用各种方法来处理这种情况,具体取决于您的源控制系统。

私人分支机构:允许您在出发时办理登机手续并处理代码,并在适当的时间来回合并。

Shelvesets / pacakaged changesets:允许您存储更改集并将其发送以供审核 - 确保在签入之前准备好生产。

至于这是否是一种合适的工作方式,我们不允许在未经事先审查的情况下登记主要分支机构。要通过审核,您的代码必须通过各种自动化工具,然后必须为您的同行评审员所接受。对于“生产就绪”的一些定义 - 就是这样。因此,我们做的就像你做的那样。但是,我们使用私有分支来确保在此过程中仍可以签入,并且其他签入不必干涉。

如果生产就绪意味着在集成环境中进行测试,那么听起来您可能需要暂存分支或类似的东西。

答案 1 :(得分:2)

签入的代码应该进行单元测试,但对我来说,“生产就绪”意味着它已经过了集成和系统测试。在代码冻结之前你不能这样做,所以我不会在每次签到之前看到你如何做到这一点。

答案 2 :(得分:2)

首先从VSS切换到更可靠的东西。功能丰富。见How to convince a company to switch their Source Control

然后应用已知良好做法:

  • Check in often
  • 经常挑选其他人的更改,以简化合并
  • 使用快速unit tests确保每次更改都符合最低标准
  • 要求签入的代码始终构建,并始终通过测试。

现在你不会“生产就绪”:你仍然需要几个星期的时间来测试&在部署之前修复。把时间缩短对你来说太棒了,对你的客户来说太棒了,所以投资:

  • 高质量的自动验收测试。

答案 3 :(得分:1)

在更改完成并经过测试后,拥有一个可以检查非“生产就绪代码”的仓库测试分支不是一个好主意吗?

主干线应该永远不会检查代码中断构建并且不通过单元测试,但分支不必具备所有这些限制。

答案 4 :(得分:0)

我个人不赞成这一点,因为有时这是用经验不足的开发人员捕获问题代码的最佳方式(通过查看它们正在处理它)以及当您“提前和经常检入”时,您可以回滚到更早如果您认为之前做出的某些更改实际上是一个更好的主意,那么您所做的更改(正如您正在开发的那样)。

答案 5 :(得分:0)

我认为它可能是我们用户的版本控制,VSS与缺乏学习分支的时间相结合。我非常喜欢夜间检查以帮助开发并避免“走向黑暗”的想法。我可以看到他对中继线有抵抗力但可能正在建立一个开发SS,当代码生产就绪时,将其转移到生产SS。

答案 6 :(得分:0)

从我所看到的实践中,术语“生产质量”被用作“畏缩者”,以确保人们害怕打破树顶,不诚实,因为如果可能的话,树顶应该始终有效。 / p>

我想说最好的做法是你应该只在树顶部合并不同的(即单独的)功能组件。如果你对相同的源文件的增量有重大的重叠,我认为这可能“表明”在项目管理已经崩溃的某个地方,并且那些开发人员应该将他们的更改合并到单独的集成分支,然后再进入主线来源。一个单独的开发人员说他们对他们的东西进行了单元测试是无关紧要的,因为他们测试的东西已经改变了!

尝试解决主线代码行上的集成问题将不可避免地拖延其他无关的提交。

答案 7 :(得分:0)

假设您正在使用集中式版本控制系统(例如Subversion),并假设您有一个“主干”的概念(最新的良好代码所在的位置):

如果您在“功能分支”/“实验分支”中处理新功能,那么可以提交远未完成的代码。 (完成此功能后,您将表现良好的结果提交到“主干”。)

但如果将非编译/明显不工作的代码提交到“主干”或“发布分支”,您将无法赢得人气竞赛。

实用程序员有一本名为Pragmatic Version Control using Subversion的书,其中包含一个有关分支机构建议的部分。

答案 8 :(得分:0)

提前入住并经常入住,主要有两个原因 -

1 - 它可能使集成代码更容易

2 - 万一你的计算机爆炸,你的工作周没有消失

答案 9 :(得分:0)

@bpapa

将工作文件夹每夜备份到服务器可以防止丢失超过一天的工作量。

@tonyo

让我们看看需求文件是在我们完成编码后的第二天完成的。这会告诉你我们的项目管理吗?

我们是一家小商店,所以虽然你觉得改变很容易,但是有些东西对于旧的方式是不屈不挠的。

答案 10 :(得分:0)

我特别喜欢的方法是在仓库中使用不同的生命周期版本。也就是说,例如,有一个开发版本的代码,开发人员检查正在处理的代码;然后你可以有一个测试版,你可以在你的代码中添加beta修补程序;然后是生产版本。

这种方法存在明显的开销,例如您将在本地计算机上拥有更大的工作空间这一事实,您需要将迁移过程放到适当位置以将代码从一个阶段移动到下一个阶段(这意味着在执行与迁移一起进行的集成测试时代码会冻结),并且根据项目的复杂性,您可能需要使用可以更改设置,环境变量,注册表项等的工具。 /> 所有这一切都是一个痛苦的设置,但你只做了一次,一旦你完成所有这些,使得在代码的不同阶段工作变得轻而易举。