2017-02-26 124 views
0

我有以下的JSON文件:使用Git過濾器忽略JSON文件中的特定行

{ 
    "UseSqlite": false, 
    "UsersAvatarsFolder": "uploads", 
    "UserDefaultPhoto": "no_image.jpg" 
} 

現在我想告訴混帳忽略"UseSqlite": false,行所以我也跟着this solution忽略使用.gitattributes文件這個特定的行:

*.json filter=ignoreSqlite 

然後定義在此gitconfig濾波器:

git config --global filter.ignoreSqlite.clean 'sed "s/"UseSqlite": .*/"UseSqlite": true/"' 
git config --global filter.ignoreSqlite.smudge cat 

但似乎,這是行不通的:

'sed: -c: line 0: unexpected EOF while looking for matching `'' 
'sed: -c: line 1: syntax error: unexpected end of file 
error: external filter 'sed failed 1 
error: external filter 'sed failed 
On branch master 

我不知道sed語法。你可以看看它,讓我知道它的正確語法是什麼?

更新

我終於固定的語法:

git config --global filter.ignoreSqlite.smudge "sed 's/"UseSqlite": .*/"UseSqlite": true,/'" 
git config --global filter.ignoreSqlite.clean "sed 's/"UseSqlite": .*/"UseSqlite": false,/'" 

但它也不起作用,我想,當我推了修改,將"UseSqlite"true,當我拉"UseSqlite"false。但是這些過濾器不能像那樣工作,任何想法?

+0

獲得'sed'和shell語法正確是棘手的,因爲每一步--Git自己讀取你的配置,運行過濾器的shell,sed自己解釋一個命令 - 添加自己的一層引用,空白,反斜槓和/或其他元字符動作。但是正如Schwern所指出的那樣,將它分解爲「默認和版本控制」和「本地化」,但着重於*不作爲軟件的一部分「配置文件版本」是這裏的一種方式。 (請注意,如果您願意,* local * config可以是到本地配置存儲庫工作樹的符號鏈接。) – torek

回答

1

我會猜測你得到的是一個配置文件,你要確保在結賬時的本地修改不會被意外檢入。在這種情況下,我打賭你是使用SQLite進行測試。有更簡單的方法可以使系統更靈活。

最簡單的事情是有兩個配置文件:一個用於生產,另一個用於測試。系統默認爲生產系統,但您的測試工具選擇測試工具。

但是,這引入了重複,所以你真正想要的是將幾個配置文件合併在一起。你有一個配置文件充滿了通常沒有被觸及的默認值,那麼你有一個本地配置文件。系統將兩者合併在一起。例如...

config/default.json 
    { 
     "UseSqlite": false, 
     "UsersAvatarsFolder": "uploads", 
     "UserDefaultPhoto": "no_image.jpg" 
    } 

config/local.json 
    { 
     "UseSqlite": true 
    } 

系統會將兩者所得的配置是:

{ 
     "UseSqlite": true, 
     "UsersAvatarsFolder": "uploads", 
     "UserDefaultPhoto": "no_image.jpg" 
    } 

然後config/local.json可以通過GIT中被忽略。

這對測試和用戶都很有用。現在,當他們更新時,他們不會失去對配置的更改。 config/default.json得到更新,他們將得到任何新的或更改的默認值,同時保留config/local.json自己的自定義設置。

+0

謝謝,是的,這正是我要實現的,但我想知道爲什麼配置文件不通過過濾器(請參閱更新的問題)? –

+0

@SirwanAfifi你的雙引號內還有非雙引號。 – Schwern

+0

你說得對,我應該用\「來逃避它,像這樣: '」sed's/\「」UseSqlite \「」:。*/\「」UseSqlite \「」:true,/'「 ' –