Получить JSON из команд git, например git status

Если я запустил эту команду:

$ 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 и т. д.?

Например, git log имеет опцию git log --oneline, но AFAICT, git status не имеет аналога этому.

Alexander Mills 08.07.2018 06:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
2 355
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не 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

VonC 08.07.2018 06:58

Все инструменты unix выиграют от --json. Без --json - для людей, с --json - для машин.

Alexander Mills 08.07.2018 06:59

@AlexanderMills, моя точка зрения была такой: git status --porcelain - это уже для машины, а не для потребления человеком. Но да, это еще не JSON.

VonC 08.07.2018 07:00

Что ж, должен быть универсальный интерфейс для инструментов командной строки, потоковой передачи текста и т. д. Мне не нужно было гадать, как анализировать вывод. Я просто смогу проанализировать JSON с разделителями новой строки, если я использую переключатель --json.

Alexander Mills 08.07.2018 07:18

@AlexanderMills Я согласен, поэтому я упоминаю в комментариях public-inbox.org/git/[email protected]/T: может появиться опция --porcelain=v3 с выводом JSON. Но пока вам придется проанализировать существующий вывод и самостоятельно сгенерировать JSON.

VonC 08.07.2018 07:19

Да, это хорошо, я определенно +1 за то, что сделал JSON своего рода стандартом командной строки. Если бы использовался JSON, каждый инструмент командной строки мог бы иметь информацию тип для stdout / stderr, это было бы очень круто.

Alexander Mills 08.07.2018 07:21

Да, еще раз мир Unix должен смотреть в окна, где у нас есть что-то подобное уже десять лет. Но парни из unix слишком высокомерны, чтобы признать свои неудачи (глядя на то, как они все еще борются с systemd)

Lothar 11.04.2021 00:30

Другие вопросы по теме