Merge branch 'ml/maint-grep-doc' into maint
[tgit.git] / contrib / completion / git-completion.bash
blobfe93747c93a7b65f4657b56ef3962d64b48e3eb7
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 if [ "${word##-*}" ]; then
629 echo $word
630 return
632 done
635 # __git_find_on_cmdline requires 1 argument
636 __git_find_on_cmdline ()
638 local word subcommand c=1
640 while [ $c -lt $COMP_CWORD ]; do
641 word="${COMP_WORDS[c]}"
642 for subcommand in $1; do
643 if [ "$subcommand" = "$word" ]; then
644 echo "$subcommand"
645 return
647 done
648 c=$((++c))
649 done
652 __git_has_doubledash ()
654 local c=1
655 while [ $c -lt $COMP_CWORD ]; do
656 if [ "--" = "${COMP_WORDS[c]}" ]; then
657 return 0
659 c=$((++c))
660 done
661 return 1
664 __git_whitespacelist="nowarn warn error error-all fix"
666 _git_am ()
668 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
669 if [ -d "$dir"/rebase-apply ]; then
670 __gitcomp "--skip --continue --resolved --abort"
671 return
673 case "$cur" in
674 --whitespace=*)
675 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
676 return
678 --*)
679 __gitcomp "
680 --3way --committer-date-is-author-date --ignore-date
681 --ignore-whitespace --ignore-space-change
682 --interactive --keep --no-utf8 --signoff --utf8
683 --whitespace= --scissors
685 return
686 esac
687 COMPREPLY=()
690 _git_apply ()
692 local cur="${COMP_WORDS[COMP_CWORD]}"
693 case "$cur" in
694 --whitespace=*)
695 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
696 return
698 --*)
699 __gitcomp "
700 --stat --numstat --summary --check --index
701 --cached --index-info --reverse --reject --unidiff-zero
702 --apply --no-add --exclude=
703 --ignore-whitespace --ignore-space-change
704 --whitespace= --inaccurate-eof --verbose
706 return
707 esac
708 COMPREPLY=()
711 _git_add ()
713 __git_has_doubledash && return
715 local cur="${COMP_WORDS[COMP_CWORD]}"
716 case "$cur" in
717 --*)
718 __gitcomp "
719 --interactive --refresh --patch --update --dry-run
720 --ignore-errors --intent-to-add
722 return
723 esac
724 COMPREPLY=()
727 _git_archive ()
729 local cur="${COMP_WORDS[COMP_CWORD]}"
730 case "$cur" in
731 --format=*)
732 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
733 return
735 --remote=*)
736 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
737 return
739 --*)
740 __gitcomp "
741 --format= --list --verbose
742 --prefix= --remote= --exec=
744 return
746 esac
747 __git_complete_file
750 _git_bisect ()
752 __git_has_doubledash && return
754 local subcommands="start bad good skip reset visualize replay log run"
755 local subcommand="$(__git_find_on_cmdline "$subcommands")"
756 if [ -z "$subcommand" ]; then
757 __gitcomp "$subcommands"
758 return
761 case "$subcommand" in
762 bad|good|reset|skip)
763 __gitcomp "$(__git_refs)"
766 COMPREPLY=()
768 esac
771 _git_branch ()
773 local i c=1 only_local_ref="n" has_r="n"
775 while [ $c -lt $COMP_CWORD ]; do
776 i="${COMP_WORDS[c]}"
777 case "$i" in
778 -d|-m) only_local_ref="y" ;;
779 -r) has_r="y" ;;
780 esac
781 c=$((++c))
782 done
784 case "${COMP_WORDS[COMP_CWORD]}" in
785 --*)
786 __gitcomp "
787 --color --no-color --verbose --abbrev= --no-abbrev
788 --track --no-track --contains --merged --no-merged
792 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
793 __gitcomp "$(__git_heads)"
794 else
795 __gitcomp "$(__git_refs)"
798 esac
801 _git_bundle ()
803 local cmd="${COMP_WORDS[2]}"
804 case "$COMP_CWORD" in
806 __gitcomp "create list-heads verify unbundle"
809 # looking for a file
812 case "$cmd" in
813 create)
814 __git_complete_revlist
816 esac
818 esac
821 _git_checkout ()
823 __git_has_doubledash && return
825 local cur="${COMP_WORDS[COMP_CWORD]}"
826 case "$cur" in
827 --conflict=*)
828 __gitcomp "diff3 merge" "" "${cur##--conflict=}"
830 --*)
831 __gitcomp "
832 --quiet --ours --theirs --track --no-track --merge
833 --conflict= --patch
837 __gitcomp "$(__git_refs)"
839 esac
842 _git_cherry ()
844 __gitcomp "$(__git_refs)"
847 _git_cherry_pick ()
849 local cur="${COMP_WORDS[COMP_CWORD]}"
850 case "$cur" in
851 --*)
852 __gitcomp "--edit --no-commit"
855 __gitcomp "$(__git_refs)"
857 esac
860 _git_clean ()
862 __git_has_doubledash && return
864 local cur="${COMP_WORDS[COMP_CWORD]}"
865 case "$cur" in
866 --*)
867 __gitcomp "--dry-run --quiet"
868 return
870 esac
871 COMPREPLY=()
874 _git_clone ()
876 local cur="${COMP_WORDS[COMP_CWORD]}"
877 case "$cur" in
878 --*)
879 __gitcomp "
880 --local
881 --no-hardlinks
882 --shared
883 --reference
884 --quiet
885 --no-checkout
886 --bare
887 --mirror
888 --origin
889 --upload-pack
890 --template=
891 --depth
893 return
895 esac
896 COMPREPLY=()
899 _git_commit ()
901 __git_has_doubledash && return
903 local cur="${COMP_WORDS[COMP_CWORD]}"
904 case "$cur" in
905 --cleanup=*)
906 __gitcomp "default strip verbatim whitespace
907 " "" "${cur##--cleanup=}"
908 return
910 --reuse-message=*)
911 __gitcomp "$(__git_refs)" "" "${cur##--reuse-message=}"
912 return
914 --reedit-message=*)
915 __gitcomp "$(__git_refs)" "" "${cur##--reedit-message=}"
916 return
918 --untracked-files=*)
919 __gitcomp "all no normal" "" "${cur##--untracked-files=}"
920 return
922 --*)
923 __gitcomp "
924 --all --author= --signoff --verify --no-verify
925 --edit --amend --include --only --interactive
926 --dry-run --reuse-message= --reedit-message=
927 --reset-author --file= --message= --template=
928 --cleanup= --untracked-files --untracked-files=
929 --verbose --quiet
931 return
932 esac
933 COMPREPLY=()
936 _git_describe ()
938 local cur="${COMP_WORDS[COMP_CWORD]}"
939 case "$cur" in
940 --*)
941 __gitcomp "
942 --all --tags --contains --abbrev= --candidates=
943 --exact-match --debug --long --match --always
945 return
946 esac
947 __gitcomp "$(__git_refs)"
950 __git_diff_common_options="--stat --numstat --shortstat --summary
951 --patch-with-stat --name-only --name-status --color
952 --no-color --color-words --no-renames --check
953 --full-index --binary --abbrev --diff-filter=
954 --find-copies-harder
955 --text --ignore-space-at-eol --ignore-space-change
956 --ignore-all-space --exit-code --quiet --ext-diff
957 --no-ext-diff
958 --no-prefix --src-prefix= --dst-prefix=
959 --inter-hunk-context=
960 --patience
961 --raw
962 --dirstat --dirstat= --dirstat-by-file
963 --dirstat-by-file= --cumulative
966 _git_diff ()
968 __git_has_doubledash && return
970 local cur="${COMP_WORDS[COMP_CWORD]}"
971 case "$cur" in
972 --*)
973 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
974 --base --ours --theirs
975 $__git_diff_common_options
977 return
979 esac
980 __git_complete_file
983 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
984 tkdiff vimdiff gvimdiff xxdiff araxis p4merge
987 _git_difftool ()
989 __git_has_doubledash && return
991 local cur="${COMP_WORDS[COMP_CWORD]}"
992 case "$cur" in
993 --tool=*)
994 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
995 return
997 --*)
998 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
999 --base --ours --theirs
1000 --no-renames --diff-filter= --find-copies-harder
1001 --relative --ignore-submodules
1002 --tool="
1003 return
1005 esac
1006 __git_complete_file
1009 __git_fetch_options="
1010 --quiet --verbose --append --upload-pack --force --keep --depth=
1011 --tags --no-tags --all --prune --dry-run
1014 _git_fetch ()
1016 local cur="${COMP_WORDS[COMP_CWORD]}"
1017 case "$cur" in
1018 --*)
1019 __gitcomp "$__git_fetch_options"
1020 return
1022 esac
1023 __git_complete_remote_or_refspec
1026 _git_format_patch ()
1028 local cur="${COMP_WORDS[COMP_CWORD]}"
1029 case "$cur" in
1030 --thread=*)
1031 __gitcomp "
1032 deep shallow
1033 " "" "${cur##--thread=}"
1034 return
1036 --*)
1037 __gitcomp "
1038 --stdout --attach --no-attach --thread --thread=
1039 --output-directory
1040 --numbered --start-number
1041 --numbered-files
1042 --keep-subject
1043 --signoff
1044 --in-reply-to= --cc=
1045 --full-index --binary
1046 --not --all
1047 --cover-letter
1048 --no-prefix --src-prefix= --dst-prefix=
1049 --inline --suffix= --ignore-if-in-upstream
1050 --subject-prefix=
1052 return
1054 esac
1055 __git_complete_revlist
1058 _git_fsck ()
1060 local cur="${COMP_WORDS[COMP_CWORD]}"
1061 case "$cur" in
1062 --*)
1063 __gitcomp "
1064 --tags --root --unreachable --cache --no-reflogs --full
1065 --strict --verbose --lost-found
1067 return
1069 esac
1070 COMPREPLY=()
1073 _git_gc ()
1075 local cur="${COMP_WORDS[COMP_CWORD]}"
1076 case "$cur" in
1077 --*)
1078 __gitcomp "--prune --aggressive"
1079 return
1081 esac
1082 COMPREPLY=()
1085 _git_grep ()
1087 __git_has_doubledash && return
1089 local cur="${COMP_WORDS[COMP_CWORD]}"
1090 case "$cur" in
1091 --*)
1092 __gitcomp "
1093 --cached
1094 --text --ignore-case --word-regexp --invert-match
1095 --full-name
1096 --extended-regexp --basic-regexp --fixed-strings
1097 --files-with-matches --name-only
1098 --files-without-match
1099 --max-depth
1100 --count
1101 --and --or --not --all-match
1103 return
1105 esac
1107 __gitcomp "$(__git_refs)"
1110 _git_help ()
1112 local cur="${COMP_WORDS[COMP_CWORD]}"
1113 case "$cur" in
1114 --*)
1115 __gitcomp "--all --info --man --web"
1116 return
1118 esac
1119 __git_compute_all_commands
1120 __gitcomp "$__git_all_commands
1121 attributes cli core-tutorial cvs-migration
1122 diffcore gitk glossary hooks ignore modules
1123 repository-layout tutorial tutorial-2
1124 workflows
1128 _git_init ()
1130 local cur="${COMP_WORDS[COMP_CWORD]}"
1131 case "$cur" in
1132 --shared=*)
1133 __gitcomp "
1134 false true umask group all world everybody
1135 " "" "${cur##--shared=}"
1136 return
1138 --*)
1139 __gitcomp "--quiet --bare --template= --shared --shared="
1140 return
1142 esac
1143 COMPREPLY=()
1146 _git_ls_files ()
1148 __git_has_doubledash && return
1150 local cur="${COMP_WORDS[COMP_CWORD]}"
1151 case "$cur" in
1152 --*)
1153 __gitcomp "--cached --deleted --modified --others --ignored
1154 --stage --directory --no-empty-directory --unmerged
1155 --killed --exclude= --exclude-from=
1156 --exclude-per-directory= --exclude-standard
1157 --error-unmatch --with-tree= --full-name
1158 --abbrev --ignored --exclude-per-directory
1160 return
1162 esac
1163 COMPREPLY=()
1166 _git_ls_remote ()
1168 __gitcomp "$(__git_remotes)"
1171 _git_ls_tree ()
1173 __git_complete_file
1176 # Options that go well for log, shortlog and gitk
1177 __git_log_common_options="
1178 --not --all
1179 --branches --tags --remotes
1180 --first-parent --merges --no-merges
1181 --max-count=
1182 --max-age= --since= --after=
1183 --min-age= --until= --before=
1185 # Options that go well for log and gitk (not shortlog)
1186 __git_log_gitk_options="
1187 --dense --sparse --full-history
1188 --simplify-merges --simplify-by-decoration
1189 --left-right
1191 # Options that go well for log and shortlog (not gitk)
1192 __git_log_shortlog_options="
1193 --author= --committer= --grep=
1194 --all-match
1197 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1198 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1200 _git_log ()
1202 __git_has_doubledash && return
1204 local cur="${COMP_WORDS[COMP_CWORD]}"
1205 local g="$(git rev-parse --git-dir 2>/dev/null)"
1206 local merge=""
1207 if [ -f "$g/MERGE_HEAD" ]; then
1208 merge="--merge"
1210 case "$cur" in
1211 --pretty=*)
1212 __gitcomp "$__git_log_pretty_formats
1213 " "" "${cur##--pretty=}"
1214 return
1216 --format=*)
1217 __gitcomp "$__git_log_pretty_formats
1218 " "" "${cur##--format=}"
1219 return
1221 --date=*)
1222 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1223 return
1225 --decorate=*)
1226 __gitcomp "long short" "" "${cur##--decorate=}"
1227 return
1229 --*)
1230 __gitcomp "
1231 $__git_log_common_options
1232 $__git_log_shortlog_options
1233 $__git_log_gitk_options
1234 --root --topo-order --date-order --reverse
1235 --follow --full-diff
1236 --abbrev-commit --abbrev=
1237 --relative-date --date=
1238 --pretty= --format= --oneline
1239 --cherry-pick
1240 --graph
1241 --decorate --decorate=
1242 --walk-reflogs
1243 --parents --children
1244 $merge
1245 $__git_diff_common_options
1246 --pickaxe-all --pickaxe-regex
1248 return
1250 esac
1251 __git_complete_revlist
1254 __git_merge_options="
1255 --no-commit --no-stat --log --no-log --squash --strategy
1256 --commit --stat --no-squash --ff --no-ff --ff-only
1259 _git_merge ()
1261 __git_complete_strategy && return
1263 local cur="${COMP_WORDS[COMP_CWORD]}"
1264 case "$cur" in
1265 --*)
1266 __gitcomp "$__git_merge_options"
1267 return
1268 esac
1269 __gitcomp "$(__git_refs)"
1272 _git_mergetool ()
1274 local cur="${COMP_WORDS[COMP_CWORD]}"
1275 case "$cur" in
1276 --tool=*)
1277 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1278 return
1280 --*)
1281 __gitcomp "--tool="
1282 return
1284 esac
1285 COMPREPLY=()
1288 _git_merge_base ()
1290 __gitcomp "$(__git_refs)"
1293 _git_mv ()
1295 local cur="${COMP_WORDS[COMP_CWORD]}"
1296 case "$cur" in
1297 --*)
1298 __gitcomp "--dry-run"
1299 return
1301 esac
1302 COMPREPLY=()
1305 _git_name_rev ()
1307 __gitcomp "--tags --all --stdin"
1310 _git_notes ()
1312 local subcommands="edit show"
1313 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
1314 __gitcomp "$subcommands"
1315 return
1318 case "${COMP_WORDS[COMP_CWORD-1]}" in
1319 -m|-F)
1320 COMPREPLY=()
1323 __gitcomp "$(__git_refs)"
1325 esac
1328 _git_pull ()
1330 __git_complete_strategy && return
1332 local cur="${COMP_WORDS[COMP_CWORD]}"
1333 case "$cur" in
1334 --*)
1335 __gitcomp "
1336 --rebase --no-rebase
1337 $__git_merge_options
1338 $__git_fetch_options
1340 return
1342 esac
1343 __git_complete_remote_or_refspec
1346 _git_push ()
1348 local cur="${COMP_WORDS[COMP_CWORD]}"
1349 case "${COMP_WORDS[COMP_CWORD-1]}" in
1350 --repo)
1351 __gitcomp "$(__git_remotes)"
1352 return
1353 esac
1354 case "$cur" in
1355 --repo=*)
1356 __gitcomp "$(__git_remotes)" "" "${cur##--repo=}"
1357 return
1359 --*)
1360 __gitcomp "
1361 --all --mirror --tags --dry-run --force --verbose
1362 --receive-pack= --repo=
1364 return
1366 esac
1367 __git_complete_remote_or_refspec
1370 _git_rebase ()
1372 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1373 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1374 __gitcomp "--continue --skip --abort"
1375 return
1377 __git_complete_strategy && return
1378 case "$cur" in
1379 --whitespace=*)
1380 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
1381 return
1383 --*)
1384 __gitcomp "
1385 --onto --merge --strategy --interactive
1386 --preserve-merges --stat --no-stat
1387 --committer-date-is-author-date --ignore-date
1388 --ignore-whitespace --whitespace=
1389 --autosquash
1392 return
1393 esac
1394 __gitcomp "$(__git_refs)"
1397 __git_send_email_confirm_options="always never auto cc compose"
1398 __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
1400 _git_send_email ()
1402 local cur="${COMP_WORDS[COMP_CWORD]}"
1403 case "$cur" in
1404 --confirm=*)
1405 __gitcomp "
1406 $__git_send_email_confirm_options
1407 " "" "${cur##--confirm=}"
1408 return
1410 --suppress-cc=*)
1411 __gitcomp "
1412 $__git_send_email_suppresscc_options
1413 " "" "${cur##--suppress-cc=}"
1415 return
1417 --smtp-encryption=*)
1418 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1419 return
1421 --*)
1422 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1423 --compose --confirm= --dry-run --envelope-sender
1424 --from --identity
1425 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1426 --no-suppress-from --no-thread --quiet
1427 --signed-off-by-cc --smtp-pass --smtp-server
1428 --smtp-server-port --smtp-encryption= --smtp-user
1429 --subject --suppress-cc= --suppress-from --thread --to
1430 --validate --no-validate"
1431 return
1433 esac
1434 COMPREPLY=()
1437 __git_config_get_set_variables ()
1439 local prevword word config_file= c=$COMP_CWORD
1440 while [ $c -gt 1 ]; do
1441 word="${COMP_WORDS[c]}"
1442 case "$word" in
1443 --global|--system|--file=*)
1444 config_file="$word"
1445 break
1447 -f|--file)
1448 config_file="$word $prevword"
1449 break
1451 esac
1452 prevword=$word
1453 c=$((--c))
1454 done
1456 git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
1457 while read line
1459 case "$line" in
1460 *.*=*)
1461 echo "${line/=*/}"
1463 esac
1464 done
1467 _git_config ()
1469 local cur="${COMP_WORDS[COMP_CWORD]}"
1470 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1471 case "$prv" in
1472 branch.*.remote)
1473 __gitcomp "$(__git_remotes)"
1474 return
1476 branch.*.merge)
1477 __gitcomp "$(__git_refs)"
1478 return
1480 remote.*.fetch)
1481 local remote="${prv#remote.}"
1482 remote="${remote%.fetch}"
1483 __gitcomp "$(__git_refs_remotes "$remote")"
1484 return
1486 remote.*.push)
1487 local remote="${prv#remote.}"
1488 remote="${remote%.push}"
1489 __gitcomp "$(git --git-dir="$(__gitdir)" \
1490 for-each-ref --format='%(refname):%(refname)' \
1491 refs/heads)"
1492 return
1494 pull.twohead|pull.octopus)
1495 __git_compute_merge_strategies
1496 __gitcomp "$__git_merge_strategies"
1497 return
1499 color.branch|color.diff|color.interactive|\
1500 color.showbranch|color.status|color.ui)
1501 __gitcomp "always never auto"
1502 return
1504 color.pager)
1505 __gitcomp "false true"
1506 return
1508 color.*.*)
1509 __gitcomp "
1510 normal black red green yellow blue magenta cyan white
1511 bold dim ul blink reverse
1513 return
1515 help.format)
1516 __gitcomp "man info web html"
1517 return
1519 log.date)
1520 __gitcomp "$__git_log_date_formats"
1521 return
1523 sendemail.aliasesfiletype)
1524 __gitcomp "mutt mailrc pine elm gnus"
1525 return
1527 sendemail.confirm)
1528 __gitcomp "$__git_send_email_confirm_options"
1529 return
1531 sendemail.suppresscc)
1532 __gitcomp "$__git_send_email_suppresscc_options"
1533 return
1535 --get|--get-all|--unset|--unset-all)
1536 __gitcomp "$(__git_config_get_set_variables)"
1537 return
1539 *.*)
1540 COMPREPLY=()
1541 return
1543 esac
1544 case "$cur" in
1545 --*)
1546 __gitcomp "
1547 --global --system --file=
1548 --list --replace-all
1549 --get --get-all --get-regexp
1550 --add --unset --unset-all
1551 --remove-section --rename-section
1553 return
1555 branch.*.*)
1556 local pfx="${cur%.*}."
1557 cur="${cur##*.}"
1558 __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur"
1559 return
1561 branch.*)
1562 local pfx="${cur%.*}."
1563 cur="${cur#*.}"
1564 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1565 return
1567 guitool.*.*)
1568 local pfx="${cur%.*}."
1569 cur="${cur##*.}"
1570 __gitcomp "
1571 argprompt cmd confirm needsfile noconsole norescan
1572 prompt revprompt revunmerged title
1573 " "$pfx" "$cur"
1574 return
1576 difftool.*.*)
1577 local pfx="${cur%.*}."
1578 cur="${cur##*.}"
1579 __gitcomp "cmd path" "$pfx" "$cur"
1580 return
1582 man.*.*)
1583 local pfx="${cur%.*}."
1584 cur="${cur##*.}"
1585 __gitcomp "cmd path" "$pfx" "$cur"
1586 return
1588 mergetool.*.*)
1589 local pfx="${cur%.*}."
1590 cur="${cur##*.}"
1591 __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
1592 return
1594 pager.*)
1595 local pfx="${cur%.*}."
1596 cur="${cur#*.}"
1597 __git_compute_all_commands
1598 __gitcomp "$__git_all_commands" "$pfx" "$cur"
1599 return
1601 remote.*.*)
1602 local pfx="${cur%.*}."
1603 cur="${cur##*.}"
1604 __gitcomp "
1605 url proxy fetch push mirror skipDefaultUpdate
1606 receivepack uploadpack tagopt pushurl
1607 " "$pfx" "$cur"
1608 return
1610 remote.*)
1611 local pfx="${cur%.*}."
1612 cur="${cur#*.}"
1613 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1614 return
1616 url.*.*)
1617 local pfx="${cur%.*}."
1618 cur="${cur##*.}"
1619 __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur"
1620 return
1622 esac
1623 __gitcomp "
1624 add.ignore-errors
1625 alias.
1626 apply.ignorewhitespace
1627 apply.whitespace
1628 branch.autosetupmerge
1629 branch.autosetuprebase
1630 clean.requireForce
1631 color.branch
1632 color.branch.current
1633 color.branch.local
1634 color.branch.plain
1635 color.branch.remote
1636 color.diff
1637 color.diff.commit
1638 color.diff.frag
1639 color.diff.meta
1640 color.diff.new
1641 color.diff.old
1642 color.diff.plain
1643 color.diff.whitespace
1644 color.grep
1645 color.grep.external
1646 color.grep.match
1647 color.interactive
1648 color.interactive.header
1649 color.interactive.help
1650 color.interactive.prompt
1651 color.pager
1652 color.showbranch
1653 color.status
1654 color.status.added
1655 color.status.changed
1656 color.status.header
1657 color.status.nobranch
1658 color.status.untracked
1659 color.status.updated
1660 color.ui
1661 commit.template
1662 core.autocrlf
1663 core.bare
1664 core.compression
1665 core.createObject
1666 core.deltaBaseCacheLimit
1667 core.editor
1668 core.excludesfile
1669 core.fileMode
1670 core.fsyncobjectfiles
1671 core.gitProxy
1672 core.ignoreCygwinFSTricks
1673 core.ignoreStat
1674 core.logAllRefUpdates
1675 core.loosecompression
1676 core.packedGitLimit
1677 core.packedGitWindowSize
1678 core.pager
1679 core.preferSymlinkRefs
1680 core.preloadindex
1681 core.quotepath
1682 core.repositoryFormatVersion
1683 core.safecrlf
1684 core.sharedRepository
1685 core.symlinks
1686 core.trustctime
1687 core.warnAmbiguousRefs
1688 core.whitespace
1689 core.worktree
1690 diff.autorefreshindex
1691 diff.external
1692 diff.mnemonicprefix
1693 diff.renameLimit
1694 diff.renameLimit.
1695 diff.renames
1696 diff.suppressBlankEmpty
1697 diff.tool
1698 diff.wordRegex
1699 difftool.
1700 difftool.prompt
1701 fetch.unpackLimit
1702 format.attach
1703 format.cc
1704 format.headers
1705 format.numbered
1706 format.pretty
1707 format.signoff
1708 format.subjectprefix
1709 format.suffix
1710 format.thread
1711 gc.aggressiveWindow
1712 gc.auto
1713 gc.autopacklimit
1714 gc.packrefs
1715 gc.pruneexpire
1716 gc.reflogexpire
1717 gc.reflogexpireunreachable
1718 gc.rerereresolved
1719 gc.rerereunresolved
1720 gitcvs.allbinary
1721 gitcvs.commitmsgannotation
1722 gitcvs.dbTableNamePrefix
1723 gitcvs.dbdriver
1724 gitcvs.dbname
1725 gitcvs.dbpass
1726 gitcvs.dbuser
1727 gitcvs.enabled
1728 gitcvs.logfile
1729 gitcvs.usecrlfattr
1730 guitool.
1731 gui.blamehistoryctx
1732 gui.commitmsgwidth
1733 gui.copyblamethreshold
1734 gui.diffcontext
1735 gui.encoding
1736 gui.fastcopyblame
1737 gui.matchtrackingbranch
1738 gui.newbranchtemplate
1739 gui.pruneduringfetch
1740 gui.spellingdictionary
1741 gui.trustmtime
1742 help.autocorrect
1743 help.browser
1744 help.format
1745 http.lowSpeedLimit
1746 http.lowSpeedTime
1747 http.maxRequests
1748 http.noEPSV
1749 http.proxy
1750 http.sslCAInfo
1751 http.sslCAPath
1752 http.sslCert
1753 http.sslKey
1754 http.sslVerify
1755 i18n.commitEncoding
1756 i18n.logOutputEncoding
1757 imap.folder
1758 imap.host
1759 imap.pass
1760 imap.port
1761 imap.preformattedHTML
1762 imap.sslverify
1763 imap.tunnel
1764 imap.user
1765 instaweb.browser
1766 instaweb.httpd
1767 instaweb.local
1768 instaweb.modulepath
1769 instaweb.port
1770 interactive.singlekey
1771 log.date
1772 log.showroot
1773 mailmap.file
1774 man.
1775 man.viewer
1776 merge.conflictstyle
1777 merge.log
1778 merge.renameLimit
1779 merge.stat
1780 merge.tool
1781 merge.verbosity
1782 mergetool.
1783 mergetool.keepBackup
1784 mergetool.prompt
1785 pack.compression
1786 pack.deltaCacheLimit
1787 pack.deltaCacheSize
1788 pack.depth
1789 pack.indexVersion
1790 pack.packSizeLimit
1791 pack.threads
1792 pack.window
1793 pack.windowMemory
1794 pager.
1795 pull.octopus
1796 pull.twohead
1797 push.default
1798 rebase.stat
1799 receive.denyCurrentBranch
1800 receive.denyDeletes
1801 receive.denyNonFastForwards
1802 receive.fsckObjects
1803 receive.unpackLimit
1804 repack.usedeltabaseoffset
1805 rerere.autoupdate
1806 rerere.enabled
1807 sendemail.aliasesfile
1808 sendemail.aliasesfiletype
1809 sendemail.bcc
1810 sendemail.cc
1811 sendemail.cccmd
1812 sendemail.chainreplyto
1813 sendemail.confirm
1814 sendemail.envelopesender
1815 sendemail.multiedit
1816 sendemail.signedoffbycc
1817 sendemail.smtpencryption
1818 sendemail.smtppass
1819 sendemail.smtpserver
1820 sendemail.smtpserverport
1821 sendemail.smtpuser
1822 sendemail.suppresscc
1823 sendemail.suppressfrom
1824 sendemail.thread
1825 sendemail.to
1826 sendemail.validate
1827 showbranch.default
1828 status.relativePaths
1829 status.showUntrackedFiles
1830 tar.umask
1831 transfer.unpackLimit
1832 url.
1833 user.email
1834 user.name
1835 user.signingkey
1836 web.browser
1837 branch. remote.
1841 _git_remote ()
1843 local subcommands="add rename rm show prune update set-head"
1844 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1845 if [ -z "$subcommand" ]; then
1846 __gitcomp "$subcommands"
1847 return
1850 case "$subcommand" in
1851 rename|rm|show|prune)
1852 __gitcomp "$(__git_remotes)"
1854 update)
1855 local i c='' IFS=$'\n'
1856 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
1857 i="${i#remotes.}"
1858 c="$c ${i/ */}"
1859 done
1860 __gitcomp "$c"
1863 COMPREPLY=()
1865 esac
1868 _git_replace ()
1870 __gitcomp "$(__git_refs)"
1873 _git_reset ()
1875 __git_has_doubledash && return
1877 local cur="${COMP_WORDS[COMP_CWORD]}"
1878 case "$cur" in
1879 --*)
1880 __gitcomp "--merge --mixed --hard --soft --patch"
1881 return
1883 esac
1884 __gitcomp "$(__git_refs)"
1887 _git_revert ()
1889 local cur="${COMP_WORDS[COMP_CWORD]}"
1890 case "$cur" in
1891 --*)
1892 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1893 return
1895 esac
1896 __gitcomp "$(__git_refs)"
1899 _git_rm ()
1901 __git_has_doubledash && return
1903 local cur="${COMP_WORDS[COMP_CWORD]}"
1904 case "$cur" in
1905 --*)
1906 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1907 return
1909 esac
1910 COMPREPLY=()
1913 _git_shortlog ()
1915 __git_has_doubledash && return
1917 local cur="${COMP_WORDS[COMP_CWORD]}"
1918 case "$cur" in
1919 --*)
1920 __gitcomp "
1921 $__git_log_common_options
1922 $__git_log_shortlog_options
1923 --numbered --summary
1925 return
1927 esac
1928 __git_complete_revlist
1931 _git_show ()
1933 __git_has_doubledash && return
1935 local cur="${COMP_WORDS[COMP_CWORD]}"
1936 case "$cur" in
1937 --pretty=*)
1938 __gitcomp "$__git_log_pretty_formats
1939 " "" "${cur##--pretty=}"
1940 return
1942 --format=*)
1943 __gitcomp "$__git_log_pretty_formats
1944 " "" "${cur##--format=}"
1945 return
1947 --*)
1948 __gitcomp "--pretty= --format= --abbrev-commit --oneline
1949 $__git_diff_common_options
1951 return
1953 esac
1954 __git_complete_file
1957 _git_show_branch ()
1959 local cur="${COMP_WORDS[COMP_CWORD]}"
1960 case "$cur" in
1961 --*)
1962 __gitcomp "
1963 --all --remotes --topo-order --current --more=
1964 --list --independent --merge-base --no-name
1965 --color --no-color
1966 --sha1-name --sparse --topics --reflog
1968 return
1970 esac
1971 __git_complete_revlist
1974 _git_stash ()
1976 local cur="${COMP_WORDS[COMP_CWORD]}"
1977 local save_opts='--keep-index --no-keep-index --quiet --patch'
1978 local subcommands='save list show apply clear drop pop create branch'
1979 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1980 if [ -z "$subcommand" ]; then
1981 case "$cur" in
1982 --*)
1983 __gitcomp "$save_opts"
1986 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
1987 __gitcomp "$subcommands"
1988 else
1989 COMPREPLY=()
1992 esac
1993 else
1994 case "$subcommand,$cur" in
1995 save,--*)
1996 __gitcomp "$save_opts"
1998 apply,--*|pop,--*)
1999 __gitcomp "--index --quiet"
2001 show,--*|drop,--*|branch,--*)
2002 COMPREPLY=()
2004 show,*|apply,*|drop,*|pop,*|branch,*)
2005 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
2006 | sed -n -e 's/:.*//p')"
2009 COMPREPLY=()
2011 esac
2015 _git_submodule ()
2017 __git_has_doubledash && return
2019 local subcommands="add status init update summary foreach sync"
2020 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
2021 local cur="${COMP_WORDS[COMP_CWORD]}"
2022 case "$cur" in
2023 --*)
2024 __gitcomp "--quiet --cached"
2027 __gitcomp "$subcommands"
2029 esac
2030 return
2034 _git_svn ()
2036 local subcommands="
2037 init fetch clone rebase dcommit log find-rev
2038 set-tree commit-diff info create-ignore propget
2039 proplist show-ignore show-externals branch tag blame
2040 migrate mkdirs reset gc
2042 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2043 if [ -z "$subcommand" ]; then
2044 __gitcomp "$subcommands"
2045 else
2046 local remote_opts="--username= --config-dir= --no-auth-cache"
2047 local fc_opts="
2048 --follow-parent --authors-file= --repack=
2049 --no-metadata --use-svm-props --use-svnsync-props
2050 --log-window-size= --no-checkout --quiet
2051 --repack-flags --use-log-author --localtime
2052 --ignore-paths= $remote_opts
2054 local init_opts="
2055 --template= --shared= --trunk= --tags=
2056 --branches= --stdlayout --minimize-url
2057 --no-metadata --use-svm-props --use-svnsync-props
2058 --rewrite-root= --prefix= --use-log-author
2059 --add-author-from $remote_opts
2061 local cmt_opts="
2062 --edit --rmdir --find-copies-harder --copy-similarity=
2065 local cur="${COMP_WORDS[COMP_CWORD]}"
2066 case "$subcommand,$cur" in
2067 fetch,--*)
2068 __gitcomp "--revision= --fetch-all $fc_opts"
2070 clone,--*)
2071 __gitcomp "--revision= $fc_opts $init_opts"
2073 init,--*)
2074 __gitcomp "$init_opts"
2076 dcommit,--*)
2077 __gitcomp "
2078 --merge --strategy= --verbose --dry-run
2079 --fetch-all --no-rebase --commit-url
2080 --revision $cmt_opts $fc_opts
2083 set-tree,--*)
2084 __gitcomp "--stdin $cmt_opts $fc_opts"
2086 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
2087 show-externals,--*|mkdirs,--*)
2088 __gitcomp "--revision="
2090 log,--*)
2091 __gitcomp "
2092 --limit= --revision= --verbose --incremental
2093 --oneline --show-commit --non-recursive
2094 --authors-file= --color
2097 rebase,--*)
2098 __gitcomp "
2099 --merge --verbose --strategy= --local
2100 --fetch-all --dry-run $fc_opts
2103 commit-diff,--*)
2104 __gitcomp "--message= --file= --revision= $cmt_opts"
2106 info,--*)
2107 __gitcomp "--url"
2109 branch,--*)
2110 __gitcomp "--dry-run --message --tag"
2112 tag,--*)
2113 __gitcomp "--dry-run --message"
2115 blame,--*)
2116 __gitcomp "--git-format"
2118 migrate,--*)
2119 __gitcomp "
2120 --config-dir= --ignore-paths= --minimize
2121 --no-auth-cache --username=
2124 reset,--*)
2125 __gitcomp "--revision= --parent"
2128 COMPREPLY=()
2130 esac
2134 _git_tag ()
2136 local i c=1 f=0
2137 while [ $c -lt $COMP_CWORD ]; do
2138 i="${COMP_WORDS[c]}"
2139 case "$i" in
2140 -d|-v)
2141 __gitcomp "$(__git_tags)"
2142 return
2147 esac
2148 c=$((++c))
2149 done
2151 case "${COMP_WORDS[COMP_CWORD-1]}" in
2152 -m|-F)
2153 COMPREPLY=()
2155 -*|tag)
2156 if [ $f = 1 ]; then
2157 __gitcomp "$(__git_tags)"
2158 else
2159 COMPREPLY=()
2163 __gitcomp "$(__git_refs)"
2165 esac
2168 _git ()
2170 local i c=1 command __git_dir
2172 while [ $c -lt $COMP_CWORD ]; do
2173 i="${COMP_WORDS[c]}"
2174 case "$i" in
2175 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2176 --bare) __git_dir="." ;;
2177 --version|-p|--paginate) ;;
2178 --help) command="help"; break ;;
2179 *) command="$i"; break ;;
2180 esac
2181 c=$((++c))
2182 done
2184 if [ -z "$command" ]; then
2185 case "${COMP_WORDS[COMP_CWORD]}" in
2186 --*) __gitcomp "
2187 --paginate
2188 --no-pager
2189 --git-dir=
2190 --bare
2191 --version
2192 --exec-path
2193 --html-path
2194 --work-tree=
2195 --help
2198 *) __git_compute_porcelain_commands
2199 __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
2200 esac
2201 return
2204 local expansion=$(__git_aliased_command "$command")
2205 [ "$expansion" ] && command="$expansion"
2207 case "$command" in
2208 am) _git_am ;;
2209 add) _git_add ;;
2210 apply) _git_apply ;;
2211 archive) _git_archive ;;
2212 bisect) _git_bisect ;;
2213 bundle) _git_bundle ;;
2214 branch) _git_branch ;;
2215 checkout) _git_checkout ;;
2216 cherry) _git_cherry ;;
2217 cherry-pick) _git_cherry_pick ;;
2218 clean) _git_clean ;;
2219 clone) _git_clone ;;
2220 commit) _git_commit ;;
2221 config) _git_config ;;
2222 describe) _git_describe ;;
2223 diff) _git_diff ;;
2224 difftool) _git_difftool ;;
2225 fetch) _git_fetch ;;
2226 format-patch) _git_format_patch ;;
2227 fsck) _git_fsck ;;
2228 gc) _git_gc ;;
2229 grep) _git_grep ;;
2230 help) _git_help ;;
2231 init) _git_init ;;
2232 log) _git_log ;;
2233 ls-files) _git_ls_files ;;
2234 ls-remote) _git_ls_remote ;;
2235 ls-tree) _git_ls_tree ;;
2236 merge) _git_merge;;
2237 mergetool) _git_mergetool;;
2238 merge-base) _git_merge_base ;;
2239 mv) _git_mv ;;
2240 name-rev) _git_name_rev ;;
2241 notes) _git_notes ;;
2242 pull) _git_pull ;;
2243 push) _git_push ;;
2244 rebase) _git_rebase ;;
2245 remote) _git_remote ;;
2246 replace) _git_replace ;;
2247 reset) _git_reset ;;
2248 revert) _git_revert ;;
2249 rm) _git_rm ;;
2250 send-email) _git_send_email ;;
2251 shortlog) _git_shortlog ;;
2252 show) _git_show ;;
2253 show-branch) _git_show_branch ;;
2254 stash) _git_stash ;;
2255 stage) _git_add ;;
2256 submodule) _git_submodule ;;
2257 svn) _git_svn ;;
2258 tag) _git_tag ;;
2259 whatchanged) _git_log ;;
2260 *) COMPREPLY=() ;;
2261 esac
2264 _gitk ()
2266 __git_has_doubledash && return
2268 local cur="${COMP_WORDS[COMP_CWORD]}"
2269 local g="$(__gitdir)"
2270 local merge=""
2271 if [ -f "$g/MERGE_HEAD" ]; then
2272 merge="--merge"
2274 case "$cur" in
2275 --*)
2276 __gitcomp "
2277 $__git_log_common_options
2278 $__git_log_gitk_options
2279 $merge
2281 return
2283 esac
2284 __git_complete_revlist
2287 complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \
2288 || complete -o default -o nospace -F _git git
2289 complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \
2290 || complete -o default -o nospace -F _gitk gitk
2292 # The following are necessary only for Cygwin, and only are needed
2293 # when the user has tab-completed the executable name and consequently
2294 # included the '.exe' suffix.
2296 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2297 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
2298 || complete -o default -o nospace -F _git git.exe