我有以下json文件:
{
"UseSqlite": false,
"UsersAvatarsFolder": "uploads",
"UserDefaultPhoto": "no_image.jpg"
}
现在我想告诉git忽略"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 :(得分: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"
}
然后git可以忽略config/local.json
。
这对测试和用户都很有用。现在,当他们更新时,他们不会丢失对配置的更改。 config/default.json
会更新,他们会获得任何新的或更改的默认值,同时在config/local.json
中保留自己的自定义。