2014-08-29 70 views
4

在一個git倉庫中,我有兩個文件:config/conf.yaml.sample(通過git跟蹤,但在我的程序啓動時忽略)和它的副本config/conf.yaml(它是被git忽略,但是當我的程序啓動時讀取它)。爲每個分支保留一個不同的配置文件(未跟蹤)

當我從分支A切換到分支B時,我總是擁有相同的配置文件(因爲config/conf.yaml未被跟蹤),這意味着,例如,每個分支涉及相同的數據庫,相同的端口等等。

我想爲每個分支保留一個不同的config/conf.yaml,以便它在切換分支時發生變化,但我不想讓git跟蹤它(例如因爲它包含訪問數據庫的名稱和密碼)。

我該怎麼辦?

+2

那麼,如何跟蹤此文件屬於哪個分支,而無需跟蹤?如果文件未被跟蹤,則在更改分支時它不會更改。 – pjmorse 2014-08-29 15:09:24

+0

*我想爲每個分支保留一個不同的'config/conf.yaml' *你的意思是不同的文件,比如說'config/conf1.yaml'和'config/conf2.yaml',或者多個相同文件的版本? – Jubobs 2014-08-29 15:28:52

+0

@Jubobs同一個文件的多個版本(例如,一個使用databasename:「test1」,另一個使用databasename:「test2」)。 – wil93 2014-08-29 15:29:51

回答

3

看來,Git的post-checkout hook是對你的衚衕:當git checkout具有被更新worktree後運行

這個鉤子被調用。鉤子有三個參數:前面的HEAD的ref,新的HEAD(它可能會也可能沒有變化)的ref,以及一個標誌,指示結帳是否是分支結賬(改變分支,標誌= 1)或一個文件簽出(從索引中檢索一個文件,flag = 0)。這個掛鉤不會影響git checkout的結果。

它也在git clone之後運行,除非使用--no-checkout-n)選項。鉤子的第一個參數是空引用,第二個是新的HEAD的引用,並且該標誌始終爲1.

該鉤子可用於執行存儲庫有效性檢查,自動顯示與先前HEAD如果不同,或者設置工作目錄元數據屬性。

以下腳本(必須作出可執行)應該讓你開始;修改它以適應您的需要並將其保存爲.git/hooks/post-checkout

#!/bin/sh 
# 
# An example post-checkout hook script to perform an action conditionally on 
# the branch (if any) just checked out. 
# 
# Test whether a branch was just checked out 
if [ "$3" -eq 1 ]; then 
    # Save the value of HEAD (do not issue an error if HEAD is detached) 
    symrefHEAD=`git symbolic-ref --quiet HEAD` 
    if [ "$symrefHEAD" = "refs/heads/master" ]; then 
     # Do something useful for master, e.g. 
     # cp config/conf_master.yaml config/conf.yaml 
     printf " --- test: You just checked out master. ---\n" 
    elif [ "$symrefHEAD" = "refs/heads/develop" ] ; then 
     # Do something useful for develop, e.g. 
     # cp config/conf_develop.yaml config/conf.yaml 
     printf "--- test: You just checked out develop. ---\n" 
    else 
     # default case 
     printf "You just checked out some other branch.\n" 
    fi 
else 
    printf "No branch was checked out\n" 
fi 
相關問題