3 # bash/zsh completion support for core Git.
5 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
6 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
7 # Distributed under the GNU General Public License, version 2.0.
9 # The contained completion routines provide support for completing:
11 # *) local and remote branch names
12 # *) local and remote tag names
13 # *) .git/remotes file names
14 # *) git 'subcommands'
15 # *) tree paths within 'ref:path/to/file' expressions
16 # *) common --long-options
18 # To use these routines:
20 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
21 # 2) Add the following line to your .bashrc/.zshrc:
22 # source ~/.git-completion.sh
24 # 3) Consider changing your PS1 to also show the current branch:
25 # Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
26 # ZSH: PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
28 # The argument to __git_ps1 will be displayed only if you
29 # are currently in a git repository. The %s token will be
30 # the name of the current branch.
32 # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty
33 # value, unstaged (*) and staged (+) changes will be shown next
34 # to the branch name. You can configure this per-repository
35 # with the bash.showDirtyState variable, which defaults to true
36 # once GIT_PS1_SHOWDIRTYSTATE is enabled.
38 # You can also see if currently something is stashed, by setting
39 # GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
40 # then a '$' will be shown next to the branch name.
42 # If you would like to see if there're untracked files, then you can
43 # set GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're
44 # untracked files, then a '%' will be shown next to the branch name.
46 # If you would like to see the difference between HEAD and its
47 # upstream, set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates
48 # you are behind, ">" indicates you are ahead, and "<>"
49 # indicates you have diverged. You can further control
50 # behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated
52 # verbose show number of commits ahead/behind (+/-) upstream
53 # legacy don't use the '--count' option available in recent
54 # versions of git-rev-list
55 # git always compare HEAD to @{upstream}
56 # svn always compare HEAD to your SVN upstream
57 # By default, __git_ps1 will compare HEAD to your SVN upstream
58 # if it can find one, or @{upstream} otherwise. Once you have
59 # set GIT_PS1_SHOWUPSTREAM, you can override it on a
60 # per-repository basis by setting the bash.showUpstream config
64 if [[ -n ${ZSH_VERSION-} ]]; then
65 autoload
-U +X bashcompinit
&& bashcompinit
68 case "$COMP_WORDBREAKS" in
70 *) COMP_WORDBREAKS
="$COMP_WORDBREAKS:"
73 # __gitdir accepts 0 or 1 arguments (i.e., location)
74 # returns location of .git repo
77 if [ -z "${1-}" ]; then
78 if [ -n "${__git_dir-}" ]; then
80 elif [ -d .git
]; then
83 git rev-parse
--git-dir 2>/dev
/null
85 elif [ -d "$1/.git" ]; then
92 # stores the divergence from upstream in $p
93 # used by GIT_PS1_SHOWUPSTREAM
94 __git_ps1_show_upstream
()
97 local svn_remote svn_url_pattern count n
98 local upstream
=git legacy
="" verbose
=""
101 # get some config options from git-config
102 local output
="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
103 while read -r key value
; do
106 GIT_PS1_SHOWUPSTREAM
="$value"
107 if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
113 svn_remote
[ $
((${#svn_remote[@]} + 1)) ]="$value"
114 svn_url_pattern
+="\\|$value"
115 upstream
=svn
+git
# default upstream is SVN if available, else git
120 # parse configuration values
121 for option
in ${GIT_PS1_SHOWUPSTREAM}; do
123 git|svn
) upstream
="$option" ;;
124 verbose
) verbose
=1 ;;
131 git
) upstream
="@{upstream}" ;;
133 # get the upstream from the "git-svn-id: ..." in a commit message
134 # (git-svn uses essentially the same procedure internally)
135 local svn_upstream
=($
(git log
--first-parent -1 \
136 --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev
/null
))
137 if [[ 0 -ne ${#svn_upstream[@]} ]]; then
138 svn_upstream
=${svn_upstream[ ${#svn_upstream[@]} - 2 ]}
139 svn_upstream
=${svn_upstream%@*}
140 local n_stop
="${#svn_remote[@]}"
141 for ((n
=1; n
<= n_stop
; n
++)); do
142 svn_upstream
=${svn_upstream#${svn_remote[$n]}}
145 if [[ -z "$svn_upstream" ]]; then
146 # default branch name for checkouts with no layout:
147 upstream
=${GIT_SVN_ID:-git-svn}
149 upstream
=${svn_upstream#/}
151 elif [[ "svn+git" = "$upstream" ]]; then
152 upstream
="@{upstream}"
157 # Find how many commits we are ahead/behind our upstream
158 if [[ -z "$legacy" ]]; then
159 count
="$(git rev-list --count --left-right \
160 "$upstream"...HEAD 2>/dev/null)"
162 # produce equivalent output to --count for older versions of git
164 if commits
="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
166 local commit behind
=0 ahead
=0
167 for commit
in $commits
170 "<"*) ((behind
++)) ;;
174 count
="$behind $ahead"
180 # calculate the result
181 if [[ -z "$verbose" ]]; then
185 "0 0") # equal to upstream
187 "0 "*) # ahead of upstream
189 *" 0") # behind upstream
191 *) # diverged from upstream
198 "0 0") # equal to upstream
200 "0 "*) # ahead of upstream
201 p
=" u+${count#0 }" ;;
202 *" 0") # behind upstream
203 p
=" u-${count% 0}" ;;
204 *) # diverged from upstream
205 p
=" u+${count#* }-${count% *}" ;;
212 # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
213 # returns text to add to bash PS1 prompt (includes branch name)
216 local g
="$(__gitdir)"
220 if [ -f "$g/rebase-merge/interactive" ]; then
222 b
="$(cat "$g/rebase-merge
/head-name
")"
223 elif [ -d "$g/rebase-merge" ]; then
225 b
="$(cat "$g/rebase-merge
/head-name
")"
227 if [ -d "$g/rebase-apply" ]; then
228 if [ -f "$g/rebase-apply/rebasing" ]; then
230 elif [ -f "$g/rebase-apply/applying" ]; then
235 elif [ -f "$g/MERGE_HEAD" ]; then
237 elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
239 elif [ -f "$g/BISECT_LOG" ]; then
243 b
="$(git symbolic-ref HEAD 2>/dev/null)" ||
{
246 case "${GIT_PS1_DESCRIBE_STYLE-}" in
248 git describe --contains HEAD ;;
250 git describe --contains --all HEAD ;;
254 git describe --tags --exact-match HEAD ;;
255 esac 2>/dev/null)" ||
257 b
="$(cut -c1-7 "$g/HEAD
" 2>/dev/null)..." ||
270 if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
271 if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
276 elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
277 if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
278 if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
279 git
diff --no-ext-diff --quiet --exit-code || w
="*"
280 if git rev-parse
--quiet --verify HEAD
>/dev
/null
; then
281 git diff-index
--cached --quiet HEAD
-- || i
="+"
287 if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
288 git rev-parse
--verify refs
/stash
>/dev
/null
2>&1 && s
="$"
291 if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ]; then
292 if [ -n "$(git ls-files --others --exclude-standard)" ]; then
297 if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
298 __git_ps1_show_upstream
303 printf -- "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r$p"
320 # The following function is based on code from:
322 # bash_completion - programmable completion functions for bash 3.2+
324 # Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
325 # © 2009-2010, Bash Completion Maintainers
326 # <bash-completion-devel@lists.alioth.debian.org>
328 # This program is free software; you can redistribute it and/or modify
329 # it under the terms of the GNU General Public License as published by
330 # the Free Software Foundation; either version 2, or (at your option)
333 # This program is distributed in the hope that it will be useful,
334 # but WITHOUT ANY WARRANTY; without even the implied warranty of
335 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
336 # GNU General Public License for more details.
338 # You should have received a copy of the GNU General Public License
339 # along with this program; if not, write to the Free Software Foundation,
340 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
342 # The latest version of this software can be obtained here:
344 # http://bash-completion.alioth.debian.org/
348 # This function can be used to access a tokenized list of words
349 # on the command line:
351 # __git_reassemble_comp_words_by_ref '=:'
352 # if test "${words_[cword_-1]}" = -w
357 # The argument should be a collection of characters from the list of
358 # word completion separators (COMP_WORDBREAKS) to treat as ordinary
361 # This is roughly equivalent to going back in time and setting
362 # COMP_WORDBREAKS to exclude those characters. The intent is to
363 # make option types like --date=<type> and <rev>:<path> easy to
364 # recognize by treating each shell word as a single token.
366 # It is best not to set COMP_WORDBREAKS directly because the value is
367 # shared with other completion scripts. By the time the completion
368 # function gets called, COMP_WORDS has already been populated so local
369 # changes to COMP_WORDBREAKS have no effect.
371 # Output: words_, cword_, cur_.
373 __git_reassemble_comp_words_by_ref
()
375 local exclude i j first
376 # Which word separators to exclude?
377 exclude
="${1//[^$COMP_WORDBREAKS]}"
379 if [ -z "$exclude" ]; then
380 words_
=("${COMP_WORDS[@]}")
383 # List of word completion separators has shrunk;
384 # re-assemble words to complete.
385 for ((i
=0, j
=0; i
< ${#COMP_WORDS[@]}; i
++, j
++)); do
386 # Append each nonempty word consisting of just
387 # word separator characters to the current word.
391 [ -n "${COMP_WORDS[$i]}" ] &&
392 # word consists of excluded word separators
393 [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
395 # Attach to the previous token,
396 # unless the previous token is the command name.
397 if [ $j -ge 2 ] && [ -n "$first" ]; then
401 words_
[$j]=${words_[j]}${COMP_WORDS[i]}
402 if [ $i = $COMP_CWORD ]; then
405 if (($i < ${#COMP_WORDS[@]} - 1)); then
412 words_
[$j]=${words_[j]}${COMP_WORDS[i]}
413 if [ $i = $COMP_CWORD ]; then
419 if ! type _get_comp_words_by_ref
>/dev
/null
2>&1; then
420 if [[ -z ${ZSH_VERSION:+set} ]]; then
421 _get_comp_words_by_ref
()
423 local exclude cur_ words_ cword_
424 if [ "$1" = "-n" ]; then
428 __git_reassemble_comp_words_by_ref
"$exclude"
429 cur_
=${words_[cword_]}
430 while [ $# -gt 0 ]; do
436 prev
=${words_[$cword_-1]}
439 words
=("${words_[@]}")
449 _get_comp_words_by_ref
()
451 while [ $# -gt 0 ]; do
454 cur
=${COMP_WORDS[COMP_CWORD]}
457 prev
=${COMP_WORDS[COMP_CWORD-1]}
460 words
=("${COMP_WORDS[@]}")
466 # assume COMP_WORDBREAKS is already set sanely
476 # Generates completion reply with compgen, appending a space to possible
477 # completion words, if necessary.
478 # It accepts 1 to 4 arguments:
479 # 1: List of possible completion words.
480 # 2: A prefix to be added to each possible completion word (optional).
481 # 3: Generate possible completion matches for this word (optional).
482 # 4: A suffix to be appended to each possible completion word (optional).
485 local cur_
="${3-$cur}"
493 COMPREPLY
=($
(compgen
-P "${2-}" \
494 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
500 # Generates completion reply with compgen from newline-separated possible
501 # completion words by appending a space to all of them.
502 # It accepts 1 to 4 arguments:
503 # 1: List of possible completion words, separated by a single newline.
504 # 2: A prefix to be added to each possible completion word (optional).
505 # 3: Generate possible completion matches for this word (optional).
506 # 4: A suffix to be appended to each possible completion word instead of
507 # the default space (optional). If specified but empty, nothing is
512 COMPREPLY
=($
(compgen
-P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
517 local dir
="$(__gitdir)"
518 if [ -d "$dir" ]; then
519 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
527 local dir
="$(__gitdir)"
528 if [ -d "$dir" ]; then
529 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
535 # __git_refs accepts 0, 1 (to pass to __gitdir), or 2 arguments
536 # presence of 2nd argument means use the guess heuristic employed
537 # by checkout for tracking branches
540 local i
hash dir
="$(__gitdir "${1-}")" track
="${2-}"
542 if [ -d "$dir" ]; then
550 for i
in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD
; do
551 if [ -e "$dir/$i" ]; then echo $i; fi
553 format
="refname:short"
554 refs
="refs/tags refs/heads refs/remotes"
557 git
--git-dir="$dir" for-each-ref
--format="%($format)" \
559 if [ -n "$track" ]; then
560 # employ the heuristic used by git checkout
561 # Try to find a remote branch that matches the completion word
562 # but only output if the branch name is unique
564 git
--git-dir="$dir" for-each-ref
--shell --format="ref=%(refname:short)" \
566 while read -r entry
; do
569 if [[ "$ref" == "$cur"* ]]; then
578 git ls-remote
"$dir" "$cur*" 2>/dev
/null | \
579 while read -r hash i
; do
587 git ls-remote
"$dir" HEAD ORIG_HEAD
'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev
/null | \
588 while read -r hash i
; do
591 refs
/*) echo "${i#refs/*/}" ;;
599 # __git_refs2 requires 1 argument (to pass to __git_refs)
603 for i
in $
(__git_refs
"$1"); do
608 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
609 __git_refs_remotes
()
612 git ls-remote
"$1" 'refs/heads/*' 2>/dev
/null | \
613 while read -r hash i
; do
614 echo "$i:refs/remotes/$1/${i#refs/heads/}"
620 local i IFS
=$
'\n' d
="$(__gitdir)"
621 test -d "$d/remotes" && ls -1 "$d/remotes"
622 for i
in $
(git
--git-dir="$d" config
--get-regexp 'remote\..*\.url' 2>/dev
/null
); do
628 __git_list_merge_strategies
()
630 git merge
-s help 2>&1 |
631 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
640 __git_merge_strategies
=
641 # 'git merge -s help' (and thus detection of the merge strategy
642 # list) fails, unfortunately, if run outside of any git working
643 # tree. __git_merge_strategies is set to the empty string in
644 # that case, and the detection will be repeated the next time it
646 __git_compute_merge_strategies
()
648 test -n "$__git_merge_strategies" ||
649 __git_merge_strategies
=$
(__git_list_merge_strategies
)
652 __git_complete_revlist_file
()
654 local pfx
ls ref cur_
="$cur"
674 case "$COMP_WORDBREAKS" in
676 *) pfx
="$ref:$pfx" ;;
679 __gitcomp_nl
"$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
680 | sed '/^100... blob /{
696 pfx
="${cur_%...*}..."
698 __gitcomp_nl
"$(__git_refs)" "$pfx" "$cur_"
703 __gitcomp_nl
"$(__git_refs)" "$pfx" "$cur_"
706 __gitcomp_nl
"$(__git_refs)"
712 __git_complete_file
()
714 __git_complete_revlist_file
717 __git_complete_revlist
()
719 __git_complete_revlist_file
722 __git_complete_remote_or_refspec
()
724 local cur_
="$cur" cmd
="${words[1]}"
725 local i c
=2 remote
="" pfx
="" lhs
=1 no_complete_refspec
=0
726 if [ "$cmd" = "remote" ]; then
729 while [ $c -lt $cword ]; do
732 --mirror) [ "$cmd" = "push" ] && no_complete_refspec
=1 ;;
735 push
) no_complete_refspec
=1 ;;
744 *) remote
="$i"; break ;;
748 if [ -z "$remote" ]; then
749 __gitcomp_nl
"$(__git_remotes)"
752 if [ $no_complete_refspec = 1 ]; then
756 [ "$remote" = "." ] && remote
=
759 case "$COMP_WORDBREAKS" in
761 *) pfx
="${cur_%%:*}:" ;;
773 if [ $lhs = 1 ]; then
774 __gitcomp_nl
"$(__git_refs2 "$remote")" "$pfx" "$cur_"
776 __gitcomp_nl
"$(__git_refs)" "$pfx" "$cur_"
780 if [ $lhs = 1 ]; then
781 __gitcomp_nl
"$(__git_refs "$remote")" "$pfx" "$cur_"
783 __gitcomp_nl
"$(__git_refs)" "$pfx" "$cur_"
787 if [ $lhs = 1 ]; then
788 __gitcomp_nl
"$(__git_refs)" "$pfx" "$cur_"
790 __gitcomp_nl
"$(__git_refs "$remote")" "$pfx" "$cur_"
796 __git_complete_strategy
()
798 __git_compute_merge_strategies
801 __gitcomp
"$__git_merge_strategies"
806 __gitcomp
"$__git_merge_strategies" "" "${cur##--strategy=}"
813 __git_list_all_commands
()
816 for i
in $
(git
help -a|
egrep '^ [a-zA-Z0-9]')
819 *--*) : helper pattern
;;
826 __git_compute_all_commands
()
828 test -n "$__git_all_commands" ||
829 __git_all_commands
=$
(__git_list_all_commands
)
832 __git_list_porcelain_commands
()
835 __git_compute_all_commands
836 for i
in "help" $__git_all_commands
839 *--*) : helper pattern
;;
840 applymbox
) : ask gittus
;;
841 applypatch
) : ask gittus
;;
842 archimport
) : import
;;
843 cat-file
) : plumbing
;;
844 check-attr
) : plumbing
;;
845 check-ignore
) : plumbing
;;
846 check-ref-format
) : plumbing
;;
847 checkout-index
) : plumbing
;;
848 commit-tree
) : plumbing
;;
849 count-objects
) : infrequent
;;
850 credential-cache
) : credentials helper
;;
851 credential-store
) : credentials helper
;;
852 cvsexportcommit
) : export;;
853 cvsimport
) : import
;;
854 cvsserver
) : daemon
;;
856 diff-files
) : plumbing
;;
857 diff-index
) : plumbing
;;
858 diff-tree
) : plumbing
;;
859 fast-import
) : import
;;
860 fast-export
) : export;;
861 fsck-objects
) : plumbing
;;
862 fetch-pack
) : plumbing
;;
863 fmt-merge-msg
) : plumbing
;;
864 for-each-ref
) : plumbing
;;
865 hash-object
) : plumbing
;;
866 http-
*) : transport
;;
867 index-pack
) : plumbing
;;
868 init-db
) : deprecated
;;
869 local-fetch
) : plumbing
;;
870 lost-found
) : infrequent
;;
871 ls-files
) : plumbing
;;
872 ls-remote
) : plumbing
;;
873 ls-tree
) : plumbing
;;
874 mailinfo
) : plumbing
;;
875 mailsplit
) : plumbing
;;
876 merge-
*) : plumbing
;;
879 pack-objects
) : plumbing
;;
880 pack-redundant
) : plumbing
;;
881 pack-refs
) : plumbing
;;
882 parse-remote
) : plumbing
;;
883 patch-id
) : plumbing
;;
884 peek-remote
) : plumbing
;;
886 prune-packed
) : plumbing
;;
887 quiltimport
) : import
;;
888 read-tree
) : plumbing
;;
889 receive-pack
) : plumbing
;;
890 remote-
*) : transport
;;
891 repo-config
) : deprecated
;;
893 rev-list
) : plumbing
;;
894 rev-parse
) : plumbing
;;
895 runstatus
) : plumbing
;;
896 sh-setup
) : internal
;;
898 show-ref
) : plumbing
;;
899 send-pack
) : plumbing
;;
900 show-index
) : plumbing
;;
902 stripspace
) : plumbing
;;
903 symbolic-ref
) : plumbing
;;
904 tar-tree
) : deprecated
;;
905 unpack-file
) : plumbing
;;
906 unpack-objects
) : plumbing
;;
907 update-index
) : plumbing
;;
908 update-ref
) : plumbing
;;
909 update-server-info
) : daemon
;;
910 upload-archive
) : plumbing
;;
911 upload-pack
) : plumbing
;;
912 write-tree
) : plumbing
;;
914 verify-pack
) : infrequent
;;
915 verify-tag
) : plumbing
;;
921 __git_porcelain_commands
=
922 __git_compute_porcelain_commands
()
924 __git_compute_all_commands
925 test -n "$__git_porcelain_commands" ||
926 __git_porcelain_commands
=$
(__git_list_porcelain_commands
)
929 __git_pretty_aliases
()
932 for i
in $
(git
--git-dir="$(__gitdir)" config
--get-regexp "pretty\..*" 2>/dev
/null
); do
945 for i
in $
(git
--git-dir="$(__gitdir)" config
--get-regexp "alias\..*" 2>/dev
/null
); do
955 # __git_aliased_command requires 1 argument
956 __git_aliased_command
()
958 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
959 config
--get "alias.$1")
960 for word
in $cmdline; do
966 \
!*) : shell
command alias ;;
968 *=*) : setting env
;;
977 # __git_find_on_cmdline requires 1 argument
978 __git_find_on_cmdline
()
980 local word subcommand c
=1
981 while [ $c -lt $cword ]; do
983 for subcommand
in $1; do
984 if [ "$subcommand" = "$word" ]; then
993 __git_has_doubledash
()
996 while [ $c -lt $cword ]; do
997 if [ "--" = "${words[c]}" ]; then
1005 __git_whitespacelist
="nowarn warn error error-all fix"
1009 local dir
="$(__gitdir)"
1010 if [ -d "$dir"/rebase-apply
]; then
1011 __gitcomp
"--skip --continue --resolved --abort"
1016 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
1021 --3way --committer-date-is-author-date --ignore-date
1022 --ignore-whitespace --ignore-space-change
1023 --interactive --keep --no-utf8 --signoff --utf8
1024 --whitespace= --scissors
1035 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
1040 --stat --numstat --summary --check --index
1041 --cached --index-info --reverse --reject --unidiff-zero
1042 --apply --no-add --exclude=
1043 --ignore-whitespace --ignore-space-change
1044 --whitespace= --inaccurate-eof --verbose
1053 __git_has_doubledash
&& return
1058 --interactive --refresh --patch --update --dry-run
1059 --ignore-errors --intent-to-add
1070 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
1074 __gitcomp_nl
"$(__git_remotes)" "" "${cur##--remote=}"
1079 --format= --list --verbose
1080 --prefix= --remote= --exec=
1090 __git_has_doubledash
&& return
1092 local subcommands
="start bad good skip reset visualize replay log run"
1093 local subcommand
="$(__git_find_on_cmdline "$subcommands")"
1094 if [ -z "$subcommand" ]; then
1095 if [ -f "$(__gitdir)"/BISECT_START
]; then
1096 __gitcomp
"$subcommands"
1098 __gitcomp
"replay start"
1103 case "$subcommand" in
1104 bad|good|
reset|skip|start
)
1105 __gitcomp_nl
"$(__git_refs)"
1115 local i c
=1 only_local_ref
="n" has_r
="n"
1117 while [ $c -lt $cword ]; do
1120 -d|
-m) only_local_ref
="y" ;;
1129 --color --no-color --verbose --abbrev= --no-abbrev
1130 --track --no-track --contains --merged --no-merged
1131 --set-upstream --edit-description --list
1135 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
1136 __gitcomp_nl
"$(__git_heads)"
1138 __gitcomp_nl
"$(__git_refs)"
1146 local cmd
="${words[2]}"
1149 __gitcomp
"create list-heads verify unbundle"
1152 # looking for a file
1157 __git_complete_revlist
1166 __git_has_doubledash
&& return
1170 __gitcomp
"diff3 merge" "" "${cur##--conflict=}"
1174 --quiet --ours --theirs --track --no-track --merge
1175 --conflict= --orphan --patch
1179 # check if --track, --no-track, or --no-guess was specified
1180 # if so, disable DWIM mode
1181 local flags
="--track --no-track --no-guess" track
=1
1182 if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
1185 __gitcomp_nl
"$(__git_refs '' $track)"
1192 __gitcomp
"$(__git_refs)"
1199 __gitcomp
"--edit --no-commit"
1202 __gitcomp_nl
"$(__git_refs)"
1209 __git_has_doubledash
&& return
1213 __gitcomp
"--dry-run --quiet"
1246 __git_has_doubledash
&& return
1250 __gitcomp
"default strip verbatim whitespace
1251 " "" "${cur##--cleanup=}"
1254 --reuse-message=*|
--reedit-message=*|\
1255 --fixup=*|
--squash=*)
1256 __gitcomp_nl
"$(__git_refs)" "" "${cur#*=}"
1259 --untracked-files=*)
1260 __gitcomp
"all no normal" "" "${cur##--untracked-files=}"
1265 --all --author= --signoff --verify --no-verify
1266 --edit --amend --include --only --interactive
1267 --dry-run --reuse-message= --reedit-message=
1268 --reset-author --file= --message= --template=
1269 --cleanup= --untracked-files --untracked-files=
1270 --verbose --quiet --fixup= --squash=
1282 --all --tags --contains --abbrev= --candidates=
1283 --exact-match --debug --long --match --always
1287 __gitcomp_nl
"$(__git_refs)"
1290 __git_diff_common_options
="--stat --numstat --shortstat --summary
1291 --patch-with-stat --name-only --name-status --color
1292 --no-color --color-words --no-renames --check
1293 --full-index --binary --abbrev --diff-filter=
1294 --find-copies-harder
1295 --text --ignore-space-at-eol --ignore-space-change
1296 --ignore-all-space --exit-code --quiet --ext-diff
1298 --no-prefix --src-prefix= --dst-prefix=
1299 --inter-hunk-context=
1302 --dirstat --dirstat= --dirstat-by-file
1303 --dirstat-by-file= --cumulative
1308 __git_has_doubledash
&& return
1312 __gitcomp
"--cached --staged --pickaxe-all --pickaxe-regex
1313 --base --ours --theirs --no-index
1314 $__git_diff_common_options
1319 __git_complete_revlist_file
1322 __git_mergetools_common
="diffuse ecmerge emerge kdiff3 meld opendiff
1323 tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3
1328 __git_has_doubledash
&& return
1332 __gitcomp
"$__git_mergetools_common kompare" "" "${cur##--tool=}"
1336 __gitcomp
"--cached --staged --pickaxe-all --pickaxe-regex
1337 --base --ours --theirs
1338 --no-renames --diff-filter= --find-copies-harder
1339 --relative --ignore-submodules
1347 __git_fetch_options
="
1348 --quiet --verbose --append --upload-pack --force --keep --depth=
1349 --tags --no-tags --all --prune --dry-run
1356 __gitcomp
"$__git_fetch_options"
1360 __git_complete_remote_or_refspec
1363 _git_format_patch
()
1369 " "" "${cur##--thread=}"
1374 --stdout --attach --no-attach --thread --thread=
1376 --numbered --start-number
1379 --signoff --signature --no-signature
1380 --in-reply-to= --cc=
1381 --full-index --binary
1384 --no-prefix --src-prefix= --dst-prefix=
1385 --inline --suffix= --ignore-if-in-upstream
1391 __git_complete_revlist
1399 --tags --root --unreachable --cache --no-reflogs --full
1400 --strict --verbose --lost-found
1412 __gitcomp
"--prune --aggressive"
1424 __git_match_ctag
() {
1425 awk "/^${1////\\/}/ { print \$1 }" "$2"
1430 __git_has_doubledash
&& return
1436 --text --ignore-case --word-regexp --invert-match
1437 --full-name --line-number
1438 --extended-regexp --basic-regexp --fixed-strings
1440 --files-with-matches --name-only
1441 --files-without-match
1444 --and --or --not --all-match
1450 case "$cword,$prev" in
1452 if test -r tags
; then
1453 __gitcomp_nl
"$(__git_match_ctag "$cur" tags)"
1459 __gitcomp_nl
"$(__git_refs)"
1466 __gitcomp
"--all --info --man --web"
1470 __git_compute_all_commands
1471 __gitcomp
"$__git_all_commands $(__git_aliases)
1472 attributes cli core-tutorial cvs-migration
1473 diffcore gitk glossary hooks ignore modules
1474 namespaces repository-layout tutorial tutorial-2
1484 false true umask group all world everybody
1485 " "" "${cur##--shared=}"
1489 __gitcomp
"--quiet --bare --template= --shared --shared="
1498 __git_has_doubledash
&& return
1502 __gitcomp
"--cached --deleted --modified --others --ignored
1503 --stage --directory --no-empty-directory --unmerged
1504 --killed --exclude= --exclude-from=
1505 --exclude-per-directory= --exclude-standard
1506 --error-unmatch --with-tree= --full-name
1507 --abbrev --ignored --exclude-per-directory
1517 __gitcomp_nl
"$(__git_remotes)"
1525 # Options that go well for log, shortlog and gitk
1526 __git_log_common_options
="
1528 --branches --tags --remotes
1529 --first-parent --merges --no-merges
1531 --max-age= --since= --after=
1532 --min-age= --until= --before=
1533 --min-parents= --max-parents=
1534 --no-min-parents --no-max-parents
1536 # Options that go well for log and gitk (not shortlog)
1537 __git_log_gitk_options
="
1538 --dense --sparse --full-history
1539 --simplify-merges --simplify-by-decoration
1540 --left-right --notes --no-notes
1542 # Options that go well for log and shortlog (not gitk)
1543 __git_log_shortlog_options
="
1544 --author= --committer= --grep=
1548 __git_log_pretty_formats
="oneline short medium full fuller email raw format:"
1549 __git_log_date_formats
="relative iso8601 rfc2822 short local default raw"
1553 __git_has_doubledash
&& return
1555 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1557 if [ -f "$g/MERGE_HEAD" ]; then
1561 --pretty=*|
--format=*)
1562 __gitcomp
"$__git_log_pretty_formats $(__git_pretty_aliases)
1567 __gitcomp
"$__git_log_date_formats" "" "${cur##--date=}"
1571 __gitcomp
"long short" "" "${cur##--decorate=}"
1576 $__git_log_common_options
1577 $__git_log_shortlog_options
1578 $__git_log_gitk_options
1579 --root --topo-order --date-order --reverse
1580 --follow --full-diff
1581 --abbrev-commit --abbrev=
1582 --relative-date --date=
1583 --pretty= --format= --oneline
1586 --decorate --decorate=
1588 --parents --children
1590 $__git_diff_common_options
1591 --pickaxe-all --pickaxe-regex
1596 __git_complete_revlist
1599 __git_merge_options
="
1600 --no-commit --no-stat --log --no-log --squash --strategy
1601 --commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
1606 __git_complete_strategy
&& return
1610 __gitcomp
"$__git_merge_options"
1613 __gitcomp_nl
"$(__git_refs)"
1620 __gitcomp
"$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1633 __gitcomp_nl
"$(__git_refs)"
1640 __gitcomp
"--dry-run"
1649 __gitcomp
"--tags --all --stdin"
1654 local subcommands
='add append copy edit list prune remove show'
1655 local subcommand
="$(__git_find_on_cmdline "$subcommands")"
1657 case "$subcommand,$cur" in
1664 __gitcomp_nl
"$(__git_refs)"
1667 __gitcomp
"$subcommands --ref"
1671 add
,--reuse-message=*|append
,--reuse-message=*|\
1672 add
,--reedit-message=*|append
,--reedit-message=*)
1673 __gitcomp_nl
"$(__git_refs)" "" "${cur#*=}"
1676 __gitcomp
'--file= --message= --reedit-message=
1683 __gitcomp
'--dry-run --verbose'
1692 __gitcomp_nl
"$(__git_refs)"
1701 __git_complete_strategy
&& return
1706 --rebase --no-rebase
1707 $__git_merge_options
1708 $__git_fetch_options
1713 __git_complete_remote_or_refspec
1720 __gitcomp_nl
"$(__git_remotes)"
1725 __gitcomp_nl
"$(__git_remotes)" "" "${cur##--repo=}"
1730 --all --mirror --tags --dry-run --force --verbose
1731 --receive-pack= --repo= --set-upstream
1736 __git_complete_remote_or_refspec
1741 local dir
="$(__gitdir)"
1742 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1743 __gitcomp
"--continue --skip --abort"
1746 __git_complete_strategy
&& return
1749 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
1754 --onto --merge --strategy --interactive
1755 --preserve-merges --stat --no-stat
1756 --committer-date-is-author-date --ignore-date
1757 --ignore-whitespace --whitespace=
1763 __gitcomp_nl
"$(__git_refs)"
1768 local subcommands
="show delete expire"
1769 local subcommand
="$(__git_find_on_cmdline "$subcommands")"
1771 if [ -z "$subcommand" ]; then
1772 __gitcomp
"$subcommands"
1774 __gitcomp_nl
"$(__git_refs)"
1778 __git_send_email_confirm_options
="always never auto cc compose"
1779 __git_send_email_suppresscc_options
="author self cc bodycc sob cccmd body all"
1786 $__git_send_email_confirm_options
1787 " "" "${cur##--confirm=}"
1792 $__git_send_email_suppresscc_options
1793 " "" "${cur##--suppress-cc=}"
1797 --smtp-encryption=*)
1798 __gitcomp
"ssl tls" "" "${cur##--smtp-encryption=}"
1802 __gitcomp
"--annotate --bcc --cc --cc-cmd --chain-reply-to
1803 --compose --confirm= --dry-run --envelope-sender
1805 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1806 --no-suppress-from --no-thread --quiet
1807 --signed-off-by-cc --smtp-pass --smtp-server
1808 --smtp-server-port --smtp-encryption= --smtp-user
1809 --subject --suppress-cc= --suppress-from --thread --to
1810 --validate --no-validate"
1822 __git_config_get_set_variables
()
1824 local prevword word config_file
= c
=$cword
1825 while [ $c -gt 1 ]; do
1828 --global|
--system|
--file=*)
1833 config_file
="$word $prevword"
1841 git
--git-dir="$(__gitdir)" config
$config_file --list 2>/dev
/null |
1856 __gitcomp_nl
"$(__git_remotes)"
1860 __gitcomp_nl
"$(__git_refs)"
1864 local remote
="${prev#remote.}"
1865 remote
="${remote%.fetch}"
1866 if [ -z "$cur" ]; then
1867 COMPREPLY
=("refs/heads/")
1870 __gitcomp_nl
"$(__git_refs_remotes "$remote")"
1874 local remote
="${prev#remote.}"
1875 remote
="${remote%.push}"
1876 __gitcomp_nl
"$(git --git-dir="$
(__gitdir
)" \
1877 for-each-ref --format='%(refname):%(refname)' \
1881 pull.twohead|pull.octopus
)
1882 __git_compute_merge_strategies
1883 __gitcomp
"$__git_merge_strategies"
1886 color.branch|color.
diff|color.interactive|\
1887 color.showbranch|color.status|color.ui
)
1888 __gitcomp
"always never auto"
1892 __gitcomp
"false true"
1897 normal black red green yellow blue magenta cyan white
1898 bold dim ul blink reverse
1903 __gitcomp
"man info web html"
1907 __gitcomp
"$__git_log_date_formats"
1910 sendemail.aliasesfiletype
)
1911 __gitcomp
"mutt mailrc pine elm gnus"
1915 __gitcomp
"$__git_send_email_confirm_options"
1918 sendemail.suppresscc
)
1919 __gitcomp
"$__git_send_email_suppresscc_options"
1922 --get|
--get-all|
--unset|
--unset-all)
1923 __gitcomp_nl
"$(__git_config_get_set_variables)"
1934 --global --system --file=
1935 --list --replace-all
1936 --get --get-all --get-regexp
1937 --add --unset --unset-all
1938 --remove-section --rename-section
1943 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1944 __gitcomp
"remote merge mergeoptions rebase" "$pfx" "$cur_"
1948 local pfx
="${cur%.*}." cur_
="${cur#*.}"
1949 __gitcomp_nl
"$(__git_heads)" "$pfx" "$cur_" "."
1953 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1955 argprompt cmd confirm needsfile noconsole norescan
1956 prompt revprompt revunmerged title
1961 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1962 __gitcomp
"cmd path" "$pfx" "$cur_"
1966 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1967 __gitcomp
"cmd path" "$pfx" "$cur_"
1971 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1972 __gitcomp
"cmd path trustExitCode" "$pfx" "$cur_"
1976 local pfx
="${cur%.*}." cur_
="${cur#*.}"
1977 __git_compute_all_commands
1978 __gitcomp_nl
"$__git_all_commands" "$pfx" "$cur_"
1982 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1984 url proxy fetch push mirror skipDefaultUpdate
1985 receivepack uploadpack tagopt pushurl
1990 local pfx
="${cur%.*}." cur_
="${cur#*.}"
1991 __gitcomp_nl
"$(__git_remotes)" "$pfx" "$cur_" "."
1995 local pfx
="${cur%.*}." cur_
="${cur##*.}"
1996 __gitcomp
"insteadOf pushInsteadOf" "$pfx" "$cur_"
2002 advice.commitBeforeMerge
2004 advice.implicitIdentity
2005 advice.pushNonFastForward
2006 advice.resolveConflict
2010 apply.ignorewhitespace
2012 branch.autosetupmerge
2013 branch.autosetuprebase
2017 color.branch.current
2022 color.decorate.branch
2023 color.decorate.remoteBranch
2024 color.decorate.stash
2034 color.diff.whitespace
2039 color.grep.linenumber
2042 color.grep.separator
2044 color.interactive.error
2045 color.interactive.header
2046 color.interactive.help
2047 color.interactive.prompt
2052 color.status.changed
2054 color.status.nobranch
2055 color.status.untracked
2056 color.status.updated
2065 core.bigFileThreshold
2068 core.deltaBaseCacheLimit
2073 core.fsyncobjectfiles
2075 core.ignoreCygwinFSTricks
2078 core.logAllRefUpdates
2079 core.loosecompression
2082 core.packedGitWindowSize
2084 core.preferSymlinkRefs
2087 core.repositoryFormatVersion
2089 core.sharedRepository
2093 core.warnAmbiguousRefs
2096 diff.autorefreshindex
2099 diff.ignoreSubmodules
2104 diff.suppressBlankEmpty
2109 fetch.recurseSubmodules
2118 format.subjectprefix
2129 gc.reflogexpireunreachable
2133 gitcvs.commitmsgannotation
2134 gitcvs.dbTableNamePrefix
2145 gui.copyblamethreshold
2149 gui.matchtrackingbranch
2150 gui.newbranchtemplate
2151 gui.pruneduringfetch
2152 gui.spellingdictionary
2167 http.sslCertPasswordProtected
2172 i18n.logOutputEncoding
2178 imap.preformattedHTML
2188 interactive.singlekey
2204 mergetool.keepBackup
2205 mergetool.keepTemporaries
2210 notes.rewrite.rebase
2214 pack.deltaCacheLimit
2230 receive.denyCurrentBranch
2231 receive.denyDeleteCurrent
2233 receive.denyNonFastForwards
2236 receive.updateserverinfo
2238 repack.usedeltabaseoffset
2242 sendemail.aliasesfile
2243 sendemail.aliasfiletype
2247 sendemail.chainreplyto
2249 sendemail.envelopesender
2253 sendemail.signedoffbycc
2254 sendemail.smtpdomain
2255 sendemail.smtpencryption
2257 sendemail.smtpserver
2258 sendemail.smtpserveroption
2259 sendemail.smtpserverport
2261 sendemail.suppresscc
2262 sendemail.suppressfrom
2267 status.relativePaths
2268 status.showUntrackedFiles
2269 status.submodulesummary
2272 transfer.unpackLimit
2284 local subcommands
="add rename rm set-head set-branches set-url show prune update"
2285 local subcommand
="$(__git_find_on_cmdline "$subcommands")"
2286 if [ -z "$subcommand" ]; then
2287 __gitcomp
"$subcommands"
2291 case "$subcommand" in
2292 rename|
rm|set-url|show|prune
)
2293 __gitcomp_nl
"$(__git_remotes)"
2295 set-head|set-branches
)
2296 __git_complete_remote_or_refspec
2299 local i c
='' IFS
=$
'\n'
2300 for i
in $
(git
--git-dir="$(__gitdir)" config
--get-regexp "remotes\..*" 2>/dev
/null
); do
2314 __gitcomp_nl
"$(__git_refs)"
2319 __git_has_doubledash
&& return
2323 __gitcomp
"--merge --mixed --hard --soft --patch"
2327 __gitcomp_nl
"$(__git_refs)"
2334 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
2338 __gitcomp_nl
"$(__git_refs)"
2343 __git_has_doubledash
&& return
2347 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
2356 __git_has_doubledash
&& return
2361 $__git_log_common_options
2362 $__git_log_shortlog_options
2363 --numbered --summary
2368 __git_complete_revlist
2373 __git_has_doubledash
&& return
2376 --pretty=*|
--format=*)
2377 __gitcomp
"$__git_log_pretty_formats $(__git_pretty_aliases)
2382 __gitcomp
"--pretty= --format= --abbrev-commit --oneline
2383 $__git_diff_common_options
2396 --all --remotes --topo-order --current --more=
2397 --list --independent --merge-base --no-name
2399 --sha1-name --sparse --topics --reflog
2404 __git_complete_revlist
2409 local save_opts
='--keep-index --no-keep-index --quiet --patch'
2410 local subcommands
='save list show apply clear drop pop create branch'
2411 local subcommand
="$(__git_find_on_cmdline "$subcommands")"
2412 if [ -z "$subcommand" ]; then
2415 __gitcomp
"$save_opts"
2418 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
2419 __gitcomp
"$subcommands"
2426 case "$subcommand,$cur" in
2428 __gitcomp
"$save_opts"
2431 __gitcomp
"--index --quiet"
2433 show
,--*|drop
,--*|branch
,--*)
2436 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
2437 __gitcomp_nl
"$(git --git-dir="$
(__gitdir
)" stash list \
2438 | sed -n -e 's/:.*//p')"
2449 __git_has_doubledash
&& return
2451 local subcommands
="add status init update summary foreach sync"
2452 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
2455 __gitcomp
"--quiet --cached"
2458 __gitcomp
"$subcommands"
2468 init fetch clone rebase dcommit log find-rev
2469 set-tree commit-diff info create-ignore propget
2470 proplist show-ignore show-externals branch tag blame
2471 migrate mkdirs reset gc
2473 local subcommand
="$(__git_find_on_cmdline "$subcommands")"
2474 if [ -z "$subcommand" ]; then
2475 __gitcomp
"$subcommands"
2477 local remote_opts
="--username= --config-dir= --no-auth-cache"
2479 --follow-parent --authors-file= --repack=
2480 --no-metadata --use-svm-props --use-svnsync-props
2481 --log-window-size= --no-checkout --quiet
2482 --repack-flags --use-log-author --localtime
2483 --ignore-paths= $remote_opts
2486 --template= --shared= --trunk= --tags=
2487 --branches= --stdlayout --minimize-url
2488 --no-metadata --use-svm-props --use-svnsync-props
2489 --rewrite-root= --prefix= --use-log-author
2490 --add-author-from $remote_opts
2493 --edit --rmdir --find-copies-harder --copy-similarity=
2496 case "$subcommand,$cur" in
2498 __gitcomp
"--revision= --fetch-all $fc_opts"
2501 __gitcomp
"--revision= $fc_opts $init_opts"
2504 __gitcomp
"$init_opts"
2508 --merge --strategy= --verbose --dry-run
2509 --fetch-all --no-rebase --commit-url
2510 --revision --interactive $cmt_opts $fc_opts
2514 __gitcomp
"--stdin $cmt_opts $fc_opts"
2516 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
2517 show-externals
,--*|mkdirs
,--*)
2518 __gitcomp
"--revision="
2522 --limit= --revision= --verbose --incremental
2523 --oneline --show-commit --non-recursive
2524 --authors-file= --color
2529 --merge --verbose --strategy= --local
2530 --fetch-all --dry-run $fc_opts
2534 __gitcomp
"--message= --file= --revision= $cmt_opts"
2540 __gitcomp
"--dry-run --message --tag"
2543 __gitcomp
"--dry-run --message"
2546 __gitcomp
"--git-format"
2550 --config-dir= --ignore-paths= --minimize
2551 --no-auth-cache --username=
2555 __gitcomp
"--revision= --parent"
2567 while [ $c -lt $cword ]; do
2571 __gitcomp_nl
"$(__git_tags)"
2587 __gitcomp_nl
"$(__git_tags)"
2593 __gitcomp_nl
"$(__git_refs)"
2605 local i c
=1 command __git_dir
2607 while [ $c -lt $cword ]; do
2610 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
2611 --bare) __git_dir
="." ;;
2612 --help) command="help"; break ;;
2615 *) command="$i"; break ;;
2620 if [ -z "$command" ]; then
2634 --no-replace-objects
2638 *) __git_compute_porcelain_commands
2639 __gitcomp
"$__git_porcelain_commands $(__git_aliases)" ;;
2644 local completion_func
="_git_${command//-/_}"
2645 declare -f $completion_func >/dev
/null
&& $completion_func && return
2647 local expansion
=$
(__git_aliased_command
"$command")
2648 if [ -n "$expansion" ]; then
2649 completion_func
="_git_${expansion//-/_}"
2650 declare -f $completion_func >/dev
/null
&& $completion_func
2656 __git_has_doubledash
&& return
2658 local g
="$(__gitdir)"
2660 if [ -f "$g/MERGE_HEAD" ]; then
2666 $__git_log_common_options
2667 $__git_log_gitk_options
2673 __git_complete_revlist
2678 if [[ -n ${ZSH_VERSION-} ]]; then
2682 # workaround zsh's bug that leaves 'words' as a special
2683 # variable in versions < 4.3.12
2686 # workaround zsh's bug that quotes spaces in the COMPREPLY
2687 # array if IFS doesn't contain spaces.
2690 local cur words cword prev
2691 _get_comp_words_by_ref
-n =: cur words cword prev
2695 # Setup completion for certain functions defined above by setting common
2696 # variables and workarounds.
2697 # This is NOT a public function; use at your own risk.
2700 local wrapper
="__git_wrap${2}"
2701 eval "$wrapper () { __git_func_wrap $2 ; }"
2702 complete
-o bashdefault
-o default
-o nospace
-F $wrapper $1 2>/dev
/null \
2703 || complete
-o default
-o nospace
-F $wrapper $1
2706 # wrapper for backwards compatibility
2709 __git_wrap__git_main
2712 # wrapper for backwards compatibility
2715 __git_wrap__gitk_main
2718 __git_complete git __git_main
2719 __git_complete gitk __gitk_main
2721 # The following are necessary only for Cygwin, and only are needed
2722 # when the user has tab-completed the executable name and consequently
2723 # included the '.exe' suffix.
2725 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
2726 __git_complete git.exe __git_main