我正在寻找的是:
假设我有一个文件“database.conf”,它有一些数据库连接的默认值(dbname,user,password等)。每个人都需要具有不同设置的文件(例如密码)。但是,不应将此文件的本地更改提交到存储库。因此该文件应该是“仅结帐”。这可能吗?
答案 0 :(得分:3)
我通常的解决方案是创建一组具有不同名称的配置文件,并将它们放在源代码控制下,并与脚本一起将合适的文件复制到实际位置;然而,将要使用的配置文件仍然是未版本控制的。 例如,我可以有一个文件夹'config_files',包含文件'dev.config','production.config','qa.config'等;我的部署脚本会负责将正确的脚本复制到正确的位置(例如,'App.config')。
你甚至可以使用钩子来自动化这个。
答案 1 :(得分:2)
您可以创建要放入存储库的database.conf.sample
,并为ignore
文件设置database.conf
属性。
答案 2 :(得分:0)
tdammers的解决方案很好!
我是这样做的,我有一组不同名称的文件,如production.config
或adrian_dev.config
。我把它们全都检查了。
但后来我有了一些配置(例如在Apache配置中为mod_perl,或者是web.xml用于Java),其中我说明了我正在处理的“环境”,这是一个字符串,例如production
,所以该计划仅限于production.config
无需部署脚本复制内容。如果您需要进行更改,只需检查配置文件,而不必意识到您正在处理复制的文件。
答案 3 :(得分:0)
如果您使用Maven,则可以为每个不同的环境创建配置文件。
e.g
local.filter.properties dev.filter.properties beta.filter.properties
现在在pom.xml中,您可以定义一些配置文件并将它们指向不同的属性文件。
<profile>
<id>dev</id>
<build>
<filters>
<filter>src/main/filters/dev.filter.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>java</id>
<properties>
<idna.build.deployment.environment>JAVA</idna.build.deployment.environment>
</properties>
<build>
<filters>
<filter>src/main/filters/java.filter.properties</filter>
</filters>
</build>
</profile>
因此,在构建时,选择所需的配置文件,并在每个配置文件中定义db用户名密码等的变量。
yourapp.db.username=UserDev
yourapp.db.password=password
并在您的database.conf中通过变量名称
引用该属性username=${yourapp.db.username}
password=${yourapp.db.password}
现在,在构建应用程序时,请选择适合您正在进行的部署的配置文件。通过这种方式,conf将在编译时填充正确的用户名和密码,从而允许您只拥有一个database.conf文件。