从git命令获取JSON,例如git status

9
如果我运行这个命令:
$ git status

I get:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

这很难解析。

但是更好的是,如果有--json输出,在另一个世界里,我很想看到:

 $ git status --json

而且还有这个:

   {
    "currentBranch": "master",
    "remoteTrackingBranch": "origin/master",
    "isUpToDateWithRemote": true,
    "workingDirectoryClean": true
   }

在NPM生态系统中是否有一些工具可以将Git输出解析成JSON格式?最佳方式是如何解析git status等命令的输出?


例如,git log 有一个选项 git log --oneline,但据我所知,git status 没有类似的选项。 - Alexander Mills
1个回答

6
这不是JSON格式,但是 git status 有一个 --porcelain 选项:

以易于解析的脚本格式输出。这类似于短格式输出,但将在 Git 版本和用户配置不同的情况下保持稳定。

请参阅 瓷器格式v1和v2

版本2格式提供了有关工作树和更改项目状态的更详细信息。版本2还定义了一组易于解析的可选标头。

标题行以“#”开头,并响应特定命令行参数添加。解析器应忽略它们不认识的标头。

vonc@voncvb C:\test
> git status --porcelain=v2 --branch
# branch.oid a4a9ae9616e5f1da136a3ff717e722d055ca9aa7
# branch.head master
# branch.upstream origin/master
1 .M N... 100644 100644 100644 67f7a2a439ffb9dd18dd65bb6fd296f8c16c55b3 67f7a2a439ffb9dd18dd65bb6fd296f8c16c55b3 test/file1.txt
1 .M N... 100644 100644 100644 d59cac0c8acf674ba3316944451dcbec3e6ec3d7 d59cac0c8acf674ba3316944451dcbec3e6ec3d7 test/file2.txt

robertgzr/porcelain为例,它解析git status --porcelain=v2 --branch并输出漂亮格式的字符串供您的shell使用。


3
所有的Unix工具都将受益于“--json”。没有“--json”,是为人类设计的;有了“--json”,就是为机器设计的。 - Alexander Mills
1
@AlexanderMills 我的观点是:git status --porcelain 已经是为机器而非人类消费而设计的。但是,没错,它还不是 JSON 格式。 - VonC
应该有一个通用的接口,用于命令行工具、文本流等。我不应该猜测如何解析输出。如果我使用 --json 开关,我应该只需要解析换行分隔的 JSON。 - Alexander Mills
1
@AlexanderMills 我同意,这就是为什么我在评论中提到了 https://public-inbox.org/git/57969607.9080206@gmail.com/T/:可能会出现一个带有JSON输出的 --porcelain=v3 选项。但目前,您需要解析现有的输出,并自己生成JSON。 - VonC
1
是的,Unix世界应该再次看向Windows,因为我们已经有了这样的东西十年了。但是Unix的人太傲慢了,不愿承认他们的失败(看看他们仍然如何反对systemd)。 - Lothar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接