[英]Branch-specific configuration file maintenance with git
這是一個讓我困惑了很長時間的問題,因為我找不到好的和或多或少通用的解決方案。
假設有兩個 git 分支可用, production
和dev
; 每個任務都使用自己的可配置參數來完成某些任務(即憑據、構建路徑、測試/部署腳本切換等)。 同時實現腳本和代碼對於兩個分支都是通用的。
現在,問題出現了 - 如何以所需的方式在 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 忽略的其他來源調整每個分支配置本身,但它從一開始就很臭。
關於所描述的問題的解決方案有什么建議嗎?
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.