微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在 git 日志中搜索多个提交中对特定 json 属性的更改?

如何解决有没有办法在 git 日志中搜索多个提交中对特定 json 属性的更改?

我正在处理 JSON 文件,我需要在我所做的提交中找到对某些属性的更改。

例如,对于这个假文件,我想查看对 attr1、2、3 和 4 所做的更改,而不是 5(或任何其他未列出的)。

文件 1 提交 A

>>> a = Foo("some A",3,4)
>>> b = Foo("some other B",2,99)
>>> test = (a,b)
>>> test
(Foo(some A),Foo(some other B))
>>> sorted(test)
[Foo(some other B),Foo(some A)]

文件 1 提交 B

{
    "group": {
        "attr1": "apples","attr2": "oranges"
    },"attr3": "","attr4": "grapes","attr5": "kiwi",}

想要每个文件输出

{  
    "attr3": "bananas","attr4": "","attr5": "strawBerry","attr-new": "watermelon","group": {
        "attr1": "pineapples","attr2": "oranges"
    }
}

我看到 git log has an -L option 用于按行搜索,但正如您所看到的,两次提交之间的行号不一致。我也知道 git log 作为一个正则表达式选项使用,但我对正则表达式不够熟悉,不知道它是否可以在这里工作。

我需要为 git 日志中列出的每个文件执行此操作。我该怎么做?

解决方法

因为你所有的属性都有唯一的名字,你大概可以这样

git log -S attr1 --source --all

它会给你添加或删除一行的所有提交,其中包括更改值。


我实际上是从这里得到命令的:

https://stackoverflow.com/a/5816177

因为我通常像这样用 gitk 来做:

enter image description here


如果你的 json 看起来像这样,那就有点难了:

{
    "group": {
        "attr1": "apples","attr2": "oranges"
    },"group2": {
       "attr1": "","attr2": "grapes","attr3": "kiwi"
    }
}
,

鉴于您想要一个结构性差异(而不是简单的文本差异),我鼓励您找到或编写合适的工具。 Git 只是读取并通过差异引擎运行它们 - 解决string-to-string correction problem的代码。

有些语言带有工具集,可让您解决结构化数据上的这个问题,而不仅仅是在线上。例如,Python 有 difflib(仍然是“字符串”和“线”面向部分,但您可以定义“字符串”或“线”或“字符”是什么,并且控制输入符号是关键)。 Python 也有 JSON 读取器。读取JSON,将其转换为(也许是排序的)属性,并使用差异引擎进行比较(排序的属性键可以让您方便地使用面向字符串的代码)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。