Благодаря ссылке в Ответ Ксавье Я узнал, что могу переопределить программу gpg с помощью конфигурации gpg.program:
git config --global gpg.program /path/to/something
Так что я могу использовать это для написания оболочкивокруг keybase.
Но git, как оказалось, довольно привередлив в том, что это за something
. Git ожидает частичного разбора вывода, полученного в результате флага --fd-status
, который заставляет gpg
выводить специальные коды состояния в альтернативном дескрипторе файла.
К счастьюПо крайней мере, для моего первого прохода, git не анализирует все , которое производит gpg, поэтому я смог его эмулировать. Вот суть с функциональной оболочкой , и вот суть этого:
# Copy the commit message from stdin to a file.
d=$(mktmp -d "${TMPDIR:-/tmp}/gitsig.XXXXXXXXX")
cat > "$d/commit.msg"
# Have Keybase write the signature to another file.
keybase pgp sign --detached \
--key "$1" \
--infile "$d/commit.msg" \
--outfile "$d/commit.sig"
# Have gpg verify the signature right away.
# Capture its status in a file.
gpg --verify --status-fd=2 \
"$d/commit.sig" "$d/commit.msg" \
> /dev/null 2> "$d/gpgstatus.txt"
# Copy the KEY_CONSIDERED lines to stderr. Git wants that.
grep '^\[GNUPG:\] KEY_CONSIDERED' "$d/gpgstatus.txt" >&2
# Produce a minimal SIG_CREATED line to stderr. Git also wants that.
printf '[GNUPG:] SIG_CREATED ' >&2