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

Ale*_*lls 5 git git-status

如果我运行这个命令:

$ git status
Run Code Online (Sandbox Code Playgroud)

我得到:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

这很难解析。

但真正好的是 --json 输出,在另一个世界中,我很想看到:

 $ git status --json
Run Code Online (Sandbox Code Playgroud)

得到这个:

   {
    "currentBranch": "master",
    "remoteTrackingBranch": "origin/master",
    "isUpToDateWithRemote": true,
    "workingDirectoryClean": true
   }
Run Code Online (Sandbox Code Playgroud)

NPM 生态系统中是否有一些工具可以将 Git 输出解析为 JSON?解析来自git status等的输出的最佳方法是什么?

Von*_*onC 7

这不是 JSON,但git status有一个--porcelain选项

\n
\n

以易于解析的脚本格式提供输出。这与短输出类似,但无论用户配置如何,跨 Git 版本都将保持稳定。

\n
\n

参见瓷器规格 v1 和 v2

\n
\n

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

\n

标题行以“#”开头,是为了响应特定的命令行参数而添加的。解析器应该忽略它们无法识别的标头。

\n
\n
vonc@voncvb C:\\test\n> git status --porcelain=v2 --branch\n# branch.oid a4a9ae9616e5f1da136a3ff717e722d055ca9aa7\n# branch.head master\n# branch.upstream origin/master\n1 .M N... 100644 100644 100644 67f7a2a439ffb9dd18dd65bb6fd296f8c16c55b3 67f7a2a439ffb9dd18dd65bb6fd296f8c16c55b3 test/file1.txt\n1 .M N... 100644 100644 100644 d59cac0c8acf674ba3316944451dcbec3e6ec3d7 d59cac0c8acf674ba3316944451dcbec3e6ec3d7 test/file2.txt\n
Run Code Online (Sandbox Code Playgroud)\n

参见示例robertgzr/porcelain,它解析git status --porcelain=v2 --branch为您的 shell 解析并输出格式良好的字符串。

\n

  • 所有 UNIX 工具都将受益于 `--json`。没有“--json”,它适用于人类,带有“--json”,它适用于机器。 (3认同)