2010-10-22 41 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文件。