Попытка выполнить команду git в дочернем процессе, для которого требуются каналы - PullRequest
0 голосов
/ 24 января 2019

Мне нужно выполнить команду git branch в дочернем процессе, но я хочу получить только текущую извлеченную ветку.Эта команда работает в терминале:

git branch | grep \* | cut -d ' ' -f2

У меня есть несколько постов, которые пытаются сделать что-то подобное, но мое понимание команд Unix не достаточно хорошо, чтобы найти решение.

Я пробовал это среди ряда других вещей:

spawn("git", ["branch | grep \* | cut -d ' ' -f2"], opts)

это то, что я.получить от stderr:

git: 'branch |grep * |cut -d '' -f2 'не является командой git.Смотрите 'git --help'.

1 Ответ

0 голосов
/ 24 января 2019

Команды оболочки имеют большой синтаксис: a | b | c не означает «выполнить команду a | b | c», а скорее «выполнить команду a, с кучей клея, который делает ее конвейерным выводом; выполните команду b, с кучей клея, который заставляет его читать ранее переданный по конвейеру вывод в качестве входных данных, и направляет его вывод, и запускает команду c, с кучей клея, который заставляет его читать b переданный по конвейеру вывод ».

Вы можете продублировать весь этот клей в своем коде, но git branch | grep \* | cut -d ' ' -f2 это неправильный способ сделать это в первую очередь. Вместо этого используйте одну из этих двух команд:

git symbolic-ref --short HEAD
git rev-parse --abbrev-ref HEAD

Разница между этими двумя командами заключается в том, что первая завершается с ошибкой (с сообщением об ошибке) , если нет текущей ветви . Второй печатает HEAD для этого случая. Этот случай происходит, когда HEAD «отсоединен», то есть репозиторий не имеет текущей ветви .

Последовательность git branch | grep \* | cut ... завершается успешно, но печатает (HEAD для этого случая с отделенной ГОЛОВКОЙ, а (HEAD бесполезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...