bash: completion for gitk aliases
[git/mingw.git] / contrib / completion / git-completion.bash
blob3029f160b013da4452fecf242b959265af9da988
1 #!bash
3 # bash completion support for core Git.
5 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
6 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
7 # Distributed under the GNU General Public License, version 2.0.
9 # The contained completion routines provide support for completing:
11 # *) local and remote branch names
12 # *) local and remote tag names
13 # *) .git/remotes file names
14 # *) git 'subcommands'
15 # *) tree paths within 'ref:path/to/file' expressions
16 # *) common --long-options
18 # To use these routines:
20 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
21 # 2) Added the following line to your .bashrc:
22 # source ~/.git-completion.sh
24 # 3) Consider changing your PS1 to also show the current branch:
25 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
27 # The argument to __git_ps1 will be displayed only if you
28 # are currently in a git repository. The %s token will be
29 # the name of the current branch.
31 # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty
32 # value, unstaged (*) and staged (+) changes will be shown next
33 # to the branch name. You can configure this per-repository
34 # with the bash.showDirtyState variable, which defaults to true
35 # once GIT_PS1_SHOWDIRTYSTATE is enabled.
37 # You can also see if currently something is stashed, by setting
38 # GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
39 # then a '$' will be shown next to the branch name.
41 # If you would like to see if there're untracked files, then you can
42 # set GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're
43 # untracked files, then a '%' will be shown next to the branch name.
45 # To submit patches:
47 # *) Read Documentation/SubmittingPatches
48 # *) Send all patches to the current maintainer:
50 # "Shawn O. Pearce" <spearce@spearce.org>
52 # *) Always CC the Git mailing list:
54 # git@vger.kernel.org
57 case "$COMP_WORDBREAKS" in
58 *:*) : great ;;
59 *) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
60 esac
62 # __gitdir accepts 0 or 1 arguments (i.e., location)
63 # returns location of .git repo
64 __gitdir ()
66 if [ -z "${1-}" ]; then
67 if [ -n "${__git_dir-}" ]; then
68 echo "$__git_dir"
69 elif [ -d .git ]; then
70 echo .git
71 else
72 git rev-parse --git-dir 2>/dev/null
74 elif [ -d "$1/.git" ]; then
75 echo "$1/.git"
76 else
77 echo "$1"
81 # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
82 # returns text to add to bash PS1 prompt (includes branch name)
83 __git_ps1 ()
85 local g="$(__gitdir)"
86 if [ -n "$g" ]; then
87 local r
88 local b
89 if [ -f "$g/rebase-merge/interactive" ]; then
90 r="|REBASE-i"
91 b="$(cat "$g/rebase-merge/head-name")"
92 elif [ -d "$g/rebase-merge" ]; then
93 r="|REBASE-m"
94 b="$(cat "$g/rebase-merge/head-name")"
95 else
96 if [ -d "$g/rebase-apply" ]; then
97 if [ -f "$g/rebase-apply/rebasing" ]; then
98 r="|REBASE"
99 elif [ -f "$g/rebase-apply/applying" ]; then
100 r="|AM"
101 else
102 r="|AM/REBASE"
104 elif [ -f "$g/MERGE_HEAD" ]; then
105 r="|MERGING"
106 elif [ -f "$g/BISECT_LOG" ]; then
107 r="|BISECTING"
110 b="$(git symbolic-ref HEAD 2>/dev/null)" || {
112 b="$(
113 case "${GIT_PS1_DESCRIBE_STYLE-}" in
114 (contains)
115 git describe --contains HEAD ;;
116 (branch)
117 git describe --contains --all HEAD ;;
118 (describe)
119 git describe HEAD ;;
120 (* | default)
121 git describe --exact-match HEAD ;;
122 esac 2>/dev/null)" ||
124 b="$(cut -c1-7 "$g/HEAD" 2>/dev/null)..." ||
125 b="unknown"
126 b="($b)"
130 local w
131 local i
132 local s
133 local u
134 local c
136 if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
137 if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
138 c="BARE:"
139 else
140 b="GIT_DIR!"
142 elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
143 if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
144 if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
145 git diff --no-ext-diff --quiet --exit-code || w="*"
146 if git rev-parse --quiet --verify HEAD >/dev/null; then
147 git diff-index --cached --quiet HEAD -- || i="+"
148 else
149 i="#"
153 if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
154 git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
157 if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ]; then
158 if [ -n "$(git ls-files --others --exclude-standard)" ]; then
159 u="%"
164 local f="$w$i$s$u"
165 printf "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r"
169 # __gitcomp_1 requires 2 arguments
170 __gitcomp_1 ()
172 local c IFS=' '$'\t'$'\n'
173 for c in $1; do
174 case "$c$2" in
175 --*=*) printf %s$'\n' "$c$2" ;;
176 *.) printf %s$'\n' "$c$2" ;;
177 *) printf %s$'\n' "$c$2 " ;;
178 esac
179 done
182 # __gitcomp accepts 1, 2, 3, or 4 arguments
183 # generates completion reply with compgen
184 __gitcomp ()
186 local cur="${COMP_WORDS[COMP_CWORD]}"
187 if [ $# -gt 2 ]; then
188 cur="$3"
190 case "$cur" in
191 --*=)
192 COMPREPLY=()
195 local IFS=$'\n'
196 COMPREPLY=($(compgen -P "${2-}" \
197 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
198 -- "$cur"))
200 esac
203 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
204 __git_heads ()
206 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
207 if [ -d "$dir" ]; then
208 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
209 refs/heads
210 return
212 for i in $(git ls-remote "${1-}" 2>/dev/null); do
213 case "$is_hash,$i" in
214 y,*) is_hash=n ;;
215 n,*^{}) is_hash=y ;;
216 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
217 n,*) is_hash=y; echo "$i" ;;
218 esac
219 done
222 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
223 __git_tags ()
225 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
226 if [ -d "$dir" ]; then
227 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
228 refs/tags
229 return
231 for i in $(git ls-remote "${1-}" 2>/dev/null); do
232 case "$is_hash,$i" in
233 y,*) is_hash=n ;;
234 n,*^{}) is_hash=y ;;
235 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
236 n,*) is_hash=y; echo "$i" ;;
237 esac
238 done
241 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
242 __git_refs ()
244 local i is_hash=y dir="$(__gitdir "${1-}")"
245 local cur="${COMP_WORDS[COMP_CWORD]}" format refs
246 if [ -d "$dir" ]; then
247 case "$cur" in
248 refs|refs/*)
249 format="refname"
250 refs="${cur%/*}"
253 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
254 format="refname:short"
255 refs="refs/tags refs/heads refs/remotes"
257 esac
258 git --git-dir="$dir" for-each-ref --format="%($format)" \
259 $refs
260 return
262 for i in $(git ls-remote "$dir" 2>/dev/null); do
263 case "$is_hash,$i" in
264 y,*) is_hash=n ;;
265 n,*^{}) is_hash=y ;;
266 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
267 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
268 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
269 n,*) is_hash=y; echo "$i" ;;
270 esac
271 done
274 # __git_refs2 requires 1 argument (to pass to __git_refs)
275 __git_refs2 ()
277 local i
278 for i in $(__git_refs "$1"); do
279 echo "$i:$i"
280 done
283 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
284 __git_refs_remotes ()
286 local cmd i is_hash=y
287 for i in $(git ls-remote "$1" 2>/dev/null); do
288 case "$is_hash,$i" in
289 n,refs/heads/*)
290 is_hash=y
291 echo "$i:refs/remotes/$1/${i#refs/heads/}"
293 y,*) is_hash=n ;;
294 n,*^{}) is_hash=y ;;
295 n,refs/tags/*) is_hash=y;;
296 n,*) is_hash=y; ;;
297 esac
298 done
301 __git_remotes ()
303 local i ngoff IFS=$'\n' d="$(__gitdir)"
304 shopt -q nullglob || ngoff=1
305 shopt -s nullglob
306 for i in "$d/remotes"/*; do
307 echo ${i#$d/remotes/}
308 done
309 [ "$ngoff" ] && shopt -u nullglob
310 for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
311 i="${i#remote.}"
312 echo "${i/.url*/}"
313 done
316 __git_list_merge_strategies ()
318 git merge -s help 2>&1 |
319 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
320 s/\.$//
321 s/.*://
322 s/^[ ]*//
323 s/[ ]*$//
328 __git_merge_strategies=
329 # 'git merge -s help' (and thus detection of the merge strategy
330 # list) fails, unfortunately, if run outside of any git working
331 # tree. __git_merge_strategies is set to the empty string in
332 # that case, and the detection will be repeated the next time it
333 # is needed.
334 __git_compute_merge_strategies ()
336 : ${__git_merge_strategies:=$(__git_list_merge_strategies)}
339 __git_complete_file ()
341 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
342 case "$cur" in
343 ?*:*)
344 ref="${cur%%:*}"
345 cur="${cur#*:}"
346 case "$cur" in
347 ?*/*)
348 pfx="${cur%/*}"
349 cur="${cur##*/}"
350 ls="$ref:$pfx"
351 pfx="$pfx/"
354 ls="$ref"
356 esac
358 case "$COMP_WORDBREAKS" in
359 *:*) : great ;;
360 *) pfx="$ref:$pfx" ;;
361 esac
363 local IFS=$'\n'
364 COMPREPLY=($(compgen -P "$pfx" \
365 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
366 | sed '/^100... blob /{
367 s,^.* ,,
368 s,$, ,
370 /^120000 blob /{
371 s,^.* ,,
372 s,$, ,
374 /^040000 tree /{
375 s,^.* ,,
376 s,$,/,
378 s/^.* //')" \
379 -- "$cur"))
382 __gitcomp "$(__git_refs)"
384 esac
387 __git_complete_revlist ()
389 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
390 case "$cur" in
391 *...*)
392 pfx="${cur%...*}..."
393 cur="${cur#*...}"
394 __gitcomp "$(__git_refs)" "$pfx" "$cur"
396 *..*)
397 pfx="${cur%..*}.."
398 cur="${cur#*..}"
399 __gitcomp "$(__git_refs)" "$pfx" "$cur"
402 __gitcomp "$(__git_refs)"
404 esac
407 __git_complete_remote_or_refspec ()
409 local cmd="${COMP_WORDS[1]}"
410 local cur="${COMP_WORDS[COMP_CWORD]}"
411 local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
412 while [ $c -lt $COMP_CWORD ]; do
413 i="${COMP_WORDS[c]}"
414 case "$i" in
415 --mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
416 --all)
417 case "$cmd" in
418 push) no_complete_refspec=1 ;;
419 fetch)
420 COMPREPLY=()
421 return
423 *) ;;
424 esac
426 -*) ;;
427 *) remote="$i"; break ;;
428 esac
429 c=$((++c))
430 done
431 if [ -z "$remote" ]; then
432 __gitcomp "$(__git_remotes)"
433 return
435 if [ $no_complete_refspec = 1 ]; then
436 COMPREPLY=()
437 return
439 [ "$remote" = "." ] && remote=
440 case "$cur" in
441 *:*)
442 case "$COMP_WORDBREAKS" in
443 *:*) : great ;;
444 *) pfx="${cur%%:*}:" ;;
445 esac
446 cur="${cur#*:}"
447 lhs=0
450 pfx="+"
451 cur="${cur#+}"
453 esac
454 case "$cmd" in
455 fetch)
456 if [ $lhs = 1 ]; then
457 __gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
458 else
459 __gitcomp "$(__git_refs)" "$pfx" "$cur"
462 pull)
463 if [ $lhs = 1 ]; then
464 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
465 else
466 __gitcomp "$(__git_refs)" "$pfx" "$cur"
469 push)
470 if [ $lhs = 1 ]; then
471 __gitcomp "$(__git_refs)" "$pfx" "$cur"
472 else
473 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
476 esac
479 __git_complete_strategy ()
481 __git_compute_merge_strategies
482 case "${COMP_WORDS[COMP_CWORD-1]}" in
483 -s|--strategy)
484 __gitcomp "$__git_merge_strategies"
485 return 0
486 esac
487 local cur="${COMP_WORDS[COMP_CWORD]}"
488 case "$cur" in
489 --strategy=*)
490 __gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
491 return 0
493 esac
494 return 1
497 __git_list_all_commands ()
499 local i IFS=" "$'\n'
500 for i in $(git help -a|egrep '^ [a-zA-Z0-9]')
502 case $i in
503 *--*) : helper pattern;;
504 *) echo $i;;
505 esac
506 done
509 __git_all_commands=
510 __git_compute_all_commands ()
512 : ${__git_all_commands:=$(__git_list_all_commands)}
515 __git_list_porcelain_commands ()
517 local i IFS=" "$'\n'
518 __git_compute_all_commands
519 for i in "help" $__git_all_commands
521 case $i in
522 *--*) : helper pattern;;
523 applymbox) : ask gittus;;
524 applypatch) : ask gittus;;
525 archimport) : import;;
526 cat-file) : plumbing;;
527 check-attr) : plumbing;;
528 check-ref-format) : plumbing;;
529 checkout-index) : plumbing;;
530 commit-tree) : plumbing;;
531 count-objects) : infrequent;;
532 cvsexportcommit) : export;;
533 cvsimport) : import;;
534 cvsserver) : daemon;;
535 daemon) : daemon;;
536 diff-files) : plumbing;;
537 diff-index) : plumbing;;
538 diff-tree) : plumbing;;
539 fast-import) : import;;
540 fast-export) : export;;
541 fsck-objects) : plumbing;;
542 fetch-pack) : plumbing;;
543 fmt-merge-msg) : plumbing;;
544 for-each-ref) : plumbing;;
545 hash-object) : plumbing;;
546 http-*) : transport;;
547 index-pack) : plumbing;;
548 init-db) : deprecated;;
549 local-fetch) : plumbing;;
550 lost-found) : infrequent;;
551 ls-files) : plumbing;;
552 ls-remote) : plumbing;;
553 ls-tree) : plumbing;;
554 mailinfo) : plumbing;;
555 mailsplit) : plumbing;;
556 merge-*) : plumbing;;
557 mktree) : plumbing;;
558 mktag) : plumbing;;
559 pack-objects) : plumbing;;
560 pack-redundant) : plumbing;;
561 pack-refs) : plumbing;;
562 parse-remote) : plumbing;;
563 patch-id) : plumbing;;
564 peek-remote) : plumbing;;
565 prune) : plumbing;;
566 prune-packed) : plumbing;;
567 quiltimport) : import;;
568 read-tree) : plumbing;;
569 receive-pack) : plumbing;;
570 reflog) : plumbing;;
571 remote-*) : transport;;
572 repo-config) : deprecated;;
573 rerere) : plumbing;;
574 rev-list) : plumbing;;
575 rev-parse) : plumbing;;
576 runstatus) : plumbing;;
577 sh-setup) : internal;;
578 shell) : daemon;;
579 show-ref) : plumbing;;
580 send-pack) : plumbing;;
581 show-index) : plumbing;;
582 ssh-*) : transport;;
583 stripspace) : plumbing;;
584 symbolic-ref) : plumbing;;
585 tar-tree) : deprecated;;
586 unpack-file) : plumbing;;
587 unpack-objects) : plumbing;;
588 update-index) : plumbing;;
589 update-ref) : plumbing;;
590 update-server-info) : daemon;;
591 upload-archive) : plumbing;;
592 upload-pack) : plumbing;;
593 write-tree) : plumbing;;
594 var) : infrequent;;
595 verify-pack) : infrequent;;
596 verify-tag) : plumbing;;
597 *) echo $i;;
598 esac
599 done
602 __git_porcelain_commands=
603 __git_compute_porcelain_commands ()
605 __git_compute_all_commands
606 : ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}
609 __git_aliases ()
611 local i IFS=$'\n'
612 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
613 case "$i" in
614 alias.*)
615 i="${i#alias.}"
616 echo "${i/ */}"
618 esac
619 done
622 # __git_aliased_command requires 1 argument
623 __git_aliased_command ()
625 local word cmdline=$(git --git-dir="$(__gitdir)" \
626 config --get "alias.$1")
627 for word in $cmdline; do
628 case "$word" in
629 \!gitk|gitk)
630 echo "gitk"
631 return
633 \!*) : shell command alias ;;
634 -*) : option ;;
635 *=*) : setting env ;;
636 git) : git itself ;;
638 echo "$word"
639 return
640 esac
641 done
644 # __git_find_on_cmdline requires 1 argument
645 __git_find_on_cmdline ()
647 local word subcommand c=1
649 while [ $c -lt $COMP_CWORD ]; do
650 word="${COMP_WORDS[c]}"
651 for subcommand in $1; do
652 if [ "$subcommand" = "$word" ]; then
653 echo "$subcommand"
654 return
656 done
657 c=$((++c))
658 done
661 __git_has_doubledash ()
663 local c=1
664 while [ $c -lt $COMP_CWORD ]; do
665 if [ "--" = "${COMP_WORDS[c]}" ]; then
666 return 0
668 c=$((++c))
669 done
670 return 1
673 __git_whitespacelist="nowarn warn error error-all fix"
675 _git_am ()
677 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
678 if [ -d "$dir"/rebase-apply ]; then
679 __gitcomp "--skip --continue --resolved --abort"
680 return
682 case "$cur" in
683 --whitespace=*)
684 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
685 return
687 --*)
688 __gitcomp "
689 --3way --committer-date-is-author-date --ignore-date
690 --ignore-whitespace --ignore-space-change
691 --interactive --keep --no-utf8 --signoff --utf8
692 --whitespace= --scissors
694 return
695 esac
696 COMPREPLY=()
699 _git_apply ()
701 local cur="${COMP_WORDS[COMP_CWORD]}"
702 case "$cur" in
703 --whitespace=*)
704 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
705 return
707 --*)
708 __gitcomp "
709 --stat --numstat --summary --check --index
710 --cached --index-info --reverse --reject --unidiff-zero
711 --apply --no-add --exclude=
712 --ignore-whitespace --ignore-space-change
713 --whitespace= --inaccurate-eof --verbose
715 return
716 esac
717 COMPREPLY=()
720 _git_add ()
722 __git_has_doubledash && return
724 local cur="${COMP_WORDS[COMP_CWORD]}"
725 case "$cur" in
726 --*)
727 __gitcomp "
728 --interactive --refresh --patch --update --dry-run
729 --ignore-errors --intent-to-add
731 return
732 esac
733 COMPREPLY=()
736 _git_archive ()
738 local cur="${COMP_WORDS[COMP_CWORD]}"
739 case "$cur" in
740 --format=*)
741 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
742 return
744 --remote=*)
745 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
746 return
748 --*)
749 __gitcomp "
750 --format= --list --verbose
751 --prefix= --remote= --exec=
753 return
755 esac
756 __git_complete_file
759 _git_bisect ()
761 __git_has_doubledash && return
763 local subcommands="start bad good skip reset visualize replay log run"
764 local subcommand="$(__git_find_on_cmdline "$subcommands")"
765 if [ -z "$subcommand" ]; then
766 __gitcomp "$subcommands"
767 return
770 case "$subcommand" in
771 bad|good|reset|skip)
772 __gitcomp "$(__git_refs)"
775 COMPREPLY=()
777 esac
780 _git_branch ()
782 local i c=1 only_local_ref="n" has_r="n"
784 while [ $c -lt $COMP_CWORD ]; do
785 i="${COMP_WORDS[c]}"
786 case "$i" in
787 -d|-m) only_local_ref="y" ;;
788 -r) has_r="y" ;;
789 esac
790 c=$((++c))
791 done
793 case "${COMP_WORDS[COMP_CWORD]}" in
794 --*)
795 __gitcomp "
796 --color --no-color --verbose --abbrev= --no-abbrev
797 --track --no-track --contains --merged --no-merged
801 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
802 __gitcomp "$(__git_heads)"
803 else
804 __gitcomp "$(__git_refs)"
807 esac
810 _git_bundle ()
812 local cmd="${COMP_WORDS[2]}"
813 case "$COMP_CWORD" in
815 __gitcomp "create list-heads verify unbundle"
818 # looking for a file
821 case "$cmd" in
822 create)
823 __git_complete_revlist
825 esac
827 esac
830 _git_checkout ()
832 __git_has_doubledash && return
834 local cur="${COMP_WORDS[COMP_CWORD]}"
835 case "$cur" in
836 --conflict=*)
837 __gitcomp "diff3 merge" "" "${cur##--conflict=}"
839 --*)
840 __gitcomp "
841 --quiet --ours --theirs --track --no-track --merge
842 --conflict= --patch
846 __gitcomp "$(__git_refs)"
848 esac
851 _git_cherry ()
853 __gitcomp "$(__git_refs)"
856 _git_cherry_pick ()
858 local cur="${COMP_WORDS[COMP_CWORD]}"
859 case "$cur" in
860 --*)
861 __gitcomp "--edit --no-commit"
864 __gitcomp "$(__git_refs)"
866 esac
869 _git_clean ()
871 __git_has_doubledash && return
873 local cur="${COMP_WORDS[COMP_CWORD]}"
874 case "$cur" in
875 --*)
876 __gitcomp "--dry-run --quiet"
877 return
879 esac
880 COMPREPLY=()
883 _git_clone ()
885 local cur="${COMP_WORDS[COMP_CWORD]}"
886 case "$cur" in
887 --*)
888 __gitcomp "
889 --local
890 --no-hardlinks
891 --shared
892 --reference
893 --quiet
894 --no-checkout
895 --bare
896 --mirror
897 --origin
898 --upload-pack
899 --template=
900 --depth
902 return
904 esac
905 COMPREPLY=()
908 _git_commit ()
910 __git_has_doubledash && return
912 local cur="${COMP_WORDS[COMP_CWORD]}"
913 case "$cur" in
914 --cleanup=*)
915 __gitcomp "default strip verbatim whitespace
916 " "" "${cur##--cleanup=}"
917 return
919 --reuse-message=*)
920 __gitcomp "$(__git_refs)" "" "${cur##--reuse-message=}"
921 return
923 --reedit-message=*)
924 __gitcomp "$(__git_refs)" "" "${cur##--reedit-message=}"
925 return
927 --untracked-files=*)
928 __gitcomp "all no normal" "" "${cur##--untracked-files=}"
929 return
931 --*)
932 __gitcomp "
933 --all --author= --signoff --verify --no-verify
934 --edit --amend --include --only --interactive
935 --dry-run --reuse-message= --reedit-message=
936 --reset-author --file= --message= --template=
937 --cleanup= --untracked-files --untracked-files=
938 --verbose --quiet
940 return
941 esac
942 COMPREPLY=()
945 _git_describe ()
947 local cur="${COMP_WORDS[COMP_CWORD]}"
948 case "$cur" in
949 --*)
950 __gitcomp "
951 --all --tags --contains --abbrev= --candidates=
952 --exact-match --debug --long --match --always
954 return
955 esac
956 __gitcomp "$(__git_refs)"
959 __git_diff_common_options="--stat --numstat --shortstat --summary
960 --patch-with-stat --name-only --name-status --color
961 --no-color --color-words --no-renames --check
962 --full-index --binary --abbrev --diff-filter=
963 --find-copies-harder
964 --text --ignore-space-at-eol --ignore-space-change
965 --ignore-all-space --exit-code --quiet --ext-diff
966 --no-ext-diff
967 --no-prefix --src-prefix= --dst-prefix=
968 --inter-hunk-context=
969 --patience
970 --raw
971 --dirstat --dirstat= --dirstat-by-file
972 --dirstat-by-file= --cumulative
975 _git_diff ()
977 __git_has_doubledash && return
979 local cur="${COMP_WORDS[COMP_CWORD]}"
980 case "$cur" in
981 --*)
982 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
983 --base --ours --theirs
984 $__git_diff_common_options
986 return
988 esac
989 __git_complete_file
992 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
993 tkdiff vimdiff gvimdiff xxdiff araxis p4merge
996 _git_difftool ()
998 __git_has_doubledash && return
1000 local cur="${COMP_WORDS[COMP_CWORD]}"
1001 case "$cur" in
1002 --tool=*)
1003 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
1004 return
1006 --*)
1007 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
1008 --base --ours --theirs
1009 --no-renames --diff-filter= --find-copies-harder
1010 --relative --ignore-submodules
1011 --tool="
1012 return
1014 esac
1015 __git_complete_file
1018 __git_fetch_options="
1019 --quiet --verbose --append --upload-pack --force --keep --depth=
1020 --tags --no-tags --all --prune --dry-run
1023 _git_fetch ()
1025 local cur="${COMP_WORDS[COMP_CWORD]}"
1026 case "$cur" in
1027 --*)
1028 __gitcomp "$__git_fetch_options"
1029 return
1031 esac
1032 __git_complete_remote_or_refspec
1035 _git_format_patch ()
1037 local cur="${COMP_WORDS[COMP_CWORD]}"
1038 case "$cur" in
1039 --thread=*)
1040 __gitcomp "
1041 deep shallow
1042 " "" "${cur##--thread=}"
1043 return
1045 --*)
1046 __gitcomp "
1047 --stdout --attach --no-attach --thread --thread=
1048 --output-directory
1049 --numbered --start-number
1050 --numbered-files
1051 --keep-subject
1052 --signoff
1053 --in-reply-to= --cc=
1054 --full-index --binary
1055 --not --all
1056 --cover-letter
1057 --no-prefix --src-prefix= --dst-prefix=
1058 --inline --suffix= --ignore-if-in-upstream
1059 --subject-prefix=
1061 return
1063 esac
1064 __git_complete_revlist
1067 _git_fsck ()
1069 local cur="${COMP_WORDS[COMP_CWORD]}"
1070 case "$cur" in
1071 --*)
1072 __gitcomp "
1073 --tags --root --unreachable --cache --no-reflogs --full
1074 --strict --verbose --lost-found
1076 return
1078 esac
1079 COMPREPLY=()
1082 _git_gc ()
1084 local cur="${COMP_WORDS[COMP_CWORD]}"
1085 case "$cur" in
1086 --*)
1087 __gitcomp "--prune --aggressive"
1088 return
1090 esac
1091 COMPREPLY=()
1094 _git_gitk ()
1096 _gitk
1099 _git_grep ()
1101 __git_has_doubledash && return
1103 local cur="${COMP_WORDS[COMP_CWORD]}"
1104 case "$cur" in
1105 --*)
1106 __gitcomp "
1107 --cached
1108 --text --ignore-case --word-regexp --invert-match
1109 --full-name
1110 --extended-regexp --basic-regexp --fixed-strings
1111 --files-with-matches --name-only
1112 --files-without-match
1113 --max-depth
1114 --count
1115 --and --or --not --all-match
1117 return
1119 esac
1121 __gitcomp "$(__git_refs)"
1124 _git_help ()
1126 local cur="${COMP_WORDS[COMP_CWORD]}"
1127 case "$cur" in
1128 --*)
1129 __gitcomp "--all --info --man --web"
1130 return
1132 esac
1133 __git_compute_all_commands
1134 __gitcomp "$__git_all_commands
1135 attributes cli core-tutorial cvs-migration
1136 diffcore gitk glossary hooks ignore modules
1137 repository-layout tutorial tutorial-2
1138 workflows
1142 _git_init ()
1144 local cur="${COMP_WORDS[COMP_CWORD]}"
1145 case "$cur" in
1146 --shared=*)
1147 __gitcomp "
1148 false true umask group all world everybody
1149 " "" "${cur##--shared=}"
1150 return
1152 --*)
1153 __gitcomp "--quiet --bare --template= --shared --shared="
1154 return
1156 esac
1157 COMPREPLY=()
1160 _git_ls_files ()
1162 __git_has_doubledash && return
1164 local cur="${COMP_WORDS[COMP_CWORD]}"
1165 case "$cur" in
1166 --*)
1167 __gitcomp "--cached --deleted --modified --others --ignored
1168 --stage --directory --no-empty-directory --unmerged
1169 --killed --exclude= --exclude-from=
1170 --exclude-per-directory= --exclude-standard
1171 --error-unmatch --with-tree= --full-name
1172 --abbrev --ignored --exclude-per-directory
1174 return
1176 esac
1177 COMPREPLY=()
1180 _git_ls_remote ()
1182 __gitcomp "$(__git_remotes)"
1185 _git_ls_tree ()
1187 __git_complete_file
1190 # Options that go well for log, shortlog and gitk
1191 __git_log_common_options="
1192 --not --all
1193 --branches --tags --remotes
1194 --first-parent --merges --no-merges
1195 --max-count=
1196 --max-age= --since= --after=
1197 --min-age= --until= --before=
1199 # Options that go well for log and gitk (not shortlog)
1200 __git_log_gitk_options="
1201 --dense --sparse --full-history
1202 --simplify-merges --simplify-by-decoration
1203 --left-right
1205 # Options that go well for log and shortlog (not gitk)
1206 __git_log_shortlog_options="
1207 --author= --committer= --grep=
1208 --all-match
1211 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1212 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1214 _git_log ()
1216 __git_has_doubledash && return
1218 local cur="${COMP_WORDS[COMP_CWORD]}"
1219 local g="$(git rev-parse --git-dir 2>/dev/null)"
1220 local merge=""
1221 if [ -f "$g/MERGE_HEAD" ]; then
1222 merge="--merge"
1224 case "$cur" in
1225 --pretty=*)
1226 __gitcomp "$__git_log_pretty_formats
1227 " "" "${cur##--pretty=}"
1228 return
1230 --format=*)
1231 __gitcomp "$__git_log_pretty_formats
1232 " "" "${cur##--format=}"
1233 return
1235 --date=*)
1236 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1237 return
1239 --decorate=*)
1240 __gitcomp "long short" "" "${cur##--decorate=}"
1241 return
1243 --*)
1244 __gitcomp "
1245 $__git_log_common_options
1246 $__git_log_shortlog_options
1247 $__git_log_gitk_options
1248 --root --topo-order --date-order --reverse
1249 --follow --full-diff
1250 --abbrev-commit --abbrev=
1251 --relative-date --date=
1252 --pretty= --format= --oneline
1253 --cherry-pick
1254 --graph
1255 --decorate --decorate=
1256 --walk-reflogs
1257 --parents --children
1258 $merge
1259 $__git_diff_common_options
1260 --pickaxe-all --pickaxe-regex
1262 return
1264 esac
1265 __git_complete_revlist
1268 __git_merge_options="
1269 --no-commit --no-stat --log --no-log --squash --strategy
1270 --commit --stat --no-squash --ff --no-ff --ff-only
1273 _git_merge ()
1275 __git_complete_strategy && return
1277 local cur="${COMP_WORDS[COMP_CWORD]}"
1278 case "$cur" in
1279 --*)
1280 __gitcomp "$__git_merge_options"
1281 return
1282 esac
1283 __gitcomp "$(__git_refs)"
1286 _git_mergetool ()
1288 local cur="${COMP_WORDS[COMP_CWORD]}"
1289 case "$cur" in
1290 --tool=*)
1291 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1292 return
1294 --*)
1295 __gitcomp "--tool="
1296 return
1298 esac
1299 COMPREPLY=()
1302 _git_merge_base ()
1304 __gitcomp "$(__git_refs)"
1307 _git_mv ()
1309 local cur="${COMP_WORDS[COMP_CWORD]}"
1310 case "$cur" in
1311 --*)
1312 __gitcomp "--dry-run"
1313 return
1315 esac
1316 COMPREPLY=()
1319 _git_name_rev ()
1321 __gitcomp "--tags --all --stdin"
1324 _git_notes ()
1326 local subcommands="edit show"
1327 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
1328 __gitcomp "$subcommands"
1329 return
1332 case "${COMP_WORDS[COMP_CWORD-1]}" in
1333 -m|-F)
1334 COMPREPLY=()
1337 __gitcomp "$(__git_refs)"
1339 esac
1342 _git_pull ()
1344 __git_complete_strategy && return
1346 local cur="${COMP_WORDS[COMP_CWORD]}"
1347 case "$cur" in
1348 --*)
1349 __gitcomp "
1350 --rebase --no-rebase
1351 $__git_merge_options
1352 $__git_fetch_options
1354 return
1356 esac
1357 __git_complete_remote_or_refspec
1360 _git_push ()
1362 local cur="${COMP_WORDS[COMP_CWORD]}"
1363 case "${COMP_WORDS[COMP_CWORD-1]}" in
1364 --repo)
1365 __gitcomp "$(__git_remotes)"
1366 return
1367 esac
1368 case "$cur" in
1369 --repo=*)
1370 __gitcomp "$(__git_remotes)" "" "${cur##--repo=}"
1371 return
1373 --*)
1374 __gitcomp "
1375 --all --mirror --tags --dry-run --force --verbose
1376 --receive-pack= --repo=
1378 return
1380 esac
1381 __git_complete_remote_or_refspec
1384 _git_rebase ()
1386 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1387 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1388 __gitcomp "--continue --skip --abort"
1389 return
1391 __git_complete_strategy && return
1392 case "$cur" in
1393 --whitespace=*)
1394 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
1395 return
1397 --*)
1398 __gitcomp "
1399 --onto --merge --strategy --interactive
1400 --preserve-merges --stat --no-stat
1401 --committer-date-is-author-date --ignore-date
1402 --ignore-whitespace --whitespace=
1403 --autosquash
1406 return
1407 esac
1408 __gitcomp "$(__git_refs)"
1411 __git_send_email_confirm_options="always never auto cc compose"
1412 __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
1414 _git_send_email ()
1416 local cur="${COMP_WORDS[COMP_CWORD]}"
1417 case "$cur" in
1418 --confirm=*)
1419 __gitcomp "
1420 $__git_send_email_confirm_options
1421 " "" "${cur##--confirm=}"
1422 return
1424 --suppress-cc=*)
1425 __gitcomp "
1426 $__git_send_email_suppresscc_options
1427 " "" "${cur##--suppress-cc=}"
1429 return
1431 --smtp-encryption=*)
1432 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1433 return
1435 --*)
1436 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1437 --compose --confirm= --dry-run --envelope-sender
1438 --from --identity
1439 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1440 --no-suppress-from --no-thread --quiet
1441 --signed-off-by-cc --smtp-pass --smtp-server
1442 --smtp-server-port --smtp-encryption= --smtp-user
1443 --subject --suppress-cc= --suppress-from --thread --to
1444 --validate --no-validate"
1445 return
1447 esac
1448 COMPREPLY=()
1451 _git_stage ()
1453 _git_add
1456 __git_config_get_set_variables ()
1458 local prevword word config_file= c=$COMP_CWORD
1459 while [ $c -gt 1 ]; do
1460 word="${COMP_WORDS[c]}"
1461 case "$word" in
1462 --global|--system|--file=*)
1463 config_file="$word"
1464 break
1466 -f|--file)
1467 config_file="$word $prevword"
1468 break
1470 esac
1471 prevword=$word
1472 c=$((--c))
1473 done
1475 git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
1476 while read line
1478 case "$line" in
1479 *.*=*)
1480 echo "${line/=*/}"
1482 esac
1483 done
1486 _git_config ()
1488 local cur="${COMP_WORDS[COMP_CWORD]}"
1489 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1490 case "$prv" in
1491 branch.*.remote)
1492 __gitcomp "$(__git_remotes)"
1493 return
1495 branch.*.merge)
1496 __gitcomp "$(__git_refs)"
1497 return
1499 remote.*.fetch)
1500 local remote="${prv#remote.}"
1501 remote="${remote%.fetch}"
1502 __gitcomp "$(__git_refs_remotes "$remote")"
1503 return
1505 remote.*.push)
1506 local remote="${prv#remote.}"
1507 remote="${remote%.push}"
1508 __gitcomp "$(git --git-dir="$(__gitdir)" \
1509 for-each-ref --format='%(refname):%(refname)' \
1510 refs/heads)"
1511 return
1513 pull.twohead|pull.octopus)
1514 __git_compute_merge_strategies
1515 __gitcomp "$__git_merge_strategies"
1516 return
1518 color.branch|color.diff|color.interactive|\
1519 color.showbranch|color.status|color.ui)
1520 __gitcomp "always never auto"
1521 return
1523 color.pager)
1524 __gitcomp "false true"
1525 return
1527 color.*.*)
1528 __gitcomp "
1529 normal black red green yellow blue magenta cyan white
1530 bold dim ul blink reverse
1532 return
1534 help.format)
1535 __gitcomp "man info web html"
1536 return
1538 log.date)
1539 __gitcomp "$__git_log_date_formats"
1540 return
1542 sendemail.aliasesfiletype)
1543 __gitcomp "mutt mailrc pine elm gnus"
1544 return
1546 sendemail.confirm)
1547 __gitcomp "$__git_send_email_confirm_options"
1548 return
1550 sendemail.suppresscc)
1551 __gitcomp "$__git_send_email_suppresscc_options"
1552 return
1554 --get|--get-all|--unset|--unset-all)
1555 __gitcomp "$(__git_config_get_set_variables)"
1556 return
1558 *.*)
1559 COMPREPLY=()
1560 return
1562 esac
1563 case "$cur" in
1564 --*)
1565 __gitcomp "
1566 --global --system --file=
1567 --list --replace-all
1568 --get --get-all --get-regexp
1569 --add --unset --unset-all
1570 --remove-section --rename-section
1572 return
1574 branch.*.*)
1575 local pfx="${cur%.*}."
1576 cur="${cur##*.}"
1577 __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur"
1578 return
1580 branch.*)
1581 local pfx="${cur%.*}."
1582 cur="${cur#*.}"
1583 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1584 return
1586 guitool.*.*)
1587 local pfx="${cur%.*}."
1588 cur="${cur##*.}"
1589 __gitcomp "
1590 argprompt cmd confirm needsfile noconsole norescan
1591 prompt revprompt revunmerged title
1592 " "$pfx" "$cur"
1593 return
1595 difftool.*.*)
1596 local pfx="${cur%.*}."
1597 cur="${cur##*.}"
1598 __gitcomp "cmd path" "$pfx" "$cur"
1599 return
1601 man.*.*)
1602 local pfx="${cur%.*}."
1603 cur="${cur##*.}"
1604 __gitcomp "cmd path" "$pfx" "$cur"
1605 return
1607 mergetool.*.*)
1608 local pfx="${cur%.*}."
1609 cur="${cur##*.}"
1610 __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
1611 return
1613 pager.*)
1614 local pfx="${cur%.*}."
1615 cur="${cur#*.}"
1616 __git_compute_all_commands
1617 __gitcomp "$__git_all_commands" "$pfx" "$cur"
1618 return
1620 remote.*.*)
1621 local pfx="${cur%.*}."
1622 cur="${cur##*.}"
1623 __gitcomp "
1624 url proxy fetch push mirror skipDefaultUpdate
1625 receivepack uploadpack tagopt pushurl
1626 " "$pfx" "$cur"
1627 return
1629 remote.*)
1630 local pfx="${cur%.*}."
1631 cur="${cur#*.}"
1632 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1633 return
1635 url.*.*)
1636 local pfx="${cur%.*}."
1637 cur="${cur##*.}"
1638 __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur"
1639 return
1641 esac
1642 __gitcomp "
1643 add.ignore-errors
1644 alias.
1645 apply.ignorewhitespace
1646 apply.whitespace
1647 branch.autosetupmerge
1648 branch.autosetuprebase
1649 clean.requireForce
1650 color.branch
1651 color.branch.current
1652 color.branch.local
1653 color.branch.plain
1654 color.branch.remote
1655 color.diff
1656 color.diff.commit
1657 color.diff.frag
1658 color.diff.meta
1659 color.diff.new
1660 color.diff.old
1661 color.diff.plain
1662 color.diff.whitespace
1663 color.grep
1664 color.grep.external
1665 color.grep.match
1666 color.interactive
1667 color.interactive.header
1668 color.interactive.help
1669 color.interactive.prompt
1670 color.pager
1671 color.showbranch
1672 color.status
1673 color.status.added
1674 color.status.changed
1675 color.status.header
1676 color.status.nobranch
1677 color.status.untracked
1678 color.status.updated
1679 color.ui
1680 commit.template
1681 core.autocrlf
1682 core.bare
1683 core.compression
1684 core.createObject
1685 core.deltaBaseCacheLimit
1686 core.editor
1687 core.excludesfile
1688 core.fileMode
1689 core.fsyncobjectfiles
1690 core.gitProxy
1691 core.ignoreCygwinFSTricks
1692 core.ignoreStat
1693 core.logAllRefUpdates
1694 core.loosecompression
1695 core.packedGitLimit
1696 core.packedGitWindowSize
1697 core.pager
1698 core.preferSymlinkRefs
1699 core.preloadindex
1700 core.quotepath
1701 core.repositoryFormatVersion
1702 core.safecrlf
1703 core.sharedRepository
1704 core.symlinks
1705 core.trustctime
1706 core.warnAmbiguousRefs
1707 core.whitespace
1708 core.worktree
1709 diff.autorefreshindex
1710 diff.external
1711 diff.mnemonicprefix
1712 diff.renameLimit
1713 diff.renameLimit.
1714 diff.renames
1715 diff.suppressBlankEmpty
1716 diff.tool
1717 diff.wordRegex
1718 difftool.
1719 difftool.prompt
1720 fetch.unpackLimit
1721 format.attach
1722 format.cc
1723 format.headers
1724 format.numbered
1725 format.pretty
1726 format.signoff
1727 format.subjectprefix
1728 format.suffix
1729 format.thread
1730 gc.aggressiveWindow
1731 gc.auto
1732 gc.autopacklimit
1733 gc.packrefs
1734 gc.pruneexpire
1735 gc.reflogexpire
1736 gc.reflogexpireunreachable
1737 gc.rerereresolved
1738 gc.rerereunresolved
1739 gitcvs.allbinary
1740 gitcvs.commitmsgannotation
1741 gitcvs.dbTableNamePrefix
1742 gitcvs.dbdriver
1743 gitcvs.dbname
1744 gitcvs.dbpass
1745 gitcvs.dbuser
1746 gitcvs.enabled
1747 gitcvs.logfile
1748 gitcvs.usecrlfattr
1749 guitool.
1750 gui.blamehistoryctx
1751 gui.commitmsgwidth
1752 gui.copyblamethreshold
1753 gui.diffcontext
1754 gui.encoding
1755 gui.fastcopyblame
1756 gui.matchtrackingbranch
1757 gui.newbranchtemplate
1758 gui.pruneduringfetch
1759 gui.spellingdictionary
1760 gui.trustmtime
1761 help.autocorrect
1762 help.browser
1763 help.format
1764 http.lowSpeedLimit
1765 http.lowSpeedTime
1766 http.maxRequests
1767 http.noEPSV
1768 http.proxy
1769 http.sslCAInfo
1770 http.sslCAPath
1771 http.sslCert
1772 http.sslKey
1773 http.sslVerify
1774 i18n.commitEncoding
1775 i18n.logOutputEncoding
1776 imap.folder
1777 imap.host
1778 imap.pass
1779 imap.port
1780 imap.preformattedHTML
1781 imap.sslverify
1782 imap.tunnel
1783 imap.user
1784 instaweb.browser
1785 instaweb.httpd
1786 instaweb.local
1787 instaweb.modulepath
1788 instaweb.port
1789 interactive.singlekey
1790 log.date
1791 log.showroot
1792 mailmap.file
1793 man.
1794 man.viewer
1795 merge.conflictstyle
1796 merge.log
1797 merge.renameLimit
1798 merge.stat
1799 merge.tool
1800 merge.verbosity
1801 mergetool.
1802 mergetool.keepBackup
1803 mergetool.prompt
1804 pack.compression
1805 pack.deltaCacheLimit
1806 pack.deltaCacheSize
1807 pack.depth
1808 pack.indexVersion
1809 pack.packSizeLimit
1810 pack.threads
1811 pack.window
1812 pack.windowMemory
1813 pager.
1814 pull.octopus
1815 pull.twohead
1816 push.default
1817 rebase.stat
1818 receive.denyCurrentBranch
1819 receive.denyDeletes
1820 receive.denyNonFastForwards
1821 receive.fsckObjects
1822 receive.unpackLimit
1823 repack.usedeltabaseoffset
1824 rerere.autoupdate
1825 rerere.enabled
1826 sendemail.aliasesfile
1827 sendemail.aliasesfiletype
1828 sendemail.bcc
1829 sendemail.cc
1830 sendemail.cccmd
1831 sendemail.chainreplyto
1832 sendemail.confirm
1833 sendemail.envelopesender
1834 sendemail.multiedit
1835 sendemail.signedoffbycc
1836 sendemail.smtpencryption
1837 sendemail.smtppass
1838 sendemail.smtpserver
1839 sendemail.smtpserverport
1840 sendemail.smtpuser
1841 sendemail.suppresscc
1842 sendemail.suppressfrom
1843 sendemail.thread
1844 sendemail.to
1845 sendemail.validate
1846 showbranch.default
1847 status.relativePaths
1848 status.showUntrackedFiles
1849 tar.umask
1850 transfer.unpackLimit
1851 url.
1852 user.email
1853 user.name
1854 user.signingkey
1855 web.browser
1856 branch. remote.
1860 _git_remote ()
1862 local subcommands="add rename rm show prune update set-head"
1863 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1864 if [ -z "$subcommand" ]; then
1865 __gitcomp "$subcommands"
1866 return
1869 case "$subcommand" in
1870 rename|rm|show|prune)
1871 __gitcomp "$(__git_remotes)"
1873 update)
1874 local i c='' IFS=$'\n'
1875 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
1876 i="${i#remotes.}"
1877 c="$c ${i/ */}"
1878 done
1879 __gitcomp "$c"
1882 COMPREPLY=()
1884 esac
1887 _git_replace ()
1889 __gitcomp "$(__git_refs)"
1892 _git_reset ()
1894 __git_has_doubledash && return
1896 local cur="${COMP_WORDS[COMP_CWORD]}"
1897 case "$cur" in
1898 --*)
1899 __gitcomp "--merge --mixed --hard --soft --patch"
1900 return
1902 esac
1903 __gitcomp "$(__git_refs)"
1906 _git_revert ()
1908 local cur="${COMP_WORDS[COMP_CWORD]}"
1909 case "$cur" in
1910 --*)
1911 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1912 return
1914 esac
1915 __gitcomp "$(__git_refs)"
1918 _git_rm ()
1920 __git_has_doubledash && return
1922 local cur="${COMP_WORDS[COMP_CWORD]}"
1923 case "$cur" in
1924 --*)
1925 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1926 return
1928 esac
1929 COMPREPLY=()
1932 _git_shortlog ()
1934 __git_has_doubledash && return
1936 local cur="${COMP_WORDS[COMP_CWORD]}"
1937 case "$cur" in
1938 --*)
1939 __gitcomp "
1940 $__git_log_common_options
1941 $__git_log_shortlog_options
1942 --numbered --summary
1944 return
1946 esac
1947 __git_complete_revlist
1950 _git_show ()
1952 __git_has_doubledash && return
1954 local cur="${COMP_WORDS[COMP_CWORD]}"
1955 case "$cur" in
1956 --pretty=*)
1957 __gitcomp "$__git_log_pretty_formats
1958 " "" "${cur##--pretty=}"
1959 return
1961 --format=*)
1962 __gitcomp "$__git_log_pretty_formats
1963 " "" "${cur##--format=}"
1964 return
1966 --*)
1967 __gitcomp "--pretty= --format= --abbrev-commit --oneline
1968 $__git_diff_common_options
1970 return
1972 esac
1973 __git_complete_file
1976 _git_show_branch ()
1978 local cur="${COMP_WORDS[COMP_CWORD]}"
1979 case "$cur" in
1980 --*)
1981 __gitcomp "
1982 --all --remotes --topo-order --current --more=
1983 --list --independent --merge-base --no-name
1984 --color --no-color
1985 --sha1-name --sparse --topics --reflog
1987 return
1989 esac
1990 __git_complete_revlist
1993 _git_stash ()
1995 local cur="${COMP_WORDS[COMP_CWORD]}"
1996 local save_opts='--keep-index --no-keep-index --quiet --patch'
1997 local subcommands='save list show apply clear drop pop create branch'
1998 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1999 if [ -z "$subcommand" ]; then
2000 case "$cur" in
2001 --*)
2002 __gitcomp "$save_opts"
2005 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
2006 __gitcomp "$subcommands"
2007 else
2008 COMPREPLY=()
2011 esac
2012 else
2013 case "$subcommand,$cur" in
2014 save,--*)
2015 __gitcomp "$save_opts"
2017 apply,--*|pop,--*)
2018 __gitcomp "--index --quiet"
2020 show,--*|drop,--*|branch,--*)
2021 COMPREPLY=()
2023 show,*|apply,*|drop,*|pop,*|branch,*)
2024 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
2025 | sed -n -e 's/:.*//p')"
2028 COMPREPLY=()
2030 esac
2034 _git_submodule ()
2036 __git_has_doubledash && return
2038 local subcommands="add status init update summary foreach sync"
2039 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
2040 local cur="${COMP_WORDS[COMP_CWORD]}"
2041 case "$cur" in
2042 --*)
2043 __gitcomp "--quiet --cached"
2046 __gitcomp "$subcommands"
2048 esac
2049 return
2053 _git_svn ()
2055 local subcommands="
2056 init fetch clone rebase dcommit log find-rev
2057 set-tree commit-diff info create-ignore propget
2058 proplist show-ignore show-externals branch tag blame
2059 migrate mkdirs reset gc
2061 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2062 if [ -z "$subcommand" ]; then
2063 __gitcomp "$subcommands"
2064 else
2065 local remote_opts="--username= --config-dir= --no-auth-cache"
2066 local fc_opts="
2067 --follow-parent --authors-file= --repack=
2068 --no-metadata --use-svm-props --use-svnsync-props
2069 --log-window-size= --no-checkout --quiet
2070 --repack-flags --use-log-author --localtime
2071 --ignore-paths= $remote_opts
2073 local init_opts="
2074 --template= --shared= --trunk= --tags=
2075 --branches= --stdlayout --minimize-url
2076 --no-metadata --use-svm-props --use-svnsync-props
2077 --rewrite-root= --prefix= --use-log-author
2078 --add-author-from $remote_opts
2080 local cmt_opts="
2081 --edit --rmdir --find-copies-harder --copy-similarity=
2084 local cur="${COMP_WORDS[COMP_CWORD]}"
2085 case "$subcommand,$cur" in
2086 fetch,--*)
2087 __gitcomp "--revision= --fetch-all $fc_opts"
2089 clone,--*)
2090 __gitcomp "--revision= $fc_opts $init_opts"
2092 init,--*)
2093 __gitcomp "$init_opts"
2095 dcommit,--*)
2096 __gitcomp "
2097 --merge --strategy= --verbose --dry-run
2098 --fetch-all --no-rebase --commit-url
2099 --revision $cmt_opts $fc_opts
2102 set-tree,--*)
2103 __gitcomp "--stdin $cmt_opts $fc_opts"
2105 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
2106 show-externals,--*|mkdirs,--*)
2107 __gitcomp "--revision="
2109 log,--*)
2110 __gitcomp "
2111 --limit= --revision= --verbose --incremental
2112 --oneline --show-commit --non-recursive
2113 --authors-file= --color
2116 rebase,--*)
2117 __gitcomp "
2118 --merge --verbose --strategy= --local
2119 --fetch-all --dry-run $fc_opts
2122 commit-diff,--*)
2123 __gitcomp "--message= --file= --revision= $cmt_opts"
2125 info,--*)
2126 __gitcomp "--url"
2128 branch,--*)
2129 __gitcomp "--dry-run --message --tag"
2131 tag,--*)
2132 __gitcomp "--dry-run --message"
2134 blame,--*)
2135 __gitcomp "--git-format"
2137 migrate,--*)
2138 __gitcomp "
2139 --config-dir= --ignore-paths= --minimize
2140 --no-auth-cache --username=
2143 reset,--*)
2144 __gitcomp "--revision= --parent"
2147 COMPREPLY=()
2149 esac
2153 _git_tag ()
2155 local i c=1 f=0
2156 while [ $c -lt $COMP_CWORD ]; do
2157 i="${COMP_WORDS[c]}"
2158 case "$i" in
2159 -d|-v)
2160 __gitcomp "$(__git_tags)"
2161 return
2166 esac
2167 c=$((++c))
2168 done
2170 case "${COMP_WORDS[COMP_CWORD-1]}" in
2171 -m|-F)
2172 COMPREPLY=()
2174 -*|tag)
2175 if [ $f = 1 ]; then
2176 __gitcomp "$(__git_tags)"
2177 else
2178 COMPREPLY=()
2182 __gitcomp "$(__git_refs)"
2184 esac
2187 _git_whatchanged ()
2189 _git_log
2192 _git ()
2194 local i c=1 command __git_dir
2196 while [ $c -lt $COMP_CWORD ]; do
2197 i="${COMP_WORDS[c]}"
2198 case "$i" in
2199 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2200 --bare) __git_dir="." ;;
2201 --version|-p|--paginate) ;;
2202 --help) command="help"; break ;;
2203 *) command="$i"; break ;;
2204 esac
2205 c=$((++c))
2206 done
2208 if [ -z "$command" ]; then
2209 case "${COMP_WORDS[COMP_CWORD]}" in
2210 --*) __gitcomp "
2211 --paginate
2212 --no-pager
2213 --git-dir=
2214 --bare
2215 --version
2216 --exec-path
2217 --html-path
2218 --work-tree=
2219 --help
2222 *) __git_compute_porcelain_commands
2223 __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
2224 esac
2225 return
2228 local completion_func="_git_${command//-/_}"
2229 declare -F $completion_func >/dev/null && $completion_func && return
2231 local expansion=$(__git_aliased_command "$command")
2232 if [ -n "$expansion" ]; then
2233 completion_func="_git_${expansion//-/_}"
2234 declare -F $completion_func >/dev/null && $completion_func
2238 _gitk ()
2240 __git_has_doubledash && return
2242 local cur="${COMP_WORDS[COMP_CWORD]}"
2243 local g="$(__gitdir)"
2244 local merge=""
2245 if [ -f "$g/MERGE_HEAD" ]; then
2246 merge="--merge"
2248 case "$cur" in
2249 --*)
2250 __gitcomp "
2251 $__git_log_common_options
2252 $__git_log_gitk_options
2253 $merge
2255 return
2257 esac
2258 __git_complete_revlist
2261 complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \
2262 || complete -o default -o nospace -F _git git
2263 complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \
2264 || complete -o default -o nospace -F _gitk gitk
2266 # The following are necessary only for Cygwin, and only are needed
2267 # when the user has tab-completed the executable name and consequently
2268 # included the '.exe' suffix.
2270 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2271 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
2272 || complete -o default -o nospace -F _git git.exe