簡體   English   中英

使用 git 維護分支特定的配置文件

[英]Branch-specific configuration file maintenance with git

這是一個讓我困惑了很長時間的問題,因為我找不到好的和或多或少通用的解決方案。

假設有兩個 git 分支可用, productiondev 每個任務都使用自己的可配置參數來完成某些任務(即憑據、構建路徑、測試/部署腳本切換等)。 同時實現腳本和代碼對於兩個分支都是通用的。

現在,問題出現了 - 如何以所需的方式在 git 存儲庫中維護特定於分支的配置。 一種常見的解決方案是在 git 中使用“模板”配置文件,符號鏈接並忽略特定分支的具體內容,例如

$ cat .gitignore | grep conf
/concrete.conf
$ ls -l *.conf
lrwxrwxrwx 1 1000 100 12 Oct 29 10:23 concrete.conf -> generic.conf
-rw-r--r-- 1 1000 100  0 Oct 29 10:16 generic.conf

接下來在開發框中打破和調整concrete.conf 然而,這不是我追求的解決方案。

我的要求(好的,希望)是:

  • 支持每個 git 分支的單獨配置文件,以及
  • 同時保持由 git 管理的特定於分支的配置文件

甚至可能嗎? 可能是(實際上,更喜歡由其他人提供文件,但它不相關......)

到目前為止,我想到的最好的方法是使用合並后掛鈎從 git 忽略的其他來源調整每個分支配置本身,但它從一開始就很臭。

關於所描述的問題的解決方案有什么建議嗎?

PS:*nix 特定的建議(即使用符號鏈接/硬鏈接)建議絕對沒問題,我確實對 M$ 目標感興趣

這是可能的,並且不涉及符號鏈接。

沒有版本my.config ,而是一個模板文件my.config.tpl和一個值文件(每個分支都有值)

 prod.conf
 dev.conf

然后,您可以使用內容過濾器驅動程序,使用.gitattributes聲明

弄臟 (圖片來自“ 自定義 Git - Git 屬性”,來自“ Pro Git 書”)

每次簽出分支時,該腳本通過將占位符值替換為<branch.conf>文件的值來生成my.config文件。
您可以通過以下方式了解當前分支名稱:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)

生成的實際my.config仍然被忽略(由.gitignore )。
這意味着您的實際工作樹不會“變臟”。

塗抹腳本選擇正確的值文件並根據在git checkout期間應用塗抹腳本的模板生成正確的web.config

請參閱“ git 塗抹/清潔分支之間的過濾器”中的完整示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM