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