Code

5ed18215fdefe1c4864ae5c6f01a86a9ff36d012
[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 __gitdir ()
49 {
50         if [ -z "$1" ]; then
51                 if [ -n "$__git_dir" ]; then
52                         echo "$__git_dir"
53                 elif [ -d .git ]; then
54                         echo .git
55                 else
56                         git rev-parse --git-dir 2>/dev/null
57                 fi
58         elif [ -d "$1/.git" ]; then
59                 echo "$1/.git"
60         else
61                 echo "$1"
62         fi
63 }
65 __git_ps1 ()
66 {
67         local b="$(git symbolic-ref HEAD 2>/dev/null)"
68         if [ -n "$b" ]; then
69                 if [ -n "$1" ]; then
70                         printf "$1" "${b##refs/heads/}"
71                 else
72                         printf " (%s)" "${b##refs/heads/}"
73                 fi
74         fi
75 }
77 __gitcomp ()
78 {
79         local all c s=$'\n' IFS=' '$'\t'$'\n'
80         local cur="${COMP_WORDS[COMP_CWORD]}"
81         if [ $# -gt 2 ]; then
82                 cur="$3"
83         fi
84         for c in $1; do
85                 case "$c$4" in
86                 --*=*) all="$all$c$4$s" ;;
87                 *.)    all="$all$c$4$s" ;;
88                 *)     all="$all$c$4 $s" ;;
89                 esac
90         done
91         IFS=$s
92         COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
93         return
94 }
96 __git_heads ()
97 {
98         local cmd i is_hash=y dir="$(__gitdir "$1")"
99         if [ -d "$dir" ]; then
100                 for i in $(git --git-dir="$dir" \
101                         for-each-ref --format='%(refname)' \
102                         refs/heads ); do
103                         echo "${i#refs/heads/}"
104                 done
105                 return
106         fi
107         for i in $(git-ls-remote "$1" 2>/dev/null); do
108                 case "$is_hash,$i" in
109                 y,*) is_hash=n ;;
110                 n,*^{}) is_hash=y ;;
111                 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
112                 n,*) is_hash=y; echo "$i" ;;
113                 esac
114         done
117 __git_refs ()
119         local cmd i is_hash=y dir="$(__gitdir "$1")"
120         if [ -d "$dir" ]; then
121                 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
122                 for i in $(git --git-dir="$dir" \
123                         for-each-ref --format='%(refname)' \
124                         refs/tags refs/heads refs/remotes); do
125                         case "$i" in
126                                 refs/tags/*)    echo "${i#refs/tags/}" ;;
127                                 refs/heads/*)   echo "${i#refs/heads/}" ;;
128                                 refs/remotes/*) echo "${i#refs/remotes/}" ;;
129                                 *)              echo "$i" ;;
130                         esac
131                 done
132                 return
133         fi
134         for i in $(git-ls-remote "$dir" 2>/dev/null); do
135                 case "$is_hash,$i" in
136                 y,*) is_hash=n ;;
137                 n,*^{}) is_hash=y ;;
138                 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
139                 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
140                 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
141                 n,*) is_hash=y; echo "$i" ;;
142                 esac
143         done
146 __git_refs2 ()
148         local i
149         for i in $(__git_refs "$1"); do
150                 echo "$i:$i"
151         done
154 __git_refs_remotes ()
156         local cmd i is_hash=y
157         for i in $(git-ls-remote "$1" 2>/dev/null); do
158                 case "$is_hash,$i" in
159                 n,refs/heads/*)
160                         is_hash=y
161                         echo "$i:refs/remotes/$1/${i#refs/heads/}"
162                         ;;
163                 y,*) is_hash=n ;;
164                 n,*^{}) is_hash=y ;;
165                 n,refs/tags/*) is_hash=y;;
166                 n,*) is_hash=y; ;;
167                 esac
168         done
171 __git_remotes ()
173         local i ngoff IFS=$'\n' d="$(__gitdir)"
174         shopt -q nullglob || ngoff=1
175         shopt -s nullglob
176         for i in "$d/remotes"/*; do
177                 echo ${i#$d/remotes/}
178         done
179         [ "$ngoff" ] && shopt -u nullglob
180         for i in $(git --git-dir="$d" config --list); do
181                 case "$i" in
182                 remote.*.url=*)
183                         i="${i#remote.}"
184                         echo "${i/.url=*/}"
185                         ;;
186                 esac
187         done
190 __git_merge_strategies ()
192         if [ -n "$__git_merge_strategylist" ]; then
193                 echo "$__git_merge_strategylist"
194                 return
195         fi
196         sed -n "/^all_strategies='/{
197                 s/^all_strategies='//
198                 s/'//
199                 p
200                 q
201                 }" "$(git --exec-path)/git-merge"
203 __git_merge_strategylist=
204 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
206 __git_complete_file ()
208         local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
209         case "$cur" in
210         ?*:*)
211                 ref="${cur%%:*}"
212                 cur="${cur#*:}"
213                 case "$cur" in
214                 ?*/*)
215                         pfx="${cur%/*}"
216                         cur="${cur##*/}"
217                         ls="$ref:$pfx"
218                         pfx="$pfx/"
219                         ;;
220                 *)
221                         ls="$ref"
222                         ;;
223             esac
224                 COMPREPLY=($(compgen -P "$pfx" \
225                         -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
226                                 | sed '/^100... blob /s,^.*     ,,
227                                        /^040000 tree /{
228                                            s,^.*        ,,
229                                            s,$,/,
230                                        }
231                                        s/^.*    //')" \
232                         -- "$cur"))
233                 ;;
234         *)
235                 __gitcomp "$(__git_refs)"
236                 ;;
237         esac
240 __git_complete_revlist ()
242         local pfx cur="${COMP_WORDS[COMP_CWORD]}"
243         case "$cur" in
244         *...*)
245                 pfx="${cur%...*}..."
246                 cur="${cur#*...}"
247                 __gitcomp "$(__git_refs)" "$pfx" "$cur"
248                 ;;
249         *..*)
250                 pfx="${cur%..*}.."
251                 cur="${cur#*..}"
252                 __gitcomp "$(__git_refs)" "$pfx" "$cur"
253                 ;;
254         *.)
255                 __gitcomp "$cur."
256                 ;;
257         *)
258                 __gitcomp "$(__git_refs)"
259                 ;;
260         esac
263 __git_commands ()
265         if [ -n "$__git_commandlist" ]; then
266                 echo "$__git_commandlist"
267                 return
268         fi
269         local i IFS=" "$'\n'
270         for i in $(git help -a|egrep '^ ')
271         do
272                 case $i in
273                 add--interactive) : plumbing;;
274                 applymbox)        : ask gittus;;
275                 applypatch)       : ask gittus;;
276                 archimport)       : import;;
277                 cat-file)         : plumbing;;
278                 check-attr)       : plumbing;;
279                 check-ref-format) : plumbing;;
280                 commit-tree)      : plumbing;;
281                 convert-objects)  : plumbing;;
282                 cvsexportcommit)  : export;;
283                 cvsimport)        : import;;
284                 cvsserver)        : daemon;;
285                 daemon)           : daemon;;
286                 diff-files)       : plumbing;;
287                 diff-index)       : plumbing;;
288                 diff-tree)        : plumbing;;
289                 fast-import)      : import;;
290                 fsck-objects)     : plumbing;;
291                 fetch--tool)      : plumbing;;
292                 fetch-pack)       : plumbing;;
293                 fmt-merge-msg)    : plumbing;;
294                 for-each-ref)     : plumbing;;
295                 hash-object)      : plumbing;;
296                 http-*)           : transport;;
297                 index-pack)       : plumbing;;
298                 init-db)          : deprecated;;
299                 local-fetch)      : plumbing;;
300                 mailinfo)         : plumbing;;
301                 mailsplit)        : plumbing;;
302                 merge-*)          : plumbing;;
303                 mktree)           : plumbing;;
304                 mktag)            : plumbing;;
305                 pack-objects)     : plumbing;;
306                 pack-redundant)   : plumbing;;
307                 pack-refs)        : plumbing;;
308                 parse-remote)     : plumbing;;
309                 patch-id)         : plumbing;;
310                 peek-remote)      : plumbing;;
311                 prune)            : plumbing;;
312                 prune-packed)     : plumbing;;
313                 quiltimport)      : import;;
314                 read-tree)        : plumbing;;
315                 receive-pack)     : plumbing;;
316                 reflog)           : plumbing;;
317                 repo-config)      : plumbing;;
318                 rerere)           : plumbing;;
319                 rev-list)         : plumbing;;
320                 rev-parse)        : plumbing;;
321                 runstatus)        : plumbing;;
322                 sh-setup)         : internal;;
323                 shell)            : daemon;;
324                 send-pack)        : plumbing;;
325                 show-index)       : plumbing;;
326                 ssh-*)            : transport;;
327                 stripspace)       : plumbing;;
328                 svn)              : import export;;
329                 svnimport)        : import;;
330                 symbolic-ref)     : plumbing;;
331                 tar-tree)         : deprecated;;
332                 unpack-file)      : plumbing;;
333                 unpack-objects)   : plumbing;;
334                 update-index)     : plumbing;;
335                 update-ref)       : plumbing;;
336                 update-server-info) : daemon;;
337                 upload-archive)   : plumbing;;
338                 upload-pack)      : plumbing;;
339                 write-tree)       : plumbing;;
340                 verify-tag)       : plumbing;;
341                 *) echo $i;;
342                 esac
343         done
345 __git_commandlist=
346 __git_commandlist="$(__git_commands 2>/dev/null)"
348 __git_aliases ()
350         local i IFS=$'\n'
351         for i in $(git --git-dir="$(__gitdir)" config --list); do
352                 case "$i" in
353                 alias.*)
354                         i="${i#alias.}"
355                         echo "${i/=*/}"
356                         ;;
357                 esac
358         done
361 __git_aliased_command ()
363         local word cmdline=$(git --git-dir="$(__gitdir)" \
364                 config --get "alias.$1")
365         for word in $cmdline; do
366                 if [ "${word##-*}" ]; then
367                         echo $word
368                         return
369                 fi
370         done
373 __git_whitespacelist="nowarn warn error error-all strip"
375 _git_am ()
377         local cur="${COMP_WORDS[COMP_CWORD]}"
378         if [ -d .dotest ]; then
379                 __gitcomp "--skip --resolved"
380                 return
381         fi
382         case "$cur" in
383         --whitespace=*)
384                 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
385                 return
386                 ;;
387         --*)
388                 __gitcomp "
389                         --signoff --utf8 --binary --3way --interactive
390                         --whitespace=
391                         "
392                 return
393         esac
394         COMPREPLY=()
397 _git_apply ()
399         local cur="${COMP_WORDS[COMP_CWORD]}"
400         case "$cur" in
401         --whitespace=*)
402                 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
403                 return
404                 ;;
405         --*)
406                 __gitcomp "
407                         --stat --numstat --summary --check --index
408                         --cached --index-info --reverse --reject --unidiff-zero
409                         --apply --no-add --exclude=
410                         --whitespace= --inaccurate-eof --verbose
411                         "
412                 return
413         esac
414         COMPREPLY=()
417 _git_add ()
419         local cur="${COMP_WORDS[COMP_CWORD]}"
420         case "$cur" in
421         --*)
422                 __gitcomp "--interactive --refresh"
423                 return
424         esac
425         COMPREPLY=()
428 _git_bisect ()
430         local i c=1 command
431         while [ $c -lt $COMP_CWORD ]; do
432                 i="${COMP_WORDS[c]}"
433                 case "$i" in
434                 start|bad|good|reset|visualize|replay|log)
435                         command="$i"
436                         break
437                         ;;
438                 esac
439                 c=$((++c))
440         done
442         if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
443                 __gitcomp "start bad good reset visualize replay log"
444                 return
445         fi
447         case "$command" in
448         bad|good|reset)
449                 __gitcomp "$(__git_refs)"
450                 ;;
451         *)
452                 COMPREPLY=()
453                 ;;
454         esac
457 _git_branch ()
459         __gitcomp "$(__git_refs)"
462 _git_bundle ()
464         local mycword="$COMP_CWORD"
465         case "${COMP_WORDS[0]}" in
466         git)
467                 local cmd="${COMP_WORDS[2]}"
468                 mycword="$((mycword-1))"
469                 ;;
470         git-bundle*)
471                 local cmd="${COMP_WORDS[1]}"
472                 ;;
473         esac
474         case "$mycword" in
475         1)
476                 __gitcomp "create list-heads verify unbundle"
477                 ;;
478         2)
479                 # looking for a file
480                 ;;
481         *)
482                 case "$cmd" in
483                         create)
484                                 __git_complete_revlist
485                         ;;
486                 esac
487                 ;;
488         esac
491 _git_checkout ()
493         __gitcomp "$(__git_refs)"
496 _git_cherry ()
498         __gitcomp "$(__git_refs)"
501 _git_cherry_pick ()
503         local cur="${COMP_WORDS[COMP_CWORD]}"
504         case "$cur" in
505         --*)
506                 __gitcomp "--edit --no-commit"
507                 ;;
508         *)
509                 __gitcomp "$(__git_refs)"
510                 ;;
511         esac
514 _git_commit ()
516         local cur="${COMP_WORDS[COMP_CWORD]}"
517         case "$cur" in
518         --*)
519                 __gitcomp "
520                         --all --author= --signoff --verify --no-verify
521                         --edit --amend --include --only
522                         "
523                 return
524         esac
525         COMPREPLY=()
528 _git_describe ()
530         __gitcomp "$(__git_refs)"
533 _git_diff ()
535         __git_complete_file
538 _git_diff_tree ()
540         __gitcomp "$(__git_refs)"
543 _git_fetch ()
545         local cur="${COMP_WORDS[COMP_CWORD]}"
547         case "${COMP_WORDS[0]},$COMP_CWORD" in
548         git-fetch*,1)
549                 __gitcomp "$(__git_remotes)"
550                 ;;
551         git,2)
552                 __gitcomp "$(__git_remotes)"
553                 ;;
554         *)
555                 case "$cur" in
556                 *:*)
557                         __gitcomp "$(__git_refs)" "" "${cur#*:}"
558                         ;;
559                 *)
560                         local remote
561                         case "${COMP_WORDS[0]}" in
562                         git-fetch) remote="${COMP_WORDS[1]}" ;;
563                         git)       remote="${COMP_WORDS[2]}" ;;
564                         esac
565                         __gitcomp "$(__git_refs2 "$remote")"
566                         ;;
567                 esac
568                 ;;
569         esac
572 _git_format_patch ()
574         local cur="${COMP_WORDS[COMP_CWORD]}"
575         case "$cur" in
576         --*)
577                 __gitcomp "
578                         --stdout --attach --thread
579                         --output-directory
580                         --numbered --start-number
581                         --numbered-files
582                         --keep-subject
583                         --signoff
584                         --in-reply-to=
585                         --full-index --binary
586                         --not --all
587                         "
588                 return
589                 ;;
590         esac
591         __git_complete_revlist
594 _git_gc ()
596         local cur="${COMP_WORDS[COMP_CWORD]}"
597         case "$cur" in
598         --*)
599                 __gitcomp "--prune --aggressive"
600                 return
601                 ;;
602         esac
603         COMPREPLY=()
606 _git_ls_remote ()
608         __gitcomp "$(__git_remotes)"
611 _git_ls_tree ()
613         __git_complete_file
616 _git_log ()
618         local cur="${COMP_WORDS[COMP_CWORD]}"
619         case "$cur" in
620         --pretty=*)
621                 __gitcomp "
622                         oneline short medium full fuller email raw
623                         " "" "${cur##--pretty=}"
624                 return
625                 ;;
626         --date=*)
627                 __gitcomp "
628                         relative iso8601 rfc2822 short local default
629                 " "" "${cur##--date=}"
630                 return
631                 ;;
632         --*)
633                 __gitcomp "
634                         --max-count= --max-age= --since= --after=
635                         --min-age= --before= --until=
636                         --root --topo-order --date-order --reverse
637                         --no-merges --follow
638                         --abbrev-commit --abbrev=
639                         --relative-date --date=
640                         --author= --committer= --grep=
641                         --all-match
642                         --pretty= --name-status --name-only --raw
643                         --not --all
644                         --left-right --cherry-pick
645                         "
646                 return
647                 ;;
648         esac
649         __git_complete_revlist
652 _git_merge ()
654         local cur="${COMP_WORDS[COMP_CWORD]}"
655         case "${COMP_WORDS[COMP_CWORD-1]}" in
656         -s|--strategy)
657                 __gitcomp "$(__git_merge_strategies)"
658                 return
659         esac
660         case "$cur" in
661         --strategy=*)
662                 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
663                 return
664                 ;;
665         --*)
666                 __gitcomp "
667                         --no-commit --no-summary --squash --strategy
668                         "
669                 return
670         esac
671         __gitcomp "$(__git_refs)"
674 _git_merge_base ()
676         __gitcomp "$(__git_refs)"
679 _git_name_rev ()
681         __gitcomp "--tags --all --stdin"
684 _git_pull ()
686         local cur="${COMP_WORDS[COMP_CWORD]}"
688         case "${COMP_WORDS[0]},$COMP_CWORD" in
689         git-pull*,1)
690                 __gitcomp "$(__git_remotes)"
691                 ;;
692         git,2)
693                 __gitcomp "$(__git_remotes)"
694                 ;;
695         *)
696                 local remote
697                 case "${COMP_WORDS[0]}" in
698                 git-pull)  remote="${COMP_WORDS[1]}" ;;
699                 git)       remote="${COMP_WORDS[2]}" ;;
700                 esac
701                 __gitcomp "$(__git_refs "$remote")"
702                 ;;
703         esac
706 _git_push ()
708         local cur="${COMP_WORDS[COMP_CWORD]}"
710         case "${COMP_WORDS[0]},$COMP_CWORD" in
711         git-push*,1)
712                 __gitcomp "$(__git_remotes)"
713                 ;;
714         git,2)
715                 __gitcomp "$(__git_remotes)"
716                 ;;
717         *)
718                 case "$cur" in
719                 *:*)
720                         local remote
721                         case "${COMP_WORDS[0]}" in
722                         git-push)  remote="${COMP_WORDS[1]}" ;;
723                         git)       remote="${COMP_WORDS[2]}" ;;
724                         esac
725                         __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
726                         ;;
727                 +*)
728                         __gitcomp "$(__git_refs)" + "${cur#+}"
729                         ;;
730                 *)
731                         __gitcomp "$(__git_refs)"
732                         ;;
733                 esac
734                 ;;
735         esac
738 _git_rebase ()
740         local cur="${COMP_WORDS[COMP_CWORD]}"
741         if [ -d .dotest ] || [ -d .git/.dotest-merge ]; then
742                 __gitcomp "--continue --skip --abort"
743                 return
744         fi
745         case "${COMP_WORDS[COMP_CWORD-1]}" in
746         -s|--strategy)
747                 __gitcomp "$(__git_merge_strategies)"
748                 return
749         esac
750         case "$cur" in
751         --strategy=*)
752                 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
753                 return
754                 ;;
755         --*)
756                 __gitcomp "--onto --merge --strategy"
757                 return
758         esac
759         __gitcomp "$(__git_refs)"
762 _git_config ()
764         local cur="${COMP_WORDS[COMP_CWORD]}"
765         local prv="${COMP_WORDS[COMP_CWORD-1]}"
766         case "$prv" in
767         branch.*.remote)
768                 __gitcomp "$(__git_remotes)"
769                 return
770                 ;;
771         branch.*.merge)
772                 __gitcomp "$(__git_refs)"
773                 return
774                 ;;
775         remote.*.fetch)
776                 local remote="${prv#remote.}"
777                 remote="${remote%.fetch}"
778                 __gitcomp "$(__git_refs_remotes "$remote")"
779                 return
780                 ;;
781         remote.*.push)
782                 local remote="${prv#remote.}"
783                 remote="${remote%.push}"
784                 __gitcomp "$(git --git-dir="$(__gitdir)" \
785                         for-each-ref --format='%(refname):%(refname)' \
786                         refs/heads)"
787                 return
788                 ;;
789         pull.twohead|pull.octopus)
790                 __gitcomp "$(__git_merge_strategies)"
791                 return
792                 ;;
793         color.branch|color.diff|color.status)
794                 __gitcomp "always never auto"
795                 return
796                 ;;
797         color.*.*)
798                 __gitcomp "
799                         black red green yellow blue magenta cyan white
800                         bold dim ul blink reverse
801                         "
802                 return
803                 ;;
804         *.*)
805                 COMPREPLY=()
806                 return
807                 ;;
808         esac
809         case "$cur" in
810         --*)
811                 __gitcomp "
812                         --global --system --file=
813                         --list --replace-all
814                         --get --get-all --get-regexp
815                         --add --unset --unset-all
816                         --remove-section --rename-section
817                         "
818                 return
819                 ;;
820         branch.*.*)
821                 local pfx="${cur%.*}."
822                 cur="${cur##*.}"
823                 __gitcomp "remote merge" "$pfx" "$cur"
824                 return
825                 ;;
826         branch.*)
827                 local pfx="${cur%.*}."
828                 cur="${cur#*.}"
829                 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
830                 return
831                 ;;
832         remote.*.*)
833                 local pfx="${cur%.*}."
834                 cur="${cur##*.}"
835                 __gitcomp "
836                         url fetch push skipDefaultUpdate
837                         receivepack uploadpack tagopt
838                         " "$pfx" "$cur"
839                 return
840                 ;;
841         remote.*)
842                 local pfx="${cur%.*}."
843                 cur="${cur#*.}"
844                 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
845                 return
846                 ;;
847         esac
848         __gitcomp "
849                 apply.whitespace
850                 core.fileMode
851                 core.gitProxy
852                 core.ignoreStat
853                 core.preferSymlinkRefs
854                 core.logAllRefUpdates
855                 core.loosecompression
856                 core.repositoryFormatVersion
857                 core.sharedRepository
858                 core.warnAmbiguousRefs
859                 core.compression
860                 core.legacyHeaders
861                 core.packedGitWindowSize
862                 core.packedGitLimit
863                 clean.requireForce
864                 color.branch
865                 color.branch.current
866                 color.branch.local
867                 color.branch.remote
868                 color.branch.plain
869                 color.diff
870                 color.diff.plain
871                 color.diff.meta
872                 color.diff.frag
873                 color.diff.old
874                 color.diff.new
875                 color.diff.commit
876                 color.diff.whitespace
877                 color.pager
878                 color.status
879                 color.status.header
880                 color.status.added
881                 color.status.changed
882                 color.status.untracked
883                 diff.renameLimit
884                 diff.renames
885                 fetch.unpackLimit
886                 format.headers
887                 format.subjectprefix
888                 gitcvs.enabled
889                 gitcvs.logfile
890                 gitcvs.allbinary
891                 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
892                 gc.packrefs
893                 gc.reflogexpire
894                 gc.reflogexpireunreachable
895                 gc.rerereresolved
896                 gc.rerereunresolved
897                 http.sslVerify
898                 http.sslCert
899                 http.sslKey
900                 http.sslCAInfo
901                 http.sslCAPath
902                 http.maxRequests
903                 http.lowSpeedLimit
904                 http.lowSpeedTime
905                 http.noEPSV
906                 i18n.commitEncoding
907                 i18n.logOutputEncoding
908                 log.showroot
909                 merge.tool
910                 merge.summary
911                 merge.verbosity
912                 pack.window
913                 pack.depth
914                 pack.windowMemory
915                 pack.compression
916                 pack.deltaCacheSize
917                 pack.deltaCacheLimit
918                 pull.octopus
919                 pull.twohead
920                 repack.useDeltaBaseOffset
921                 show.difftree
922                 showbranch.default
923                 tar.umask
924                 transfer.unpackLimit
925                 receive.unpackLimit
926                 receive.denyNonFastForwards
927                 user.name
928                 user.email
929                 user.signingkey
930                 whatchanged.difftree
931                 branch. remote.
932         "
935 _git_remote ()
937         local i c=1 command
938         while [ $c -lt $COMP_CWORD ]; do
939                 i="${COMP_WORDS[c]}"
940                 case "$i" in
941                 add|show|prune|update) command="$i"; break ;;
942                 esac
943                 c=$((++c))
944         done
946         if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
947                 __gitcomp "add show prune update"
948                 return
949         fi
951         case "$command" in
952         show|prune)
953                 __gitcomp "$(__git_remotes)"
954                 ;;
955         update)
956                 local i c='' IFS=$'\n'
957                 for i in $(git --git-dir="$(__gitdir)" config --list); do
958                         case "$i" in
959                         remotes.*)
960                                 i="${i#remotes.}"
961                                 c="$c ${i/=*/}"
962                                 ;;
963                         esac
964                 done
965                 __gitcomp "$c"
966                 ;;
967         *)
968                 COMPREPLY=()
969                 ;;
970         esac
973 _git_reset ()
975         local cur="${COMP_WORDS[COMP_CWORD]}"
976         case "$cur" in
977         --*)
978                 __gitcomp "--mixed --hard --soft"
979                 return
980                 ;;
981         esac
982         __gitcomp "$(__git_refs)"
985 _git_shortlog ()
987         local cur="${COMP_WORDS[COMP_CWORD]}"
988         case "$cur" in
989         --*)
990                 __gitcomp "
991                         --max-count= --max-age= --since= --after=
992                         --min-age= --before= --until=
993                         --no-merges
994                         --author= --committer= --grep=
995                         --all-match
996                         --not --all
997                         --numbered --summary
998                         "
999                 return
1000                 ;;
1001         esac
1002         __git_complete_revlist
1005 _git_show ()
1007         local cur="${COMP_WORDS[COMP_CWORD]}"
1008         case "$cur" in
1009         --pretty=*)
1010                 __gitcomp "
1011                         oneline short medium full fuller email raw
1012                         " "" "${cur##--pretty=}"
1013                 return
1014                 ;;
1015         --*)
1016                 __gitcomp "--pretty="
1017                 return
1018                 ;;
1019         esac
1020         __git_complete_file
1023 _git_stash ()
1025         __gitcomp 'list show apply clear'
1028 _git_submodule ()
1030         local i c=1 command
1031         while [ $c -lt $COMP_CWORD ]; do
1032                 i="${COMP_WORDS[c]}"
1033                 case "$i" in
1034                 add|status|init|update) command="$i"; break ;;
1035                 esac
1036                 c=$((++c))
1037         done
1039         if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1040                 local cur="${COMP_WORDS[COMP_CWORD]}"
1041                 case "$cur" in
1042                 --*)
1043                         __gitcomp "--quiet --cached"
1044                         ;;
1045                 *)
1046                         __gitcomp "add status init update"
1047                         ;;
1048                 esac
1049                 return
1050         fi
1053 _git ()
1055         local i c=1 command __git_dir
1057         while [ $c -lt $COMP_CWORD ]; do
1058                 i="${COMP_WORDS[c]}"
1059                 case "$i" in
1060                 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1061                 --bare)      __git_dir="." ;;
1062                 --version|--help|-p|--paginate) ;;
1063                 *) command="$i"; break ;;
1064                 esac
1065                 c=$((++c))
1066         done
1068         if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1069                 case "${COMP_WORDS[COMP_CWORD]}" in
1070                 --*=*) COMPREPLY=() ;;
1071                 --*)   __gitcomp "
1072                         --no-pager
1073                         --git-dir=
1074                         --bare
1075                         --version
1076                         --exec-path
1077                         "
1078                         ;;
1079                 *)     __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1080                 esac
1081                 return
1082         fi
1084         local expansion=$(__git_aliased_command "$command")
1085         [ "$expansion" ] && command="$expansion"
1087         case "$command" in
1088         am)          _git_am ;;
1089         add)         _git_add ;;
1090         apply)       _git_apply ;;
1091         bisect)      _git_bisect ;;
1092         bundle)      _git_bundle ;;
1093         branch)      _git_branch ;;
1094         checkout)    _git_checkout ;;
1095         cherry)      _git_cherry ;;
1096         cherry-pick) _git_cherry_pick ;;
1097         commit)      _git_commit ;;
1098         config)      _git_config ;;
1099         describe)    _git_describe ;;
1100         diff)        _git_diff ;;
1101         fetch)       _git_fetch ;;
1102         format-patch) _git_format_patch ;;
1103         gc)          _git_gc ;;
1104         log)         _git_log ;;
1105         ls-remote)   _git_ls_remote ;;
1106         ls-tree)     _git_ls_tree ;;
1107         merge)       _git_merge;;
1108         merge-base)  _git_merge_base ;;
1109         name-rev)    _git_name_rev ;;
1110         pull)        _git_pull ;;
1111         push)        _git_push ;;
1112         rebase)      _git_rebase ;;
1113         remote)      _git_remote ;;
1114         reset)       _git_reset ;;
1115         shortlog)    _git_shortlog ;;
1116         show)        _git_show ;;
1117         show-branch) _git_log ;;
1118         stash)       _git_stash ;;
1119         submodule)   _git_submodule ;;
1120         whatchanged) _git_log ;;
1121         *)           COMPREPLY=() ;;
1122         esac
1125 _gitk ()
1127         local cur="${COMP_WORDS[COMP_CWORD]}"
1128         case "$cur" in
1129         --*)
1130                 __gitcomp "--not --all"
1131                 return
1132                 ;;
1133         esac
1134         __git_complete_revlist
1137 complete -o default -o nospace -F _git git
1138 complete -o default -o nospace -F _gitk gitk
1139 complete -o default -o nospace -F _git_am git-am
1140 complete -o default -o nospace -F _git_apply git-apply
1141 complete -o default -o nospace -F _git_bisect git-bisect
1142 complete -o default -o nospace -F _git_branch git-branch
1143 complete -o default -o nospace -F _git_bundle git-bundle
1144 complete -o default -o nospace -F _git_checkout git-checkout
1145 complete -o default -o nospace -F _git_cherry git-cherry
1146 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1147 complete -o default -o nospace -F _git_commit git-commit
1148 complete -o default -o nospace -F _git_describe git-describe
1149 complete -o default -o nospace -F _git_diff git-diff
1150 complete -o default -o nospace -F _git_fetch git-fetch
1151 complete -o default -o nospace -F _git_format_patch git-format-patch
1152 complete -o default -o nospace -F _git_gc git-gc
1153 complete -o default -o nospace -F _git_log git-log
1154 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1155 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1156 complete -o default -o nospace -F _git_merge git-merge
1157 complete -o default -o nospace -F _git_merge_base git-merge-base
1158 complete -o default -o nospace -F _git_name_rev git-name-rev
1159 complete -o default -o nospace -F _git_pull git-pull
1160 complete -o default -o nospace -F _git_push git-push
1161 complete -o default -o nospace -F _git_rebase git-rebase
1162 complete -o default -o nospace -F _git_config git-config
1163 complete -o default -o nospace -F _git_remote git-remote
1164 complete -o default -o nospace -F _git_reset git-reset
1165 complete -o default -o nospace -F _git_shortlog git-shortlog
1166 complete -o default -o nospace -F _git_show git-show
1167 complete -o default -o nospace -F _git_stash git-stash
1168 complete -o default -o nospace -F _git_submodule git-submodule
1169 complete -o default -o nospace -F _git_log git-show-branch
1170 complete -o default -o nospace -F _git_log git-whatchanged
1172 # The following are necessary only for Cygwin, and only are needed
1173 # when the user has tab-completed the executable name and consequently
1174 # included the '.exe' suffix.
1176 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1177 complete -o default -o nospace -F _git_add git-add.exe
1178 complete -o default -o nospace -F _git_apply git-apply.exe
1179 complete -o default -o nospace -F _git git.exe
1180 complete -o default -o nospace -F _git_branch git-branch.exe
1181 complete -o default -o nospace -F _git_bundle git-bundle.exe
1182 complete -o default -o nospace -F _git_cherry git-cherry.exe
1183 complete -o default -o nospace -F _git_describe git-describe.exe
1184 complete -o default -o nospace -F _git_diff git-diff.exe
1185 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1186 complete -o default -o nospace -F _git_log git-log.exe
1187 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1188 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1189 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1190 complete -o default -o nospace -F _git_push git-push.exe
1191 complete -o default -o nospace -F _git_config git-config
1192 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1193 complete -o default -o nospace -F _git_show git-show.exe
1194 complete -o default -o nospace -F _git_log git-show-branch.exe
1195 complete -o default -o nospace -F _git_log git-whatchanged.exe
1196 fi