2012-04-02 39 views
2

我們正在開發產品,我們使用Git作爲SCM。該產品的每個小版本都位於其單獨的分支中。作爲一名開發人員,我有自己的一套數據庫,每個小版本都有一套數據庫。我也有一個專用的配置文件,它被Git忽略,它指定要使用哪個數據庫。但是,因爲它被Git忽略,所以無論我現在在哪個分支上都保持不變。這是不好的,因爲如果配置文件說要使用數據庫db_1_2(它用於分支1.2),切換到分支1.3將使配置文件仍然指向數據庫db_1_2。我可以在不同的git分支中使用不同的私人配置文件嗎?

我目前有一段代碼可以讀取並解析分支標識符,以設置正確的數據庫,但它很容易出錯,因爲Git標識符有很多種類,其中大部分都很難/不可能從中解析正確的分支名稱。

我可以問產品本身,但並非所有的舊版本都有一個靜態的getVersion()方法。

所以我的問題是這樣的:有沒有什麼好的,乾淨的方式來讓私人配置文件屬於某個分支,但是當推送到遠程/中央回購站時,不會讓它成爲最終產品?

+0

問得好副作用。我的做法是解析'git branch'的輸出,但這可能就是你現在正在做的。 – bitmask 2012-04-02 20:26:04

+0

是的,那就是我現在正在做的。當「git name-rev -name-only HEAD」產生類似「1.2」的東西時效果很好,但是當檢查某個提交或者等分時,這一切都會消失。 – 2012-04-02 20:48:33

+0

你有沒有考慮過使用子模塊? – Nic 2012-04-02 20:57:06

回答

0

你如何創建一系列以你的git分支命名的配置文件?然後,你可以做這樣的事情,當你偶然分支:

ln -s configs/$(git symbolic-ref HEAD|cut -f3 -d/) myconfig.conf 

或者,而不是運行:

git co -b branchname 

做一個switchbranch腳本確實是這樣的:

git co -b $1 
ln -s configs/$1 myconfig.conf 

而這一切都變成自動的。如果您切換到沒有現有配置的分支,您甚至可以看中並創建模板配置文件。

+0

看起來有趣,但它會處理平分,例如? – 2012-04-02 20:45:15

+0

可能不是......或者更確切地說,並非沒有幫助。如果你使用'git bisect run ...'來處理事情,那麼你可能是腳本中必要的邏輯。我不熟悉'git bisect'如何在多個分支的環境中運行,所以我只是在這裏猜測。 – larsks 2012-04-02 20:50:56

2

當數據庫與分支如此整合相關時,爲什麼數據庫版本在被忽略的配置文件中?您正在尋求一種方法來確定分支中的數據庫,但分支的整個工作是提供特定於分支的代碼狀態並與分支中的其他所有內容保持一致。將數據庫標識符從配置文件移出到不被忽略的地方。

+0

這已經完成,但不在舊版本的產品中。所以,當我需要檢查一個較舊的版本以查看客戶所做的所有事情時,代碼庫並沒有提供任何有關它的版本的提示。 – 2012-04-02 21:12:37

+0

如果它是舊的代碼,並且你的代碼庫不清楚什麼是什麼,那麼你需要解決這個問題!也許從標記東西開始,以便您擁有一致的配置 - 無論是git託管的源代碼或數據庫還是其他任何東西。 – GoZoner 2012-04-03 03:28:37

-1

您可以改變(自動)配置,反映分支更改,如果它將版本化爲模板,並且使用this my post的想法,您可以將關鍵字添加到模板的分支依賴部分,並用於處理這些部分關鍵字。分公司對任何變更可能

git branch | grep "*"

git status | grep 'On branch'

git symbolic-ref -q HEAD(?)

git branch | sed --quiet 's/* \(.*\)/\1/p'

無法看到如何避免推

相關問題