我有以下的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