gpt4 book ai didi

json - 使用 git 过滤器忽略 json 文件中的特定行

转载 作者:行者123 更新时间:2023-12-04 17:53:24 26 4
gpt4 key购买 nike

我有以下 json 文件:

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

现在我想告诉 git 忽略 "UseSqlite": false, 行所以我跟着 this solution使用 .gitattributesfile:

忽略这一行
*.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 并且在 pull "UseSqlite"时false。但是这些过滤器不是那样工作的,知道吗?

最佳答案

我猜你得到的是一个配置文件,你想在其中确保 checkout 中的本地修改不会被意外 checkin 。在这种情况下,我敢打赌你正在使用SQLite 用于测试。有更简单的方法可以做到这一点,这也使系统更加灵活。

最简单的做法是拥有两个配置文件:一个用于生产,一个用于测试。系统默认为生产版,但您的测试工具选择了测试版。

但这引入了重复,所以你真正想要的是将几个配置文件 merge 在一起。你有一个充满默认值的配置文件,通常不会被触及,然后你有一个本地配置文件。该系统将两者 merge 在一起。例如……

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 中保留他们自己的自定义。

关于json - 使用 git 过滤器忽略 json 文件中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42471051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com