我正在寻找的是这样的:SVN:只读/检出只读文件
说我有一个文件“database.conf”有一个数据库连接一些默认值(数据库,用户,密码等)。每个人都需要使用不同设置的文件(例如密码)。但是,此文件的本地更改不应该提交给存储库。所以该文件应该是“仅限结帐”。那可能吗?
我正在寻找的是这样的:SVN:只读/检出只读文件
说我有一个文件“database.conf”有一个数据库连接一些默认值(数据库,用户,密码等)。每个人都需要使用不同设置的文件(例如密码)。但是,此文件的本地更改不应该提交给存储库。所以该文件应该是“仅限结帐”。那可能吗?
我通常的解决办法是建立一套具有不同名称的配置文件,并把它们的源代码控制下,连同脚本复制合适的一个实际位置;即将使用的配置文件仍然未版本化。 例如,我可以有一个文件夹“CONFIG_FILES”,包含文件“dev.config”,“production.config”,“qa.config”,等;我的部署脚本将负责将正确的脚本复制到正确的位置(比如'App.config')。
你甚至可以使用钩自动运行该更多一些。
通过tdammers该解决方案是一个很好的!
我这样做,我有一组不同名称的文件,如production.config
或adrian_dev.config
。我检查他们全部。
但是然后我有一些配置(例如在mod_perl的Apache配置,或Java的web.xml),在哪里我说什么“环境”我工作,这是一个字符串,例如production
,所以程序只是去例如而不需要部署脚本来复制东西。如果您需要进行更改,只需检查配置文件即可,而不必意识到您正在处理复制的文件。
您可以创建database.conf.sample
以放入存储库,并为database.conf
文件设置ignore
属性。
这将是最简单的解决方案,我可能会这样做。 – MonsieurBon 2010-10-22 09:48:18
如果您使用的是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>
所以,当你建立你的选择要和每个配置文件,可以定义数据库的用户名密码等变量的轮廓..
yourapp.db.username=UserDev
yourapp.db.password=password
,并在您database.conf引用属性由其变量名称
username=${yourapp.db.username}
password=${yourapp.db.password}
现在,当您构建应用程序时,请选择适合您部署的配置文件。这样conf就会在编译时使用正确的用户名和密码填充,从而让你只有一个database.conf文件。
关于钩:这是唯一可能允许或禁止,但不改变在预提交的提交,是不是? – MonsieurBon 2010-10-22 09:47:02
我正在考虑复制结账时正确的设置文件,但我不确定svn是否支持结帐钩子。 – tdammers 2010-10-22 14:58:48