如何解决有没有办法在 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 来做:
如果你的 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 举报,一经查实,本站将立刻删除。