Alex Rivera | Logout

Turning off the pager in Git for the stash command only

Asked 2010-11-19T13:17:11.300
32

I generally like the use of the pager in Git, but for git stash the pager annoys me. When calling git stash list, I don't want to be shown the three lines of output in the pager. It forces me to press Q just to make the output unavailable again when typing the follow-up git stash pop command.

One solution would be to use

git --no-pager stash list

but that's to much typing (I'm lazy). Following the man page of git config, I tried

git config --global pager.stash false

but this doesn't seem to do what the documentation says (actually, I didn't notice any effect). Then I tried

git config --global alias.stash "--no-pager stash"

But again without any noticeable effect.

The configuration gets properly updated, for example

git config pager.stash
false

It just does not have any effect. What am I missing? And how can I achieve that git stash does not use the pager?

Edit
Report

1 Answer

11

It looks like stash, and any other non-builtin command (written as a shell script, rather than in C) misses out on the pager configuration step. I sent a note to the Git mailing list asking about this; it looks like it's a known issue, but not totally trivial to fix.

The primary reason you're not seeing any effect from your alias is that Git silently ignores aliases for built-in commands; the idea is that you never want to actually make a command inaccessible. For the alias to have a chance of being run, you need to name it something other than stash.

However, I believe that simple aliases are not permitted to affect the environment a Git command is run in, which generally includes the options passed to git itself. If I use an alias like yours:

git config alias.foo --no-pager stash
git foo
fatal: alias 'foo' changes environment variables

If you want to do that properly, you'd have to use !git --no-pager stash, so that it'll spawn a subshell and reinvoke Git.

Another temporary fix, since it's a shell script, would be to go edit libexec/git-core/git-stash directly. Just go find the list_stash function, and add the --no-pager option to its call to git log, or to cover the whole script, set GIT_PAGER=cat at the top.

answered 2010-11-19T14:57:04.947

Your Answer