版本控制应包含构建应用程序所需的代码和配置。
这意味着:
短时间内引入的临时性内容(例如,定位错误的位置或尝试某种语言的功能所需的时间)不应放在版本控制中:保留它直到您需要,然后在执行commit时将其删除。
适用于特定计算机的本地文件可以保存在分支中。
我会避免将它们仅保留在本地,因为在笔记本电脑被盗或病毒迫使您重新安装操作系统时,要重做所有这些事情太麻烦了(顺便说一句,您发现上次备份是两年前完成的) 。
另一方面,请注意文件结构:本地配置是可以的,直到它变得不堪重负,并迫使您对参与该项目的42个开发人员中的每个文件进行单个更改。
留意删除机器之间特殊性的机会。这可能意味着:
授予对dev SQL服务器的访问权限,以替换开发人员计算机上的本地实例,
对于公共包裹使用Pypi或npm等包裹分发服务,对内部包裹使用私人对应服务,
要求团队成员安装相同版本的软件,
使软件更新尽可能透明,
或者可以一键式将操作系统和所需的软件部署到计算机上(加上每个开发人员安装他喜欢的Vim,Emacs,Chrome和Firefox等的时间)。
所以:
项目文件。可能需要编辑路径才能反映当前PC上的布局。
为什么不在每台PC上使用相同的布局?项目中的路径应相对于项目文件,这意味着项目位于何处都没有关系。最好使软件和库的版本相同,以避免仅在某些计算机上出现的,无法为团队其他成员复制的神秘错误。
例:
在使用Visual Studio创建的项目中,您可能会发现:
文件本身。路径是相对的,项目是否位于我的机器上,H:\Development\Hello World Project\
而团队中的其他成员将项目检入到无关紧要C:\Work\HelloWorld\
。
依赖关系,即第三方库和内部库。两种类型都应由NuGet处理,这会使所有与冲突相关的讨论都已过时。如果您没有与我相同的库版本,请要求NuGet更新依赖关系。就这么简单(当它运行良好时,并非总是如此)。
请注意,将内部库也保存在私有NuGet中也很重要。将一堆库存储在共享文件夹中或通过团队中的电子邮件发送会导致混乱和令人沮丧的CI服务器。
设置。团队共享相同的设置至关重要。如果团队的一半决定将警告视为错误,而团队的一半将警告保持原样,则团队第一部分的成员将花费时间从团队第二部分中消除开发人员生成的警告。
与实用程序相关的设置。这些非常棘手,因为团队中的某些成员可能已经安装了某些实用程序,而其他人却没有安装。
强烈建议安装相同的工具集。如果某些程序员想要使用StyleCop,而其他程序员则不想,则团队将无法完成工作。如果某些人使用代码合同,而其他人不使用代码合同,则它们将遇到相同的问题。
生成文件。例如,在调试过程中可能需要关闭优化,但对于CI服务器则不需要。
在版本控制中保留几个makefile。在CI服务器上构建调试版本并将其推送到遇到棘手错误的客户端也很常见。
肮脏的丑陋骇客。例如,在函数中间返回7,以便根据函数测试某些东西,并怀疑在7值处中断。
我会首先避免这样的代码。为了测试某些东西,请使用单元测试。如果出于调试目的确实需要几秒钟交换一些代码,则可以执行此操作,但是无论如何您将在几分钟后删除此代码,因此无需提交它。
描述时,您应该编写一个测试。例如,如果您要确保:
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
temperature
不如AbsoluteZero
常量时抛出异常,您不应该玩代码本身。相反,创建一个单元测试,它将:
- 自我记录您的代码,
- 提高代码的可靠性,
- 确保维护者在修改上述方法时可以依靠回归测试,
- 为您团队中可能需要进行相同测试的其他开发人员提供服务。