我们如何在版本控制下处理开发人员的单个文件?

时间:2020-03-06 14:33:06  来源:igfitidea点击:

我们的存储库中的某些文件对于每个开发人员都是单独的。例如,某些开发人员使用本地数据库,该数据库是在项目的属性文件中配置的。因此,每个开发人员都有不同的设置。当一个开发人员提交时,他总是必须注意不要提交自己单独配置的文件。

你如何处理呢?

解决方案

使用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或者其他分散版本控制系统。然后,每个开发人员都可以将自己的私有更改保留在自己的私有分支中,在该分支上进行工作,然后从该分支中​​挑选出完整的功能,并返回到开发的主干中。

我们只是在开发人员之间保持标准。每个人都使用相同的目录,数据库名称和用户,因此我们不必担心这些事情。

亲切的问候