Code

Merge branch 'jc/maint-co-track' into maint
[git.git] / contrib / completion / git-completion.bash
1 #
2 # bash completion support for core Git.
3 #
4 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
6 # Distributed under the GNU General Public License, version 2.0.
7 #
8 # The contained completion routines provide support for completing:
9 #
10 #    *) local and remote branch names
11 #    *) local and remote tag names
12 #    *) .git/remotes file names
13 #    *) git 'subcommands'
14 #    *) tree paths within 'ref:path/to/file' expressions
15 #    *) common --long-options
16 #
17 # To use these routines:
18 #
19 #    1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
20 #    2) Added the following line to your .bashrc:
21 #        source ~/.git-completion.sh
22 #
23 #    3) You may want to make sure the git executable is available
24 #       in your PATH before this script is sourced, as some caching
25 #       is performed while the script loads.  If git isn't found
26 #       at source time then all lookups will be done on demand,
27 #       which may be slightly slower.
28 #
29 #    4) Consider changing your PS1 to also show the current branch:
30 #        PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
31 #
32 #       The argument to __git_ps1 will be displayed only if you
33 #       are currently in a git repository.  The %s token will be
34 #       the name of the current branch.
35 #
36 # To submit patches:
37 #
38 #    *) Read Documentation/SubmittingPatches
39 #    *) Send all patches to the current maintainer:
40 #
41 #       "Shawn O. Pearce" <spearce@spearce.org>
42 #
43 #    *) Always CC the Git mailing list:
44 #
45 #       git@vger.kernel.org
46 #
48 case "$COMP_WORDBREAKS" in
49 *:*) : great ;;
50 *)   COMP_WORDBREAKS="$COMP_WORDBREAKS:"
51 esac
53 __gitdir ()
54 {
55         if [ -z "$1" ]; then
56                 if [ -n "$__git_dir" ]; then
57                         echo "$__git_dir"
58                 elif [ -d .git ]; then
59                         echo .git
60                 else
61                         git rev-parse --git-dir 2>/dev/null
62                 fi
63         elif [ -d "$1/.git" ]; then
64                 echo "$1/.git"
65         else
66                 echo "$1"
67         fi
68 }
70 __git_ps1 ()
71 {
72         local g="$(git rev-parse --git-dir 2>/dev/null)"
73         if [ -n "$g" ]; then
74                 local r
75                 local b
76                 if [ -d "$g/rebase-apply" ]
77                 then
78                         if test -f "$g/rebase-apply/rebasing"
79                         then
80                                 r="|REBASE"
81                         elif test -f "$g/rebase-apply/applying"
82                         then
83                                 r="|AM"
84                         else
85                                 r="|AM/REBASE"
86                         fi
87                         b="$(git symbolic-ref HEAD 2>/dev/null)"
88                 elif [ -f "$g/rebase-merge/interactive" ]
89                 then
90                         r="|REBASE-i"
91                         b="$(cat "$g/rebase-merge/head-name")"
92                 elif [ -d "$g/rebase-merge" ]
93                 then
94                         r="|REBASE-m"
95                         b="$(cat "$g/rebase-merge/head-name")"
96                 elif [ -f "$g/MERGE_HEAD" ]
97                 then
98                         r="|MERGING"
99                         b="$(git symbolic-ref HEAD 2>/dev/null)"
100                 else
101                         if [ -f "$g/BISECT_LOG" ]
102                         then
103                                 r="|BISECTING"
104                         fi
105                         if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
106                         then
107                                 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
108                                 then
109                                         b="$(cut -c1-7 "$g/HEAD")..."
110                                 fi
111                         fi
112                 fi
114                 if [ -n "$1" ]; then
115                         printf "$1" "${b##refs/heads/}$r"
116                 else
117                         printf " (%s)" "${b##refs/heads/}$r"
118                 fi
119         fi
122 __gitcomp_1 ()
124         local c IFS=' '$'\t'$'\n'
125         for c in $1; do
126                 case "$c$2" in
127                 --*=*) printf %s$'\n' "$c$2" ;;
128                 *.)    printf %s$'\n' "$c$2" ;;
129                 *)     printf %s$'\n' "$c$2 " ;;
130                 esac
131         done
134 __gitcomp ()
136         local cur="${COMP_WORDS[COMP_CWORD]}"
137         if [ $# -gt 2 ]; then
138                 cur="$3"
139         fi
140         case "$cur" in
141         --*=)
142                 COMPREPLY=()
143                 ;;
144         *)
145                 local IFS=$'\n'
146                 COMPREPLY=($(compgen -P "$2" \
147                         -W "$(__gitcomp_1 "$1" "$4")" \
148                         -- "$cur"))
149                 ;;
150         esac
153 __git_heads ()
155         local cmd i is_hash=y dir="$(__gitdir "$1")"
156         if [ -d "$dir" ]; then
157                 for i in $(git --git-dir="$dir" \
158                         for-each-ref --format='%(refname)' \
159                         refs/heads ); do
160                         echo "${i#refs/heads/}"
161                 done
162                 return
163         fi
164         for i in $(git ls-remote "$1" 2>/dev/null); do
165                 case "$is_hash,$i" in
166                 y,*) is_hash=n ;;
167                 n,*^{}) is_hash=y ;;
168                 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
169                 n,*) is_hash=y; echo "$i" ;;
170                 esac
171         done
174 __git_tags ()
176         local cmd i is_hash=y dir="$(__gitdir "$1")"
177         if [ -d "$dir" ]; then
178                 for i in $(git --git-dir="$dir" \
179                         for-each-ref --format='%(refname)' \
180                         refs/tags ); do
181                         echo "${i#refs/tags/}"
182                 done
183                 return
184         fi
185         for i in $(git ls-remote "$1" 2>/dev/null); do
186                 case "$is_hash,$i" in
187                 y,*) is_hash=n ;;
188                 n,*^{}) is_hash=y ;;
189                 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
190                 n,*) is_hash=y; echo "$i" ;;
191                 esac
192         done
195 __git_refs ()
197         local cmd i is_hash=y dir="$(__gitdir "$1")"
198         if [ -d "$dir" ]; then
199                 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
200                 for i in $(git --git-dir="$dir" \
201                         for-each-ref --format='%(refname)' \
202                         refs/tags refs/heads refs/remotes); do
203                         case "$i" in
204                                 refs/tags/*)    echo "${i#refs/tags/}" ;;
205                                 refs/heads/*)   echo "${i#refs/heads/}" ;;
206                                 refs/remotes/*) echo "${i#refs/remotes/}" ;;
207                                 *)              echo "$i" ;;
208                         esac
209                 done
210                 return
211         fi
212         for i in $(git ls-remote "$dir" 2>/dev/null); do
213                 case "$is_hash,$i" in
214                 y,*) is_hash=n ;;
215                 n,*^{}) is_hash=y ;;
216                 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
217                 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
218                 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
219                 n,*) is_hash=y; echo "$i" ;;
220                 esac
221         done
224 __git_refs2 ()
226         local i
227         for i in $(__git_refs "$1"); do
228                 echo "$i:$i"
229         done
232 __git_refs_remotes ()
234         local cmd i is_hash=y
235         for i in $(git ls-remote "$1" 2>/dev/null); do
236                 case "$is_hash,$i" in
237                 n,refs/heads/*)
238                         is_hash=y
239                         echo "$i:refs/remotes/$1/${i#refs/heads/}"
240                         ;;
241                 y,*) is_hash=n ;;
242                 n,*^{}) is_hash=y ;;
243                 n,refs/tags/*) is_hash=y;;
244                 n,*) is_hash=y; ;;
245                 esac
246         done
249 __git_remotes ()
251         local i ngoff IFS=$'\n' d="$(__gitdir)"
252         shopt -q nullglob || ngoff=1
253         shopt -s nullglob
254         for i in "$d/remotes"/*; do
255                 echo ${i#$d/remotes/}
256         done
257         [ "$ngoff" ] && shopt -u nullglob
258         for i in $(git --git-dir="$d" config --list); do
259                 case "$i" in
260                 remote.*.url=*)
261                         i="${i#remote.}"
262                         echo "${i/.url=*/}"
263                         ;;
264                 esac
265         done
268 __git_merge_strategies ()
270         if [ -n "$__git_merge_strategylist" ]; then
271                 echo "$__git_merge_strategylist"
272                 return
273         fi
274         git merge -s help 2>&1 |
275         sed -n -e '/[Aa]vailable strategies are: /,/^$/{
276                 s/\.$//
277                 s/.*://
278                 s/^[    ]*//
279                 s/[     ]*$//
280                 p
281         }'
283 __git_merge_strategylist=
284 __git_merge_strategylist=$(__git_merge_strategies 2>/dev/null)
286 __git_complete_file ()
288         local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
289         case "$cur" in
290         ?*:*)
291                 ref="${cur%%:*}"
292                 cur="${cur#*:}"
293                 case "$cur" in
294                 ?*/*)
295                         pfx="${cur%/*}"
296                         cur="${cur##*/}"
297                         ls="$ref:$pfx"
298                         pfx="$pfx/"
299                         ;;
300                 *)
301                         ls="$ref"
302                         ;;
303             esac
305                 case "$COMP_WORDBREAKS" in
306                 *:*) : great ;;
307                 *)   pfx="$ref:$pfx" ;;
308                 esac
310                 local IFS=$'\n'
311                 COMPREPLY=($(compgen -P "$pfx" \
312                         -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
313                                 | sed '/^100... blob /{
314                                            s,^.*        ,,
315                                            s,$, ,
316                                        }
317                                        /^120000 blob /{
318                                            s,^.*        ,,
319                                            s,$, ,
320                                        }
321                                        /^040000 tree /{
322                                            s,^.*        ,,
323                                            s,$,/,
324                                        }
325                                        s/^.*    //')" \
326                         -- "$cur"))
327                 ;;
328         *)
329                 __gitcomp "$(__git_refs)"
330                 ;;
331         esac
334 __git_complete_revlist ()
336         local pfx cur="${COMP_WORDS[COMP_CWORD]}"
337         case "$cur" in
338         *...*)
339                 pfx="${cur%...*}..."
340                 cur="${cur#*...}"
341                 __gitcomp "$(__git_refs)" "$pfx" "$cur"
342                 ;;
343         *..*)
344                 pfx="${cur%..*}.."
345                 cur="${cur#*..}"
346                 __gitcomp "$(__git_refs)" "$pfx" "$cur"
347                 ;;
348         *)
349                 __gitcomp "$(__git_refs)"
350                 ;;
351         esac
354 __git_all_commands ()
356         if [ -n "$__git_all_commandlist" ]; then
357                 echo "$__git_all_commandlist"
358                 return
359         fi
360         local i IFS=" "$'\n'
361         for i in $(git help -a|egrep '^ ')
362         do
363                 case $i in
364                 *--*)             : helper pattern;;
365                 *) echo $i;;
366                 esac
367         done
369 __git_all_commandlist=
370 __git_all_commandlist="$(__git_all_commands 2>/dev/null)"
372 __git_porcelain_commands ()
374         if [ -n "$__git_porcelain_commandlist" ]; then
375                 echo "$__git_porcelain_commandlist"
376                 return
377         fi
378         local i IFS=" "$'\n'
379         for i in "help" $(__git_all_commands)
380         do
381                 case $i in
382                 *--*)             : helper pattern;;
383                 applymbox)        : ask gittus;;
384                 applypatch)       : ask gittus;;
385                 archimport)       : import;;
386                 cat-file)         : plumbing;;
387                 check-attr)       : plumbing;;
388                 check-ref-format) : plumbing;;
389                 checkout-index)   : plumbing;;
390                 commit-tree)      : plumbing;;
391                 count-objects)    : infrequent;;
392                 cvsexportcommit)  : export;;
393                 cvsimport)        : import;;
394                 cvsserver)        : daemon;;
395                 daemon)           : daemon;;
396                 diff-files)       : plumbing;;
397                 diff-index)       : plumbing;;
398                 diff-tree)        : plumbing;;
399                 fast-import)      : import;;
400                 fast-export)      : export;;
401                 fsck-objects)     : plumbing;;
402                 fetch-pack)       : plumbing;;
403                 fmt-merge-msg)    : plumbing;;
404                 for-each-ref)     : plumbing;;
405                 hash-object)      : plumbing;;
406                 http-*)           : transport;;
407                 index-pack)       : plumbing;;
408                 init-db)          : deprecated;;
409                 local-fetch)      : plumbing;;
410                 lost-found)       : infrequent;;
411                 ls-files)         : plumbing;;
412                 ls-remote)        : plumbing;;
413                 ls-tree)          : plumbing;;
414                 mailinfo)         : plumbing;;
415                 mailsplit)        : plumbing;;
416                 merge-*)          : plumbing;;
417                 mktree)           : plumbing;;
418                 mktag)            : plumbing;;
419                 pack-objects)     : plumbing;;
420                 pack-redundant)   : plumbing;;
421                 pack-refs)        : plumbing;;
422                 parse-remote)     : plumbing;;
423                 patch-id)         : plumbing;;
424                 peek-remote)      : plumbing;;
425                 prune)            : plumbing;;
426                 prune-packed)     : plumbing;;
427                 quiltimport)      : import;;
428                 read-tree)        : plumbing;;
429                 receive-pack)     : plumbing;;
430                 reflog)           : plumbing;;
431                 repo-config)      : deprecated;;
432                 rerere)           : plumbing;;
433                 rev-list)         : plumbing;;
434                 rev-parse)        : plumbing;;
435                 runstatus)        : plumbing;;
436                 sh-setup)         : internal;;
437                 shell)            : daemon;;
438                 show-ref)         : plumbing;;
439                 send-pack)        : plumbing;;
440                 show-index)       : plumbing;;
441                 ssh-*)            : transport;;
442                 stripspace)       : plumbing;;
443                 symbolic-ref)     : plumbing;;
444                 tar-tree)         : deprecated;;
445                 unpack-file)      : plumbing;;
446                 unpack-objects)   : plumbing;;
447                 update-index)     : plumbing;;
448                 update-ref)       : plumbing;;
449                 update-server-info) : daemon;;
450                 upload-archive)   : plumbing;;
451                 upload-pack)      : plumbing;;
452                 write-tree)       : plumbing;;
453                 var)              : infrequent;;
454                 verify-pack)      : infrequent;;
455                 verify-tag)       : plumbing;;
456                 *) echo $i;;
457                 esac
458         done
460 __git_porcelain_commandlist=
461 __git_porcelain_commandlist="$(__git_porcelain_commands 2>/dev/null)"
463 __git_aliases ()
465         local i IFS=$'\n'
466         for i in $(git --git-dir="$(__gitdir)" config --list); do
467                 case "$i" in
468                 alias.*)
469                         i="${i#alias.}"
470                         echo "${i/=*/}"
471                         ;;
472                 esac
473         done
476 __git_aliased_command ()
478         local word cmdline=$(git --git-dir="$(__gitdir)" \
479                 config --get "alias.$1")
480         for word in $cmdline; do
481                 if [ "${word##-*}" ]; then
482                         echo $word
483                         return
484                 fi
485         done
488 __git_find_subcommand ()
490         local word subcommand c=1
492         while [ $c -lt $COMP_CWORD ]; do
493                 word="${COMP_WORDS[c]}"
494                 for subcommand in $1; do
495                         if [ "$subcommand" = "$word" ]; then
496                                 echo "$subcommand"
497                                 return
498                         fi
499                 done
500                 c=$((++c))
501         done
504 __git_has_doubledash ()
506         local c=1
507         while [ $c -lt $COMP_CWORD ]; do
508                 if [ "--" = "${COMP_WORDS[c]}" ]; then
509                         return 0
510                 fi
511                 c=$((++c))
512         done
513         return 1
516 __git_whitespacelist="nowarn warn error error-all fix"
518 _git_am ()
520         local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
521         if [ -d "$dir"/rebase-apply ]; then
522                 __gitcomp "--skip --resolved --abort"
523                 return
524         fi
525         case "$cur" in
526         --whitespace=*)
527                 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
528                 return
529                 ;;
530         --*)
531                 __gitcomp "
532                         --signoff --utf8 --binary --3way --interactive
533                         --whitespace=
534                         "
535                 return
536         esac
537         COMPREPLY=()
540 _git_apply ()
542         local cur="${COMP_WORDS[COMP_CWORD]}"
543         case "$cur" in
544         --whitespace=*)
545                 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
546                 return
547                 ;;
548         --*)
549                 __gitcomp "
550                         --stat --numstat --summary --check --index
551                         --cached --index-info --reverse --reject --unidiff-zero
552                         --apply --no-add --exclude=
553                         --whitespace= --inaccurate-eof --verbose
554                         "
555                 return
556         esac
557         COMPREPLY=()
560 _git_add ()
562         __git_has_doubledash && return
564         local cur="${COMP_WORDS[COMP_CWORD]}"
565         case "$cur" in
566         --*)
567                 __gitcomp "
568                         --interactive --refresh --patch --update --dry-run
569                         --ignore-errors
570                         "
571                 return
572         esac
573         COMPREPLY=()
576 _git_archive ()
578         local cur="${COMP_WORDS[COMP_CWORD]}"
579         case "$cur" in
580         --format=*)
581                 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
582                 return
583                 ;;
584         --remote=*)
585                 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
586                 return
587                 ;;
588         --*)
589                 __gitcomp "
590                         --format= --list --verbose
591                         --prefix= --remote= --exec=
592                         "
593                 return
594                 ;;
595         esac
596         __git_complete_file
599 _git_bisect ()
601         __git_has_doubledash && return
603         local subcommands="start bad good skip reset visualize replay log run"
604         local subcommand="$(__git_find_subcommand "$subcommands")"
605         if [ -z "$subcommand" ]; then
606                 __gitcomp "$subcommands"
607                 return
608         fi
610         case "$subcommand" in
611         bad|good|reset|skip)
612                 __gitcomp "$(__git_refs)"
613                 ;;
614         *)
615                 COMPREPLY=()
616                 ;;
617         esac
620 _git_branch ()
622         local i c=1 only_local_ref="n" has_r="n"
624         while [ $c -lt $COMP_CWORD ]; do
625                 i="${COMP_WORDS[c]}"
626                 case "$i" in
627                 -d|-m)  only_local_ref="y" ;;
628                 -r)     has_r="y" ;;
629                 esac
630                 c=$((++c))
631         done
633         case "${COMP_WORDS[COMP_CWORD]}" in
634         --*=*)  COMPREPLY=() ;;
635         --*)
636                 __gitcomp "
637                         --color --no-color --verbose --abbrev= --no-abbrev
638                         --track --no-track --contains --merged --no-merged
639                         "
640                 ;;
641         *)
642                 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
643                         __gitcomp "$(__git_heads)"
644                 else
645                         __gitcomp "$(__git_refs)"
646                 fi
647                 ;;
648         esac
651 _git_bundle ()
653         local mycword="$COMP_CWORD"
654         case "${COMP_WORDS[0]}" in
655         git)
656                 local cmd="${COMP_WORDS[2]}"
657                 mycword="$((mycword-1))"
658                 ;;
659         git-bundle*)
660                 local cmd="${COMP_WORDS[1]}"
661                 ;;
662         esac
663         case "$mycword" in
664         1)
665                 __gitcomp "create list-heads verify unbundle"
666                 ;;
667         2)
668                 # looking for a file
669                 ;;
670         *)
671                 case "$cmd" in
672                         create)
673                                 __git_complete_revlist
674                         ;;
675                 esac
676                 ;;
677         esac
680 _git_checkout ()
682         __git_has_doubledash && return
684         __gitcomp "$(__git_refs)"
687 _git_cherry ()
689         __gitcomp "$(__git_refs)"
692 _git_cherry_pick ()
694         local cur="${COMP_WORDS[COMP_CWORD]}"
695         case "$cur" in
696         --*)
697                 __gitcomp "--edit --no-commit"
698                 ;;
699         *)
700                 __gitcomp "$(__git_refs)"
701                 ;;
702         esac
705 _git_clean ()
707         __git_has_doubledash && return
709         local cur="${COMP_WORDS[COMP_CWORD]}"
710         case "$cur" in
711         --*)
712                 __gitcomp "--dry-run --quiet"
713                 return
714                 ;;
715         esac
716         COMPREPLY=()
719 _git_clone ()
721         local cur="${COMP_WORDS[COMP_CWORD]}"
722         case "$cur" in
723         --*)
724                 __gitcomp "
725                         --local
726                         --no-hardlinks
727                         --shared
728                         --reference
729                         --quiet
730                         --no-checkout
731                         --bare
732                         --mirror
733                         --origin
734                         --upload-pack
735                         --template=
736                         --depth
737                         "
738                 return
739                 ;;
740         esac
741         COMPREPLY=()
744 _git_commit ()
746         __git_has_doubledash && return
748         local cur="${COMP_WORDS[COMP_CWORD]}"
749         case "$cur" in
750         --*)
751                 __gitcomp "
752                         --all --author= --signoff --verify --no-verify
753                         --edit --amend --include --only --interactive
754                         "
755                 return
756         esac
757         COMPREPLY=()
760 _git_describe ()
762         local cur="${COMP_WORDS[COMP_CWORD]}"
763         case "$cur" in
764         --*)
765                 __gitcomp "
766                         --all --tags --contains --abbrev= --candidates=
767                         --exact-match --debug --long --match --always
768                         "
769                 return
770         esac
771         __gitcomp "$(__git_refs)"
774 _git_diff ()
776         __git_has_doubledash && return
778         local cur="${COMP_WORDS[COMP_CWORD]}"
779         case "$cur" in
780         --*)
781                 __gitcomp "--cached --stat --numstat --shortstat --summary
782                         --patch-with-stat --name-only --name-status --color
783                         --no-color --color-words --no-renames --check
784                         --full-index --binary --abbrev --diff-filter=
785                         --find-copies-harder --pickaxe-all --pickaxe-regex
786                         --text --ignore-space-at-eol --ignore-space-change
787                         --ignore-all-space --exit-code --quiet --ext-diff
788                         --no-ext-diff
789                         --no-prefix --src-prefix= --dst-prefix=
790                         --base --ours --theirs
791                         "
792                 return
793                 ;;
794         esac
795         __git_complete_file
798 _git_fetch ()
800         local cur="${COMP_WORDS[COMP_CWORD]}"
802         if [ "$COMP_CWORD" = 2 ]; then
803                 __gitcomp "$(__git_remotes)"
804         else
805                 case "$cur" in
806                 *:*)
807                         local pfx=""
808                         case "$COMP_WORDBREAKS" in
809                         *:*) : great ;;
810                         *)   pfx="${cur%%:*}:" ;;
811                         esac
812                         __gitcomp "$(__git_refs)" "$pfx" "${cur#*:}"
813                         ;;
814                 *)
815                         local remote
816                         case "${COMP_WORDS[0]}" in
817                         git-fetch) remote="${COMP_WORDS[1]}" ;;
818                         git)       remote="${COMP_WORDS[2]}" ;;
819                         esac
820                         __gitcomp "$(__git_refs2 "$remote")"
821                         ;;
822                 esac
823         fi
826 _git_format_patch ()
828         local cur="${COMP_WORDS[COMP_CWORD]}"
829         case "$cur" in
830         --*)
831                 __gitcomp "
832                         --stdout --attach --thread
833                         --output-directory
834                         --numbered --start-number
835                         --numbered-files
836                         --keep-subject
837                         --signoff
838                         --in-reply-to=
839                         --full-index --binary
840                         --not --all
841                         --cover-letter
842                         --no-prefix --src-prefix= --dst-prefix=
843                         "
844                 return
845                 ;;
846         esac
847         __git_complete_revlist
850 _git_gc ()
852         local cur="${COMP_WORDS[COMP_CWORD]}"
853         case "$cur" in
854         --*)
855                 __gitcomp "--prune --aggressive"
856                 return
857                 ;;
858         esac
859         COMPREPLY=()
862 _git_grep ()
864         __git_has_doubledash && return
866         local cur="${COMP_WORDS[COMP_CWORD]}"
867         case "$cur" in
868         --*)
869                 __gitcomp "
870                         --cached
871                         --text --ignore-case --word-regexp --invert-match
872                         --full-name
873                         --extended-regexp --basic-regexp --fixed-strings
874                         --files-with-matches --name-only
875                         --files-without-match
876                         --count
877                         --and --or --not --all-match
878                         "
879                 return
880                 ;;
881         esac
882         COMPREPLY=()
885 _git_help ()
887         local cur="${COMP_WORDS[COMP_CWORD]}"
888         case "$cur" in
889         --*)
890                 __gitcomp "--all --info --man --web"
891                 return
892                 ;;
893         esac
894         __gitcomp "$(__git_all_commands)
895                 attributes cli core-tutorial cvs-migration
896                 diffcore gitk glossary hooks ignore modules
897                 repository-layout tutorial tutorial-2
898                 "
901 _git_init ()
903         local cur="${COMP_WORDS[COMP_CWORD]}"
904         case "$cur" in
905         --shared=*)
906                 __gitcomp "
907                         false true umask group all world everybody
908                         " "" "${cur##--shared=}"
909                 return
910                 ;;
911         --*)
912                 __gitcomp "--quiet --bare --template= --shared --shared="
913                 return
914                 ;;
915         esac
916         COMPREPLY=()
919 _git_ls_files ()
921         __git_has_doubledash && return
923         local cur="${COMP_WORDS[COMP_CWORD]}"
924         case "$cur" in
925         --*)
926                 __gitcomp "--cached --deleted --modified --others --ignored
927                         --stage --directory --no-empty-directory --unmerged
928                         --killed --exclude= --exclude-from=
929                         --exclude-per-directory= --exclude-standard
930                         --error-unmatch --with-tree= --full-name
931                         --abbrev --ignored --exclude-per-directory
932                         "
933                 return
934                 ;;
935         esac
936         COMPREPLY=()
939 _git_ls_remote ()
941         __gitcomp "$(__git_remotes)"
944 _git_ls_tree ()
946         __git_complete_file
949 _git_log ()
951         __git_has_doubledash && return
953         local cur="${COMP_WORDS[COMP_CWORD]}"
954         case "$cur" in
955         --pretty=*)
956                 __gitcomp "
957                         oneline short medium full fuller email raw
958                         " "" "${cur##--pretty=}"
959                 return
960                 ;;
961         --date=*)
962                 __gitcomp "
963                         relative iso8601 rfc2822 short local default
964                 " "" "${cur##--date=}"
965                 return
966                 ;;
967         --*)
968                 __gitcomp "
969                         --max-count= --max-age= --since= --after=
970                         --min-age= --before= --until=
971                         --root --topo-order --date-order --reverse
972                         --no-merges --follow
973                         --abbrev-commit --abbrev=
974                         --relative-date --date=
975                         --author= --committer= --grep=
976                         --all-match
977                         --pretty= --name-status --name-only --raw
978                         --not --all
979                         --left-right --cherry-pick
980                         --graph
981                         --stat --numstat --shortstat
982                         --decorate --diff-filter=
983                         --color-words --walk-reflogs
984                         --parents --children --full-history
985                         --merge
986                         "
987                 return
988                 ;;
989         esac
990         __git_complete_revlist
993 _git_merge ()
995         local cur="${COMP_WORDS[COMP_CWORD]}"
996         case "${COMP_WORDS[COMP_CWORD-1]}" in
997         -s|--strategy)
998                 __gitcomp "$(__git_merge_strategies)"
999                 return
1000         esac
1001         case "$cur" in
1002         --strategy=*)
1003                 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
1004                 return
1005                 ;;
1006         --*)
1007                 __gitcomp "
1008                         --no-commit --no-stat --log --no-log --squash --strategy
1009                         "
1010                 return
1011         esac
1012         __gitcomp "$(__git_refs)"
1015 _git_mergetool ()
1017         local cur="${COMP_WORDS[COMP_CWORD]}"
1018         case "$cur" in
1019         --tool=*)
1020                 __gitcomp "
1021                         kdiff3 tkdiff meld xxdiff emerge
1022                         vimdiff gvimdiff ecmerge opendiff
1023                         " "" "${cur##--tool=}"
1024                 return
1025                 ;;
1026         --*)
1027                 __gitcomp "--tool="
1028                 return
1029                 ;;
1030         esac
1031         COMPREPLY=()
1034 _git_merge_base ()
1036         __gitcomp "$(__git_refs)"
1039 _git_mv ()
1041         local cur="${COMP_WORDS[COMP_CWORD]}"
1042         case "$cur" in
1043         --*)
1044                 __gitcomp "--dry-run"
1045                 return
1046                 ;;
1047         esac
1048         COMPREPLY=()
1051 _git_name_rev ()
1053         __gitcomp "--tags --all --stdin"
1056 _git_pull ()
1058         local cur="${COMP_WORDS[COMP_CWORD]}"
1060         if [ "$COMP_CWORD" = 2 ]; then
1061                 __gitcomp "$(__git_remotes)"
1062         else
1063                 local remote
1064                 case "${COMP_WORDS[0]}" in
1065                 git-pull)  remote="${COMP_WORDS[1]}" ;;
1066                 git)       remote="${COMP_WORDS[2]}" ;;
1067                 esac
1068                 __gitcomp "$(__git_refs "$remote")"
1069         fi
1072 _git_push ()
1074         local cur="${COMP_WORDS[COMP_CWORD]}"
1076         if [ "$COMP_CWORD" = 2 ]; then
1077                 __gitcomp "$(__git_remotes)"
1078         else
1079                 case "$cur" in
1080                 *:*)
1081                         local remote
1082                         case "${COMP_WORDS[0]}" in
1083                         git-push)  remote="${COMP_WORDS[1]}" ;;
1084                         git)       remote="${COMP_WORDS[2]}" ;;
1085                         esac
1087                         local pfx=""
1088                         case "$COMP_WORDBREAKS" in
1089                         *:*) : great ;;
1090                         *)   pfx="${cur%%:*}:" ;;
1091                         esac
1093                         __gitcomp "$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1094                         ;;
1095                 +*)
1096                         __gitcomp "$(__git_refs)" + "${cur#+}"
1097                         ;;
1098                 *)
1099                         __gitcomp "$(__git_refs)"
1100                         ;;
1101                 esac
1102         fi
1105 _git_rebase ()
1107         local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1108         if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1109                 __gitcomp "--continue --skip --abort"
1110                 return
1111         fi
1112         case "${COMP_WORDS[COMP_CWORD-1]}" in
1113         -s|--strategy)
1114                 __gitcomp "$(__git_merge_strategies)"
1115                 return
1116         esac
1117         case "$cur" in
1118         --strategy=*)
1119                 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
1120                 return
1121                 ;;
1122         --*)
1123                 __gitcomp "--onto --merge --strategy --interactive"
1124                 return
1125         esac
1126         __gitcomp "$(__git_refs)"
1129 _git_send_email ()
1131         local cur="${COMP_WORDS[COMP_CWORD]}"
1132         case "$cur" in
1133         --*)
1134                 __gitcomp "--bcc --cc --cc-cmd --chain-reply-to --compose
1135                         --dry-run --envelope-sender --from --identity
1136                         --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1137                         --no-suppress-from --no-thread --quiet
1138                         --signed-off-by-cc --smtp-pass --smtp-server
1139                         --smtp-server-port --smtp-ssl --smtp-user --subject
1140                         --suppress-cc --suppress-from --thread --to"
1141                 return
1142                 ;;
1143         esac
1144         COMPREPLY=()
1147 _git_config ()
1149         local cur="${COMP_WORDS[COMP_CWORD]}"
1150         local prv="${COMP_WORDS[COMP_CWORD-1]}"
1151         case "$prv" in
1152         branch.*.remote)
1153                 __gitcomp "$(__git_remotes)"
1154                 return
1155                 ;;
1156         branch.*.merge)
1157                 __gitcomp "$(__git_refs)"
1158                 return
1159                 ;;
1160         remote.*.fetch)
1161                 local remote="${prv#remote.}"
1162                 remote="${remote%.fetch}"
1163                 __gitcomp "$(__git_refs_remotes "$remote")"
1164                 return
1165                 ;;
1166         remote.*.push)
1167                 local remote="${prv#remote.}"
1168                 remote="${remote%.push}"
1169                 __gitcomp "$(git --git-dir="$(__gitdir)" \
1170                         for-each-ref --format='%(refname):%(refname)' \
1171                         refs/heads)"
1172                 return
1173                 ;;
1174         pull.twohead|pull.octopus)
1175                 __gitcomp "$(__git_merge_strategies)"
1176                 return
1177                 ;;
1178         color.branch|color.diff|color.status)
1179                 __gitcomp "always never auto"
1180                 return
1181                 ;;
1182         color.*.*)
1183                 __gitcomp "
1184                         black red green yellow blue magenta cyan white
1185                         bold dim ul blink reverse
1186                         "
1187                 return
1188                 ;;
1189         *.*)
1190                 COMPREPLY=()
1191                 return
1192                 ;;
1193         esac
1194         case "$cur" in
1195         --*)
1196                 __gitcomp "
1197                         --global --system --file=
1198                         --list --replace-all
1199                         --get --get-all --get-regexp
1200                         --add --unset --unset-all
1201                         --remove-section --rename-section
1202                         "
1203                 return
1204                 ;;
1205         branch.*.*)
1206                 local pfx="${cur%.*}."
1207                 cur="${cur##*.}"
1208                 __gitcomp "remote merge" "$pfx" "$cur"
1209                 return
1210                 ;;
1211         branch.*)
1212                 local pfx="${cur%.*}."
1213                 cur="${cur#*.}"
1214                 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1215                 return
1216                 ;;
1217         remote.*.*)
1218                 local pfx="${cur%.*}."
1219                 cur="${cur##*.}"
1220                 __gitcomp "
1221                         url fetch push skipDefaultUpdate
1222                         receivepack uploadpack tagopt
1223                         " "$pfx" "$cur"
1224                 return
1225                 ;;
1226         remote.*)
1227                 local pfx="${cur%.*}."
1228                 cur="${cur#*.}"
1229                 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1230                 return
1231                 ;;
1232         esac
1233         __gitcomp "
1234                 apply.whitespace
1235                 core.fileMode
1236                 core.gitProxy
1237                 core.ignoreStat
1238                 core.preferSymlinkRefs
1239                 core.logAllRefUpdates
1240                 core.loosecompression
1241                 core.repositoryFormatVersion
1242                 core.sharedRepository
1243                 core.warnAmbiguousRefs
1244                 core.compression
1245                 core.packedGitWindowSize
1246                 core.packedGitLimit
1247                 clean.requireForce
1248                 color.branch
1249                 color.branch.current
1250                 color.branch.local
1251                 color.branch.remote
1252                 color.branch.plain
1253                 color.diff
1254                 color.diff.plain
1255                 color.diff.meta
1256                 color.diff.frag
1257                 color.diff.old
1258                 color.diff.new
1259                 color.diff.commit
1260                 color.diff.whitespace
1261                 color.pager
1262                 color.status
1263                 color.status.header
1264                 color.status.added
1265                 color.status.changed
1266                 color.status.untracked
1267                 diff.renameLimit
1268                 diff.renames
1269                 fetch.unpackLimit
1270                 format.headers
1271                 format.subjectprefix
1272                 gitcvs.enabled
1273                 gitcvs.logfile
1274                 gitcvs.allbinary
1275                 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1276                 gitcvs.dbtablenameprefix
1277                 gc.packrefs
1278                 gc.reflogexpire
1279                 gc.reflogexpireunreachable
1280                 gc.rerereresolved
1281                 gc.rerereunresolved
1282                 http.sslVerify
1283                 http.sslCert
1284                 http.sslKey
1285                 http.sslCAInfo
1286                 http.sslCAPath
1287                 http.maxRequests
1288                 http.lowSpeedLimit
1289                 http.lowSpeedTime
1290                 http.noEPSV
1291                 i18n.commitEncoding
1292                 i18n.logOutputEncoding
1293                 log.showroot
1294                 merge.tool
1295                 merge.summary
1296                 merge.verbosity
1297                 pack.window
1298                 pack.depth
1299                 pack.windowMemory
1300                 pack.compression
1301                 pack.deltaCacheSize
1302                 pack.deltaCacheLimit
1303                 pull.octopus
1304                 pull.twohead
1305                 repack.useDeltaBaseOffset
1306                 showbranch.default
1307                 tar.umask
1308                 transfer.unpackLimit
1309                 receive.unpackLimit
1310                 receive.denyNonFastForwards
1311                 user.name
1312                 user.email
1313                 user.signingkey
1314                 branch. remote.
1315         "
1318 _git_remote ()
1320         local subcommands="add rm show prune update"
1321         local subcommand="$(__git_find_subcommand "$subcommands")"
1322         if [ -z "$subcommand" ]; then
1323                 __gitcomp "$subcommands"
1324                 return
1325         fi
1327         case "$subcommand" in
1328         rm|show|prune)
1329                 __gitcomp "$(__git_remotes)"
1330                 ;;
1331         update)
1332                 local i c='' IFS=$'\n'
1333                 for i in $(git --git-dir="$(__gitdir)" config --list); do
1334                         case "$i" in
1335                         remotes.*)
1336                                 i="${i#remotes.}"
1337                                 c="$c ${i/=*/}"
1338                                 ;;
1339                         esac
1340                 done
1341                 __gitcomp "$c"
1342                 ;;
1343         *)
1344                 COMPREPLY=()
1345                 ;;
1346         esac
1349 _git_reset ()
1351         __git_has_doubledash && return
1353         local cur="${COMP_WORDS[COMP_CWORD]}"
1354         case "$cur" in
1355         --*)
1356                 __gitcomp "--mixed --hard --soft"
1357                 return
1358                 ;;
1359         esac
1360         __gitcomp "$(__git_refs)"
1363 _git_revert ()
1365         local cur="${COMP_WORDS[COMP_CWORD]}"
1366         case "$cur" in
1367         --*)
1368                 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1369                 return
1370                 ;;
1371         esac
1372         COMPREPLY=()
1375 _git_rm ()
1377         __git_has_doubledash && return
1379         local cur="${COMP_WORDS[COMP_CWORD]}"
1380         case "$cur" in
1381         --*)
1382                 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1383                 return
1384                 ;;
1385         esac
1386         COMPREPLY=()
1389 _git_shortlog ()
1391         __git_has_doubledash && return
1393         local cur="${COMP_WORDS[COMP_CWORD]}"
1394         case "$cur" in
1395         --*)
1396                 __gitcomp "
1397                         --max-count= --max-age= --since= --after=
1398                         --min-age= --before= --until=
1399                         --no-merges
1400                         --author= --committer= --grep=
1401                         --all-match
1402                         --not --all
1403                         --numbered --summary
1404                         "
1405                 return
1406                 ;;
1407         esac
1408         __git_complete_revlist
1411 _git_show ()
1413         __git_has_doubledash && return
1415         local cur="${COMP_WORDS[COMP_CWORD]}"
1416         case "$cur" in
1417         --pretty=*)
1418                 __gitcomp "
1419                         oneline short medium full fuller email raw
1420                         " "" "${cur##--pretty=}"
1421                 return
1422                 ;;
1423         --*)
1424                 __gitcomp "--pretty="
1425                 return
1426                 ;;
1427         esac
1428         __git_complete_file
1431 _git_show_branch ()
1433         local cur="${COMP_WORDS[COMP_CWORD]}"
1434         case "$cur" in
1435         --*)
1436                 __gitcomp "
1437                         --all --remotes --topo-order --current --more=
1438                         --list --independent --merge-base --no-name
1439                         --sha1-name --topics --reflog
1440                         "
1441                 return
1442                 ;;
1443         esac
1444         __git_complete_revlist
1447 _git_stash ()
1449         local subcommands='save list show apply clear drop pop create branch'
1450         local subcommand="$(__git_find_subcommand "$subcommands")"
1451         if [ -z "$subcommand" ]; then
1452                 __gitcomp "$subcommands"
1453         else
1454                 local cur="${COMP_WORDS[COMP_CWORD]}"
1455                 case "$subcommand,$cur" in
1456                 save,--*)
1457                         __gitcomp "--keep-index"
1458                         ;;
1459                 apply,--*)
1460                         __gitcomp "--index"
1461                         ;;
1462                 show,--*|drop,--*|pop,--*|branch,--*)
1463                         COMPREPLY=()
1464                         ;;
1465                 show,*|apply,*|drop,*|pop,*|branch,*)
1466                         __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1467                                         | sed -n -e 's/:.*//p')"
1468                         ;;
1469                 *)
1470                         COMPREPLY=()
1471                         ;;
1472                 esac
1473         fi
1476 _git_submodule ()
1478         __git_has_doubledash && return
1480         local subcommands="add status init update"
1481         if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1482                 local cur="${COMP_WORDS[COMP_CWORD]}"
1483                 case "$cur" in
1484                 --*)
1485                         __gitcomp "--quiet --cached"
1486                         ;;
1487                 *)
1488                         __gitcomp "$subcommands"
1489                         ;;
1490                 esac
1491                 return
1492         fi
1495 _git_svn ()
1497         local subcommands="
1498                 init fetch clone rebase dcommit log find-rev
1499                 set-tree commit-diff info create-ignore propget
1500                 proplist show-ignore show-externals
1501                 "
1502         local subcommand="$(__git_find_subcommand "$subcommands")"
1503         if [ -z "$subcommand" ]; then
1504                 __gitcomp "$subcommands"
1505         else
1506                 local remote_opts="--username= --config-dir= --no-auth-cache"
1507                 local fc_opts="
1508                         --follow-parent --authors-file= --repack=
1509                         --no-metadata --use-svm-props --use-svnsync-props
1510                         --log-window-size= --no-checkout --quiet
1511                         --repack-flags --user-log-author $remote_opts
1512                         "
1513                 local init_opts="
1514                         --template= --shared= --trunk= --tags=
1515                         --branches= --stdlayout --minimize-url
1516                         --no-metadata --use-svm-props --use-svnsync-props
1517                         --rewrite-root= $remote_opts
1518                         "
1519                 local cmt_opts="
1520                         --edit --rmdir --find-copies-harder --copy-similarity=
1521                         "
1523                 local cur="${COMP_WORDS[COMP_CWORD]}"
1524                 case "$subcommand,$cur" in
1525                 fetch,--*)
1526                         __gitcomp "--revision= --fetch-all $fc_opts"
1527                         ;;
1528                 clone,--*)
1529                         __gitcomp "--revision= $fc_opts $init_opts"
1530                         ;;
1531                 init,--*)
1532                         __gitcomp "$init_opts"
1533                         ;;
1534                 dcommit,--*)
1535                         __gitcomp "
1536                                 --merge --strategy= --verbose --dry-run
1537                                 --fetch-all --no-rebase $cmt_opts $fc_opts
1538                                 "
1539                         ;;
1540                 set-tree,--*)
1541                         __gitcomp "--stdin $cmt_opts $fc_opts"
1542                         ;;
1543                 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1544                 show-externals,--*)
1545                         __gitcomp "--revision="
1546                         ;;
1547                 log,--*)
1548                         __gitcomp "
1549                                 --limit= --revision= --verbose --incremental
1550                                 --oneline --show-commit --non-recursive
1551                                 --authors-file=
1552                                 "
1553                         ;;
1554                 rebase,--*)
1555                         __gitcomp "
1556                                 --merge --verbose --strategy= --local
1557                                 --fetch-all $fc_opts
1558                                 "
1559                         ;;
1560                 commit-diff,--*)
1561                         __gitcomp "--message= --file= --revision= $cmt_opts"
1562                         ;;
1563                 info,--*)
1564                         __gitcomp "--url"
1565                         ;;
1566                 *)
1567                         COMPREPLY=()
1568                         ;;
1569                 esac
1570         fi
1573 _git_tag ()
1575         local i c=1 f=0
1576         while [ $c -lt $COMP_CWORD ]; do
1577                 i="${COMP_WORDS[c]}"
1578                 case "$i" in
1579                 -d|-v)
1580                         __gitcomp "$(__git_tags)"
1581                         return
1582                         ;;
1583                 -f)
1584                         f=1
1585                         ;;
1586                 esac
1587                 c=$((++c))
1588         done
1590         case "${COMP_WORDS[COMP_CWORD-1]}" in
1591         -m|-F)
1592                 COMPREPLY=()
1593                 ;;
1594         -*|tag|git-tag)
1595                 if [ $f = 1 ]; then
1596                         __gitcomp "$(__git_tags)"
1597                 else
1598                         COMPREPLY=()
1599                 fi
1600                 ;;
1601         *)
1602                 __gitcomp "$(__git_refs)"
1603                 ;;
1604         esac
1607 _git ()
1609         local i c=1 command __git_dir
1611         while [ $c -lt $COMP_CWORD ]; do
1612                 i="${COMP_WORDS[c]}"
1613                 case "$i" in
1614                 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1615                 --bare)      __git_dir="." ;;
1616                 --version|-p|--paginate) ;;
1617                 --help) command="help"; break ;;
1618                 *) command="$i"; break ;;
1619                 esac
1620                 c=$((++c))
1621         done
1623         if [ -z "$command" ]; then
1624                 case "${COMP_WORDS[COMP_CWORD]}" in
1625                 --*=*) COMPREPLY=() ;;
1626                 --*)   __gitcomp "
1627                         --paginate
1628                         --no-pager
1629                         --git-dir=
1630                         --bare
1631                         --version
1632                         --exec-path
1633                         --work-tree=
1634                         --help
1635                         "
1636                         ;;
1637                 *)     __gitcomp "$(__git_porcelain_commands) $(__git_aliases)" ;;
1638                 esac
1639                 return
1640         fi
1642         local expansion=$(__git_aliased_command "$command")
1643         [ "$expansion" ] && command="$expansion"
1645         case "$command" in
1646         am)          _git_am ;;
1647         add)         _git_add ;;
1648         apply)       _git_apply ;;
1649         archive)     _git_archive ;;
1650         bisect)      _git_bisect ;;
1651         bundle)      _git_bundle ;;
1652         branch)      _git_branch ;;
1653         checkout)    _git_checkout ;;
1654         cherry)      _git_cherry ;;
1655         cherry-pick) _git_cherry_pick ;;
1656         clean)       _git_clean ;;
1657         clone)       _git_clone ;;
1658         commit)      _git_commit ;;
1659         config)      _git_config ;;
1660         describe)    _git_describe ;;
1661         diff)        _git_diff ;;
1662         fetch)       _git_fetch ;;
1663         format-patch) _git_format_patch ;;
1664         gc)          _git_gc ;;
1665         grep)        _git_grep ;;
1666         help)        _git_help ;;
1667         init)        _git_init ;;
1668         log)         _git_log ;;
1669         ls-files)    _git_ls_files ;;
1670         ls-remote)   _git_ls_remote ;;
1671         ls-tree)     _git_ls_tree ;;
1672         merge)       _git_merge;;
1673         mergetool)   _git_mergetool;;
1674         merge-base)  _git_merge_base ;;
1675         mv)          _git_mv ;;
1676         name-rev)    _git_name_rev ;;
1677         pull)        _git_pull ;;
1678         push)        _git_push ;;
1679         rebase)      _git_rebase ;;
1680         remote)      _git_remote ;;
1681         reset)       _git_reset ;;
1682         revert)      _git_revert ;;
1683         rm)          _git_rm ;;
1684         send-email)  _git_send_email ;;
1685         shortlog)    _git_shortlog ;;
1686         show)        _git_show ;;
1687         show-branch) _git_show_branch ;;
1688         stash)       _git_stash ;;
1689         submodule)   _git_submodule ;;
1690         svn)         _git_svn ;;
1691         tag)         _git_tag ;;
1692         whatchanged) _git_log ;;
1693         *)           COMPREPLY=() ;;
1694         esac
1697 _gitk ()
1699         __git_has_doubledash && return
1701         local cur="${COMP_WORDS[COMP_CWORD]}"
1702         local g="$(git rev-parse --git-dir 2>/dev/null)"
1703         local merge=""
1704         if [ -f $g/MERGE_HEAD ]; then
1705                 merge="--merge"
1706         fi
1707         case "$cur" in
1708         --*)
1709                 __gitcomp "--not --all $merge"
1710                 return
1711                 ;;
1712         esac
1713         __git_complete_revlist
1716 complete -o default -o nospace -F _git git
1717 complete -o default -o nospace -F _gitk gitk
1719 # The following are necessary only for Cygwin, and only are needed
1720 # when the user has tab-completed the executable name and consequently
1721 # included the '.exe' suffix.
1723 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1724 complete -o default -o nospace -F _git git.exe
1725 fi