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

Java 如何在版本控制下处理开发人员的单个文件?,java,version-control,Java,Version Control,我们存储库中的一些文件对每个开发人员都是独立的。例如,一些开发人员使用本地数据库,该数据库在项目的属性文件中配置。因此,每个开发人员都有不同的设置。当一个开发人员提交时,他必须始终注意不要提交单独配置的文件 如何处理此问题?使用SVN:Ignore(或其等效项)确保它们未被签入您的主干分支。好的,但例如,db配置文件应保持在版本控制下,且不被忽略。我们使用ant构建或应用程序,ant构建文件引用的文件名如下: ${env.COMPUTERNAME}-.properties 此文件中的所有属性都将

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


如何处理此问题?

使用SVN:Ignore(或其等效项)确保它们未被签入您的主干分支。

好的,但例如,db配置文件应保持在版本控制下,且不被忽略。

我们使用ant构建或应用程序,ant构建文件引用的文件名如下:

${env.COMPUTERNAME}-.properties


此文件中的所有属性都将覆盖主生成文件中的属性(如果存在)。因此,开发人员可以创建一个以其机器名命名的覆盖文件,以覆盖他们喜欢的任何属性,例如数据库名和/或JDBCURL。然后可以将此文件签入版本控制

我们的属性文件位于“属性”目录下。每个开发人员都有自己的“username.properties”文件,他们可以覆盖特定于环境的文件(如“dev.properties”或“test.properties”)中的属性。这利用了ANT的不可变属性(首先包括个人属性,然后是环境属性)。

不要将它们置于版本控制之下,并使用工具的“忽略”功能防止它们被意外签入。相反,版本是生成它们的脚本,可以使用版本控制数据和本地非版本控制数据。这样可以使它们保持最新,同时进行适当的本地修改,而不会有这些修改滑回存储库的危险


编辑:某些文件格式可以选择使用本地替代。这些可以签入,但一般来说,许多人不够聪明,无法做到这一点。因此这是一种解决方法。

它们应该绝对处于版本控制之下。您可以在用户环境中使用环境变量来检测特定于开发人员的属性。例如,在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”文件夹或其他内容,然后创建一个子文件夹,供每个开发人员签入其用户文件

或者为用户文件建立单独的存储库


或者让开发人员自己决定如何处理自己的文件。

这在以前的文章中得到了某种程度的回答。虽然这个问题更多的是针对WebApps的,但实际问题正是你现在所面临的


我们的项目的设置与其他项目类似,在其他项目中,您拥有开发人员特有的某种属性文件,但是我不认为特定于单个开发人员的文件应签入源代码管理

我们有一个文件
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"

在源代码管理中保留一组默认值,然后:

  • 让每个开发人员都有一组他们自己管理的可选配置(例如,不保存在源代码管理中)或

  • 让每个开发人员在某种标识方案(username.properties,如@Dustin uses)下在源代码管理中保留自己的配置


将开发人员的特定配置保留在源代码管理中的优势使从一台计算机迁移到另一台计算机变得容易(例如,在硬件故障或升级的情况下)。这是一个简单的svn co[repos]和ant使用模板,您不需要将db配置添加到源代码管理中(实际上您在他身上使用了svn:IGNORE),而是添加db-config.tmpl或db-config.template或db-config.tmp或其他明确告诉您它是模板的内容


此文件具有基本配置,将被复制到“db config”(刚刚复制,保留模板以接收更新)中,供每个开发人员自定义。

使用git或其他分散版本控制系统。然后,每个开发人员都可以在自己的私有分支中保留自己的私有更改,在该分支上工作,然后从该分支中挑选完成的功能,并将其放回开发的主干中。

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


亲切问候

用户特定的设置永远不应该保留在源代码管理中(请参阅Dustin的答案,以了解似乎是一个好的解决方案)。