Ross MacArthur <ross@xxxxxxxxxxxx> 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 \"\$@\"' -"