Если я запустил эту команду:
$ git status
Я получил:
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 и т. д.?





Это не JSON, а git status имеет опцию --porcelain:
Give the output in an easy-to-parse format for scripts. This is similar to the short output, but will remain stable across Git versions and regardless of user configuration.
См. фарфоровый формат v1 и v2:
Version 2 format adds more detailed information about the state of the worktree and changed items. Version 2 also defines an extensible set of easy to parse optional headers.
Header lines start with "#" and are added in response to specific command line arguments. Parsers should ignore headers they don’t recognize.
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 и выводит хорошо отформатированные строки для вашей оболочки.
Будущий вывод JSON может быть реализован позже: public-inbox.org/git/[email protected]/T
Все инструменты unix выиграют от --json. Без --json - для людей, с --json - для машин.
@AlexanderMills, моя точка зрения была такой: git status --porcelain - это уже для машины, а не для потребления человеком. Но да, это еще не JSON.
Что ж, должен быть универсальный интерфейс для инструментов командной строки, потоковой передачи текста и т. д. Мне не нужно было гадать, как анализировать вывод. Я просто смогу проанализировать JSON с разделителями новой строки, если я использую переключатель --json.
@AlexanderMills Я согласен, поэтому я упоминаю в комментариях public-inbox.org/git/[email protected]/T: может появиться опция --porcelain=v3 с выводом JSON. Но пока вам придется проанализировать существующий вывод и самостоятельно сгенерировать JSON.
Да, это хорошо, я определенно +1 за то, что сделал JSON своего рода стандартом командной строки. Если бы использовался JSON, каждый инструмент командной строки мог бы иметь информацию тип для stdout / stderr, это было бы очень круто.
Да, еще раз мир Unix должен смотреть в окна, где у нас есть что-то подобное уже десять лет. Но парни из unix слишком высокомерны, чтобы признать свои неудачи (глядя на то, как они все еще борются с systemd)
Например,
git logимеет опциюgit log --oneline, но AFAICT,git statusне имеет аналога этому.