我们如何在版本控制下处理开发人员的单个文件?
我们的存储库中的某些文件对于每个开发人员都是单独的。例如,某些开发人员使用本地数据库,该数据库是在项目的属性文件中配置的。因此,每个开发人员都有不同的设置。当一个开发人员提交时,他总是必须注意不要提交自己单独配置的文件。
你如何处理呢?
解决方案
使用SVN:Ignore(或者其等效项)以确保未将其检入到中继分支中。
好的,但是例如,应该将db-config-file保留在版本控制下,并且不应将其忽略。
我们使用ant构建或者应用,并且我们的ant构建文件具有对文件名的引用,如下所示:
$ {env.COMPUTERNAME}-。properties
如果存在,此文件中的所有属性将覆盖主构建文件中的属性。因此,开发人员可以创建一个以其计算机名称命名的替代文件,以覆盖他们喜欢的任何属性,例如数据库名称和jdbc url。然后可以将该文件检入版本控制
我们的属性文件位于"属性"目录下。每个开发人员都有自己的" username.properties"文件,他们可以覆盖特定于环境的文件中的属性,例如" dev.properties"或者" test.properties"。这利用了ANT的不可变属性(包括"个人优先"," THEN"环境属性)。
不要将它们置于版本控制之下,而要使用工具的忽略功能来防止它们被意外检入。相反,请对生成它们的脚本进行版本控制,该脚本可以使用版本控制的数据以及本地的非版本控制的数据。这样可以使它们保持最新状态,同时进行任何适当的本地修改,而不会将这些修改放回到存储库中。
编辑:某些文件格式可以选择使用本地替代。这些可以签入,但总的来说,许多人还不够聪明。因此,此替代方法。
它们应该绝对保持在版本控制之下。我们可以在用户环境中使用环境变量来检测特定于开发人员的属性。以ant为例,例如:
<property environment="env" /> <property file="${basedir}/online/${env.LOGNAME}.build.properties" /> <property file="${basedir}/online/${env.USERNAME}.build.properties" /> <property file="${basedir}/online/default.properties" />
如果我们将" LOGNAME"设置为" davec"并且存在" davec.build.properties",它将覆盖" default.properties"中的所有值。
这对于检查同事配置以开始或者诊断问题也很有帮助。
如果必须将它们放在同一存储库中,请创建一个" dev"文件夹或者其他内容,然后创建一个子文件夹,以供每个开发人员检入其用户文件。
或者有一个单独的用户文件存储库。
或者由各个开发人员自行处理文件。
这在上一篇文章中得到了解答。尽管问题更多地针对WebApp,但是实际的问题恰恰是我们现在面临的问题。
如何在不同的登台环境中维护Java Web应用程序?
我们的项目的设置与其他项目相似,在这些项目中,我们拥有开发人员特有的某种属性文件,但是我认为不应将特定于单个开发人员的文件检入源代码管理中。
我们有一个文件" personal.properties",该文件已加载并覆盖任何项目默认值。该文件位于用户的主目录中。对于特定于用户的任何值,默认值的设置如下:
database_user_name = DATABASE_USER_NAME_MUST_BE_SET_IN_PERSONAL_PROPERTIES_FILE
该文件永远不会由开发人员编辑,因此不会将任何特定于用户的信息检入到源代码管理中,并且如果开发人员忘记在其personal.properties文件中设置值,则会出现类似以下的明显错误:
Unable to login to database with username: "DATABASE_USER_NAME_MUST_BE_SET_IN_PERSONAL_PROPERTIES_FILE"
在源代码管理中保留一组默认值,然后执行以下任一操作:
- 让每个开发人员都有自己管理的一组可选配置(例如,未保存在源代码管理中)或者
- 让每个开发人员在某种身份识别方案下(例如@Dustin使用的username.properties)在源代码管理中保留自己的配置
将开发人员的特定配置保留在源代码管理中的优势在于,可以轻松地从一台计算机迁移到另一台计算机(例如,在硬件故障或者升级的情况下)。它是一个简单的svn co [repos]和ant
使用模板,我们无需将db-config添加到源代码控制中(实际上我们在SVN:IGNORE上使用了SVN:IGNORE),而是添加了db-config.tmpl或者db-config.template或者db-config.tmp或者其他明显告诉内容你这是一个模板。
该文件具有基本配置,可以复制到" db-config"中(只需复制该文件即可将模板保留在那里以接收更新),以供每个开发人员进行自定义。
使用git或者其他分散版本控制系统。然后,每个开发人员都可以将自己的私有更改保留在自己的私有分支中,在该分支上进行工作,然后从该分支中挑选出完整的功能,并返回到开发的主干中。
我们只是在开发人员之间保持标准。每个人都使用相同的目录,数据库名称和用户,因此我们不必担心这些事情。
亲切的问候