Jeff King <[email protected]> writes:
> When we complete branch names for "git checkout", we also
> complete remote branch names that could trigger the DWIM
> behavior. Depending on your workflow and project, this can
> be either convenient or annoying.
> ...
> This is flexible enough for me, but it's possible somebody would want
> this on a per-repo basis. I don't know that we want to read from `git
> config`, though, because it's relatively expensive to do so. People who
> want per-repo settings are probably better off with a hook that triggers
> when they "cd" around, and sets up their preferences.
Sounds OK. I am kind of surprised that --no-guess is the only way
to turn off this dwimming (not in the completion side, but there
does not seem to be a way to tell "git checkout" that you do not
need that create-missing-branch-out-of-remote-tracking).
> contrib/completion/git-completion.bash | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/contrib/completion/git-completion.bash
> b/contrib/completion/git-completion.bash
> index 1150164d5..f53b18fae 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -28,6 +28,14 @@
> # completion style. For example '!f() { : git commit ; ... }; f' will
> # tell the completion to use commit completion. This also works with aliases
> # of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
> +#
> +# You can set the following environment variables to influence the behavior
> of
> +# the completion routines:
> +#
> +# GIT_COMPLETION_CHECKOUT_NO_GUESS
> +#
> +# When non-empty, do not include "DWIM" suggestions in git-checkout
> +# completion (e.g., completing "foo" when "origin/foo" exists).
>
> case "$COMP_WORDBREAKS" in
> *:*) : great ;;
> @@ -1248,7 +1256,8 @@ _git_checkout ()
> # check if --track, --no-track, or --no-guess was specified
> # if so, disable DWIM mode
> local flags="--track --no-track --no-guess" track_opt="--track"
> - if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
> + if [ -n "$GIT_COMPLETION_CHECKOUT_NO_GUESS" -o \
> + -n "$(__git_find_on_cmdline "$flags")" ]; then
> track_opt=''
> fi
> __git_complete_refs $track_opt