git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [BUG] gpg.program: '~' not expanded to home directory

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 12, 2025, 00:05 UTC
Message-ID
<xmqq8qkuxoh3.fsf@gitster.g>
In-Reply-To
<CAF1X4d7N1xdZt9JkVZytbEU1=7q3X_F_nqm4EG82B8-cVa7g8Q@mail.gmail.com>
Ross MacArthur <ross@macarthur.io> writes:
> `gpg.program` treats a leading ‘~’ literally, unlike other path
> options such as `core.excludesfile`.

I think that is correct; I do not think gpg.program is to give a path to the program, so comparison with core.excludesfile is probably not so appropriate.

It gives a command line, e.g. "mysign --compat=gnupg", where the program "mysign" somewhere on your path can be told to behave in a way compatible to GPG when a command line option "--compat=gnupg" is given. We further append our own command line options when we invoke this command, like the "git config --help" on this variable says. When we want to verify GPG signature $signature in a file $file, for example, instead of running gpg, we would run:

	mysign --compat=gnupg --verify $signature - <$file
> Expected: Git should expand ‘~’ to $HOME.
So this expectation does not quite hold true.

I wonder if letting your shell to handle the tilde expansion would make it work, though. Continuing with the example, it may look something like this, perhaps?

 $ git config set gpg.program "sh -c '~/mysign --compat=gnupg \"\$@\"' -"
Previous: Junio C HamanoNext: Andreas Schwab
Message 13 of 15 in “[BUG] gpg.program: '~' not expanded to home directory”
  1. Ross MacArthurJul 11, 2025
  2. gpg-interface: expand gpg.program as a pathJonas Brandstötter, Jul 11, 2025
  3. Junio C HamanoJul 14, 2025
  4. 0/2 gpg-interface: expand gpg.program as a pathJonas Brandstötter, Jul 22, 2025
  5. Junio C HamanoJul 22, 2025
  6. 1/2 gpg-interface: expand gpg.program as a pathJonas Brandstötter, Jul 22, 2025
  7. 2/2 t7510: add test cases for non-absolute gpg programJonas Brandstötter, Jul 22, 2025
  8. Jeff KingJul 25, 2025
  9. Jeff KingJul 25, 2025
  10. Junio C HamanoJul 29, 2025
  11. Jeff KingJul 29, 2025
  12. Junio C HamanoJul 29, 2025
  13. Junio C HamanoJul 12, 2025
  14. Andreas SchwabJul 12, 2025
  15. Junio C HamanoJul 12, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.