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

标签 json git sed

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

相关文章:

json - 从 stats.nba.com 发布抓取数据

java - 如何使用 jquery 将 json 数组发送到 java servlet

json - 快速解析来自google maps api的json数据

git - 如何获得 `git diff origin/master` 的相反方向

linux - 使用 SED 将传感器命令输出转换为可记录的条目

sed - 单行删除特定字符出现次数超过 x 次的行

c# - 使用 System.Text.Json 使用动态键查询或反序列化 json

Git 提交消息漂亮格式 : Is there a way to format multi-line body

bash - {1} 在 |master {1} 中是什么意思 ✓|与 bashit?

sed - 如何用 sed 中的一行替换两个模式之间的行?