2010-10-22 95 views
2

我正在寻找的是这样的:SVN:只读/检出只读文件

说我有一个文件“database.conf”有一个数据库连接一些默认值(数据库,用户,密码等)。每个人都需要使用不同设置的文件(例如密码)。但是,此文件的本地更改不应该提交给存储库。所以该文件应该是“仅限结帐”。那可能吗?

回答

3

我通常的解决办法是建立一套具有不同名称的配置文件,并把它们的源代码控制下,连同脚本复制合适的一个实际位置;即将使用的配置文件仍然未版本化。 例如,我可以有一个文件夹“CONFIG_FILES”,包含文件“dev.config”,“production.config”,“qa.config”,等;我的部署脚本将负责将正确的脚本复制到正确的位置(比如'App.config')。

你甚至可以使用钩自动运行该更多一些。

+0

关于钩:这是唯一可能允许或禁止,但不改变在预提交的提交,是不是? – MonsieurBon 2010-10-22 09:47:02

+0

我正在考虑复制结账时正确的设置文件,但我不确定svn是否支持结帐钩子。 – tdammers 2010-10-22 14:58:48

0

通过tdammers该解决方案是一个很好的!

我这样做,我有一组不同名称的文件,如production.configadrian_dev.config。我检查他们全部。

但是然后我有一些配置(例如在mod_perl的Apache配置,或Java的web.xml),在哪里我说什么“环境”我工作,这是一个字符串,例如production,所以程序只是去例如而不需要部署脚本来复制东西。如果您需要进行更改,只需检查配置文件即可,而不必意识到您正在处理复制的文件。

2

您可以创建database.conf.sample以放入存储库,并为database.conf文件设置ignore属性。

+0

这将是最简单的解决方案,我可能会这样做。 – MonsieurBon 2010-10-22 09:48:18

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> 

所以,当你建立你的选择要和每个配置文件,可以定义数据库的用户名密码等变量的轮廓..

yourapp.db.username=UserDev 
yourapp.db.password=password 

,并在您database.conf引用属性由其变量名称

username=${yourapp.db.username} 
password=${yourapp.db.password} 

现在,当您构建应用程序时,请选择适合您部署的配置文件。这样conf就会在编译时使用正确的用户名和密码填充,从而让你只有一个database.conf文件。