bash completion: add space between branch name and status flags
[git/jrn.git] / contrib / completion / git-completion.bash
blob3a6498c04ba3382df04b964dcc45bfe60ecc6df1
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 --ignore-submodules \
146 --quiet --exit-code || w="*"
147 if git rev-parse --quiet --verify HEAD >/dev/null; then
148 git diff-index --cached --quiet \
149 --ignore-submodules HEAD -- || i="+"
150 else
151 i="#"
155 if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
156 git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
159 if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ]; then
160 if [ -n "$(git ls-files --others --exclude-standard)" ]; then
161 u="%"
166 local f="$w$i$s$u"
167 printf "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r"
171 # __gitcomp_1 requires 2 arguments
172 __gitcomp_1 ()
174 local c IFS=' '$'\t'$'\n'
175 for c in $1; do
176 case "$c$2" in
177 --*=*) printf %s$'\n' "$c$2" ;;
178 *.) printf %s$'\n' "$c$2" ;;
179 *) printf %s$'\n' "$c$2 " ;;
180 esac
181 done
184 # __gitcomp accepts 1, 2, 3, or 4 arguments
185 # generates completion reply with compgen
186 __gitcomp ()
188 local cur="${COMP_WORDS[COMP_CWORD]}"
189 if [ $# -gt 2 ]; then
190 cur="$3"
192 case "$cur" in
193 --*=)
194 COMPREPLY=()
197 local IFS=$'\n'
198 COMPREPLY=($(compgen -P "${2-}" \
199 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
200 -- "$cur"))
202 esac
205 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
206 __git_heads ()
208 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
209 if [ -d "$dir" ]; then
210 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
211 refs/heads
212 return
214 for i in $(git ls-remote "${1-}" 2>/dev/null); do
215 case "$is_hash,$i" in
216 y,*) is_hash=n ;;
217 n,*^{}) is_hash=y ;;
218 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
219 n,*) is_hash=y; echo "$i" ;;
220 esac
221 done
224 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
225 __git_tags ()
227 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
228 if [ -d "$dir" ]; then
229 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
230 refs/tags
231 return
233 for i in $(git ls-remote "${1-}" 2>/dev/null); do
234 case "$is_hash,$i" in
235 y,*) is_hash=n ;;
236 n,*^{}) is_hash=y ;;
237 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
238 n,*) is_hash=y; echo "$i" ;;
239 esac
240 done
243 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
244 __git_refs ()
246 local i is_hash=y dir="$(__gitdir "${1-}")"
247 local cur="${COMP_WORDS[COMP_CWORD]}" format refs
248 if [ -d "$dir" ]; then
249 case "$cur" in
250 refs|refs/*)
251 format="refname"
252 refs="${cur%/*}"
255 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
256 format="refname:short"
257 refs="refs/tags refs/heads refs/remotes"
259 esac
260 git --git-dir="$dir" for-each-ref --format="%($format)" \
261 $refs
262 return
264 for i in $(git ls-remote "$dir" 2>/dev/null); do
265 case "$is_hash,$i" in
266 y,*) is_hash=n ;;
267 n,*^{}) is_hash=y ;;
268 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
269 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
270 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
271 n,*) is_hash=y; echo "$i" ;;
272 esac
273 done
276 # __git_refs2 requires 1 argument (to pass to __git_refs)
277 __git_refs2 ()
279 local i
280 for i in $(__git_refs "$1"); do
281 echo "$i:$i"
282 done
285 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
286 __git_refs_remotes ()
288 local cmd i is_hash=y
289 for i in $(git ls-remote "$1" 2>/dev/null); do
290 case "$is_hash,$i" in
291 n,refs/heads/*)
292 is_hash=y
293 echo "$i:refs/remotes/$1/${i#refs/heads/}"
295 y,*) is_hash=n ;;
296 n,*^{}) is_hash=y ;;
297 n,refs/tags/*) is_hash=y;;
298 n,*) is_hash=y; ;;
299 esac
300 done
303 __git_remotes ()
305 local i ngoff IFS=$'\n' d="$(__gitdir)"
306 shopt -q nullglob || ngoff=1
307 shopt -s nullglob
308 for i in "$d/remotes"/*; do
309 echo ${i#$d/remotes/}
310 done
311 [ "$ngoff" ] && shopt -u nullglob
312 for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
313 i="${i#remote.}"
314 echo "${i/.url*/}"
315 done
318 __git_list_merge_strategies ()
320 git merge -s help 2>&1 |
321 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
322 s/\.$//
323 s/.*://
324 s/^[ ]*//
325 s/[ ]*$//
330 __git_merge_strategies=
331 # 'git merge -s help' (and thus detection of the merge strategy
332 # list) fails, unfortunately, if run outside of any git working
333 # tree. __git_merge_strategies is set to the empty string in
334 # that case, and the detection will be repeated the next time it
335 # is needed.
336 __git_compute_merge_strategies ()
338 : ${__git_merge_strategies:=$(__git_list_merge_strategies)}
341 __git_complete_file ()
343 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
344 case "$cur" in
345 ?*:*)
346 ref="${cur%%:*}"
347 cur="${cur#*:}"
348 case "$cur" in
349 ?*/*)
350 pfx="${cur%/*}"
351 cur="${cur##*/}"
352 ls="$ref:$pfx"
353 pfx="$pfx/"
356 ls="$ref"
358 esac
360 case "$COMP_WORDBREAKS" in
361 *:*) : great ;;
362 *) pfx="$ref:$pfx" ;;
363 esac
365 local IFS=$'\n'
366 COMPREPLY=($(compgen -P "$pfx" \
367 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
368 | sed '/^100... blob /{
369 s,^.* ,,
370 s,$, ,
372 /^120000 blob /{
373 s,^.* ,,
374 s,$, ,
376 /^040000 tree /{
377 s,^.* ,,
378 s,$,/,
380 s/^.* //')" \
381 -- "$cur"))
384 __gitcomp "$(__git_refs)"
386 esac
389 __git_complete_revlist ()
391 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
392 case "$cur" in
393 *...*)
394 pfx="${cur%...*}..."
395 cur="${cur#*...}"
396 __gitcomp "$(__git_refs)" "$pfx" "$cur"
398 *..*)
399 pfx="${cur%..*}.."
400 cur="${cur#*..}"
401 __gitcomp "$(__git_refs)" "$pfx" "$cur"
404 __gitcomp "$(__git_refs)"
406 esac
409 __git_complete_remote_or_refspec ()
411 local cmd="${COMP_WORDS[1]}"
412 local cur="${COMP_WORDS[COMP_CWORD]}"
413 local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
414 while [ $c -lt $COMP_CWORD ]; do
415 i="${COMP_WORDS[c]}"
416 case "$i" in
417 --mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
418 --all)
419 case "$cmd" in
420 push) no_complete_refspec=1 ;;
421 fetch)
422 COMPREPLY=()
423 return
425 *) ;;
426 esac
428 -*) ;;
429 *) remote="$i"; break ;;
430 esac
431 c=$((++c))
432 done
433 if [ -z "$remote" ]; then
434 __gitcomp "$(__git_remotes)"
435 return
437 if [ $no_complete_refspec = 1 ]; then
438 COMPREPLY=()
439 return
441 [ "$remote" = "." ] && remote=
442 case "$cur" in
443 *:*)
444 case "$COMP_WORDBREAKS" in
445 *:*) : great ;;
446 *) pfx="${cur%%:*}:" ;;
447 esac
448 cur="${cur#*:}"
449 lhs=0
452 pfx="+"
453 cur="${cur#+}"
455 esac
456 case "$cmd" in
457 fetch)
458 if [ $lhs = 1 ]; then
459 __gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
460 else
461 __gitcomp "$(__git_refs)" "$pfx" "$cur"
464 pull)
465 if [ $lhs = 1 ]; then
466 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
467 else
468 __gitcomp "$(__git_refs)" "$pfx" "$cur"
471 push)
472 if [ $lhs = 1 ]; then
473 __gitcomp "$(__git_refs)" "$pfx" "$cur"
474 else
475 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
478 esac
481 __git_complete_strategy ()
483 __git_compute_merge_strategies
484 case "${COMP_WORDS[COMP_CWORD-1]}" in
485 -s|--strategy)
486 __gitcomp "$__git_merge_strategies"
487 return 0
488 esac
489 local cur="${COMP_WORDS[COMP_CWORD]}"
490 case "$cur" in
491 --strategy=*)
492 __gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
493 return 0
495 esac
496 return 1
499 __git_list_all_commands ()
501 local i IFS=" "$'\n'
502 for i in $(git help -a|egrep '^ [a-zA-Z0-9]')
504 case $i in
505 *--*) : helper pattern;;
506 *) echo $i;;
507 esac
508 done
511 __git_all_commands=
512 __git_compute_all_commands ()
514 : ${__git_all_commands:=$(__git_list_all_commands)}
517 __git_list_porcelain_commands ()
519 local i IFS=" "$'\n'
520 __git_compute_all_commands
521 for i in "help" $__git_all_commands
523 case $i in
524 *--*) : helper pattern;;
525 applymbox) : ask gittus;;
526 applypatch) : ask gittus;;
527 archimport) : import;;
528 cat-file) : plumbing;;
529 check-attr) : plumbing;;
530 check-ref-format) : plumbing;;
531 checkout-index) : plumbing;;
532 commit-tree) : plumbing;;
533 count-objects) : infrequent;;
534 cvsexportcommit) : export;;
535 cvsimport) : import;;
536 cvsserver) : daemon;;
537 daemon) : daemon;;
538 diff-files) : plumbing;;
539 diff-index) : plumbing;;
540 diff-tree) : plumbing;;
541 fast-import) : import;;
542 fast-export) : export;;
543 fsck-objects) : plumbing;;
544 fetch-pack) : plumbing;;
545 fmt-merge-msg) : plumbing;;
546 for-each-ref) : plumbing;;
547 hash-object) : plumbing;;
548 http-*) : transport;;
549 index-pack) : plumbing;;
550 init-db) : deprecated;;
551 local-fetch) : plumbing;;
552 lost-found) : infrequent;;
553 ls-files) : plumbing;;
554 ls-remote) : plumbing;;
555 ls-tree) : plumbing;;
556 mailinfo) : plumbing;;
557 mailsplit) : plumbing;;
558 merge-*) : plumbing;;
559 mktree) : plumbing;;
560 mktag) : plumbing;;
561 pack-objects) : plumbing;;
562 pack-redundant) : plumbing;;
563 pack-refs) : plumbing;;
564 parse-remote) : plumbing;;
565 patch-id) : plumbing;;
566 peek-remote) : plumbing;;
567 prune) : plumbing;;
568 prune-packed) : plumbing;;
569 quiltimport) : import;;
570 read-tree) : plumbing;;
571 receive-pack) : plumbing;;
572 reflog) : plumbing;;
573 repo-config) : deprecated;;
574 rerere) : plumbing;;
575 rev-list) : plumbing;;
576 rev-parse) : plumbing;;
577 runstatus) : plumbing;;
578 sh-setup) : internal;;
579 shell) : daemon;;
580 show-ref) : plumbing;;
581 send-pack) : plumbing;;
582 show-index) : plumbing;;
583 ssh-*) : transport;;
584 stripspace) : plumbing;;
585 symbolic-ref) : plumbing;;
586 tar-tree) : deprecated;;
587 unpack-file) : plumbing;;
588 unpack-objects) : plumbing;;
589 update-index) : plumbing;;
590 update-ref) : plumbing;;
591 update-server-info) : daemon;;
592 upload-archive) : plumbing;;
593 upload-pack) : plumbing;;
594 write-tree) : plumbing;;
595 var) : infrequent;;
596 verify-pack) : infrequent;;
597 verify-tag) : plumbing;;
598 *) echo $i;;
599 esac
600 done
603 __git_porcelain_commands=
604 __git_compute_porcelain_commands ()
606 __git_compute_all_commands
607 : ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}
610 __git_aliases ()
612 local i IFS=$'\n'
613 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
614 case "$i" in
615 alias.*)
616 i="${i#alias.}"
617 echo "${i/ */}"
619 esac
620 done
623 # __git_aliased_command requires 1 argument
624 __git_aliased_command ()
626 local word cmdline=$(git --git-dir="$(__gitdir)" \
627 config --get "alias.$1")
628 for word in $cmdline; do
629 if [ "${word##-*}" ]; then
630 echo $word
631 return
633 done
636 # __git_find_on_cmdline requires 1 argument
637 __git_find_on_cmdline ()
639 local word subcommand c=1
641 while [ $c -lt $COMP_CWORD ]; do
642 word="${COMP_WORDS[c]}"
643 for subcommand in $1; do
644 if [ "$subcommand" = "$word" ]; then
645 echo "$subcommand"
646 return
648 done
649 c=$((++c))
650 done
653 __git_has_doubledash ()
655 local c=1
656 while [ $c -lt $COMP_CWORD ]; do
657 if [ "--" = "${COMP_WORDS[c]}" ]; then
658 return 0
660 c=$((++c))
661 done
662 return 1
665 __git_whitespacelist="nowarn warn error error-all fix"
667 _git_am ()
669 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
670 if [ -d "$dir"/rebase-apply ]; then
671 __gitcomp "--skip --resolved --abort"
672 return
674 case "$cur" in
675 --whitespace=*)
676 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
677 return
679 --*)
680 __gitcomp "
681 --3way --committer-date-is-author-date --ignore-date
682 --ignore-whitespace --ignore-space-change
683 --interactive --keep --no-utf8 --signoff --utf8
684 --whitespace= --scissors
686 return
687 esac
688 COMPREPLY=()
691 _git_apply ()
693 local cur="${COMP_WORDS[COMP_CWORD]}"
694 case "$cur" in
695 --whitespace=*)
696 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
697 return
699 --*)
700 __gitcomp "
701 --stat --numstat --summary --check --index
702 --cached --index-info --reverse --reject --unidiff-zero
703 --apply --no-add --exclude=
704 --ignore-whitespace --ignore-space-change
705 --whitespace= --inaccurate-eof --verbose
707 return
708 esac
709 COMPREPLY=()
712 _git_add ()
714 __git_has_doubledash && return
716 local cur="${COMP_WORDS[COMP_CWORD]}"
717 case "$cur" in
718 --*)
719 __gitcomp "
720 --interactive --refresh --patch --update --dry-run
721 --ignore-errors --intent-to-add
723 return
724 esac
725 COMPREPLY=()
728 _git_archive ()
730 local cur="${COMP_WORDS[COMP_CWORD]}"
731 case "$cur" in
732 --format=*)
733 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
734 return
736 --remote=*)
737 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
738 return
740 --*)
741 __gitcomp "
742 --format= --list --verbose
743 --prefix= --remote= --exec=
745 return
747 esac
748 __git_complete_file
751 _git_bisect ()
753 __git_has_doubledash && return
755 local subcommands="start bad good skip reset visualize replay log run"
756 local subcommand="$(__git_find_on_cmdline "$subcommands")"
757 if [ -z "$subcommand" ]; then
758 __gitcomp "$subcommands"
759 return
762 case "$subcommand" in
763 bad|good|reset|skip)
764 __gitcomp "$(__git_refs)"
767 COMPREPLY=()
769 esac
772 _git_branch ()
774 local i c=1 only_local_ref="n" has_r="n"
776 while [ $c -lt $COMP_CWORD ]; do
777 i="${COMP_WORDS[c]}"
778 case "$i" in
779 -d|-m) only_local_ref="y" ;;
780 -r) has_r="y" ;;
781 esac
782 c=$((++c))
783 done
785 case "${COMP_WORDS[COMP_CWORD]}" in
786 --*)
787 __gitcomp "
788 --color --no-color --verbose --abbrev= --no-abbrev
789 --track --no-track --contains --merged --no-merged
793 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
794 __gitcomp "$(__git_heads)"
795 else
796 __gitcomp "$(__git_refs)"
799 esac
802 _git_bundle ()
804 local cmd="${COMP_WORDS[2]}"
805 case "$COMP_CWORD" in
807 __gitcomp "create list-heads verify unbundle"
810 # looking for a file
813 case "$cmd" in
814 create)
815 __git_complete_revlist
817 esac
819 esac
822 _git_checkout ()
824 __git_has_doubledash && return
826 local cur="${COMP_WORDS[COMP_CWORD]}"
827 case "$cur" in
828 --conflict=*)
829 __gitcomp "diff3 merge" "" "${cur##--conflict=}"
831 --*)
832 __gitcomp "
833 --quiet --ours --theirs --track --no-track --merge
834 --conflict= --patch
838 __gitcomp "$(__git_refs)"
840 esac
843 _git_cherry ()
845 __gitcomp "$(__git_refs)"
848 _git_cherry_pick ()
850 local cur="${COMP_WORDS[COMP_CWORD]}"
851 case "$cur" in
852 --*)
853 __gitcomp "--edit --no-commit"
856 __gitcomp "$(__git_refs)"
858 esac
861 _git_clean ()
863 __git_has_doubledash && return
865 local cur="${COMP_WORDS[COMP_CWORD]}"
866 case "$cur" in
867 --*)
868 __gitcomp "--dry-run --quiet"
869 return
871 esac
872 COMPREPLY=()
875 _git_clone ()
877 local cur="${COMP_WORDS[COMP_CWORD]}"
878 case "$cur" in
879 --*)
880 __gitcomp "
881 --local
882 --no-hardlinks
883 --shared
884 --reference
885 --quiet
886 --no-checkout
887 --bare
888 --mirror
889 --origin
890 --upload-pack
891 --template=
892 --depth
894 return
896 esac
897 COMPREPLY=()
900 _git_commit ()
902 __git_has_doubledash && return
904 local cur="${COMP_WORDS[COMP_CWORD]}"
905 case "$cur" in
906 --cleanup=*)
907 __gitcomp "default strip verbatim whitespace
908 " "" "${cur##--cleanup=}"
909 return
911 --reuse-message=*)
912 __gitcomp "$(__git_refs)" "" "${cur##--reuse-message=}"
913 return
915 --reedit-message=*)
916 __gitcomp "$(__git_refs)" "" "${cur##--reedit-message=}"
917 return
919 --untracked-files=*)
920 __gitcomp "all no normal" "" "${cur##--untracked-files=}"
921 return
923 --*)
924 __gitcomp "
925 --all --author= --signoff --verify --no-verify
926 --edit --amend --include --only --interactive
927 --dry-run --reuse-message= --reedit-message=
928 --reset-author --file= --message= --template=
929 --cleanup= --untracked-files --untracked-files=
930 --verbose --quiet
932 return
933 esac
934 COMPREPLY=()
937 _git_describe ()
939 local cur="${COMP_WORDS[COMP_CWORD]}"
940 case "$cur" in
941 --*)
942 __gitcomp "
943 --all --tags --contains --abbrev= --candidates=
944 --exact-match --debug --long --match --always
946 return
947 esac
948 __gitcomp "$(__git_refs)"
951 __git_diff_common_options="--stat --numstat --shortstat --summary
952 --patch-with-stat --name-only --name-status --color
953 --no-color --color-words --no-renames --check
954 --full-index --binary --abbrev --diff-filter=
955 --find-copies-harder
956 --text --ignore-space-at-eol --ignore-space-change
957 --ignore-all-space --exit-code --quiet --ext-diff
958 --no-ext-diff
959 --no-prefix --src-prefix= --dst-prefix=
960 --inter-hunk-context=
961 --patience
962 --raw
963 --dirstat --dirstat= --dirstat-by-file
964 --dirstat-by-file= --cumulative
967 _git_diff ()
969 __git_has_doubledash && return
971 local cur="${COMP_WORDS[COMP_CWORD]}"
972 case "$cur" in
973 --*)
974 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
975 --base --ours --theirs
976 $__git_diff_common_options
978 return
980 esac
981 __git_complete_file
984 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
985 tkdiff vimdiff gvimdiff xxdiff araxis p4merge
988 _git_difftool ()
990 __git_has_doubledash && return
992 local cur="${COMP_WORDS[COMP_CWORD]}"
993 case "$cur" in
994 --tool=*)
995 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
996 return
998 --*)
999 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
1000 --base --ours --theirs
1001 --no-renames --diff-filter= --find-copies-harder
1002 --relative --ignore-submodules
1003 --tool="
1004 return
1006 esac
1007 __git_complete_file
1010 __git_fetch_options="
1011 --quiet --verbose --append --upload-pack --force --keep --depth=
1012 --tags --no-tags --all --prune --dry-run
1015 _git_fetch ()
1017 local cur="${COMP_WORDS[COMP_CWORD]}"
1018 case "$cur" in
1019 --*)
1020 __gitcomp "$__git_fetch_options"
1021 return
1023 esac
1024 __git_complete_remote_or_refspec
1027 _git_format_patch ()
1029 local cur="${COMP_WORDS[COMP_CWORD]}"
1030 case "$cur" in
1031 --thread=*)
1032 __gitcomp "
1033 deep shallow
1034 " "" "${cur##--thread=}"
1035 return
1037 --*)
1038 __gitcomp "
1039 --stdout --attach --no-attach --thread --thread=
1040 --output-directory
1041 --numbered --start-number
1042 --numbered-files
1043 --keep-subject
1044 --signoff
1045 --in-reply-to= --cc=
1046 --full-index --binary
1047 --not --all
1048 --cover-letter
1049 --no-prefix --src-prefix= --dst-prefix=
1050 --inline --suffix= --ignore-if-in-upstream
1051 --subject-prefix=
1053 return
1055 esac
1056 __git_complete_revlist
1059 _git_fsck ()
1061 local cur="${COMP_WORDS[COMP_CWORD]}"
1062 case "$cur" in
1063 --*)
1064 __gitcomp "
1065 --tags --root --unreachable --cache --no-reflogs --full
1066 --strict --verbose --lost-found
1068 return
1070 esac
1071 COMPREPLY=()
1074 _git_gc ()
1076 local cur="${COMP_WORDS[COMP_CWORD]}"
1077 case "$cur" in
1078 --*)
1079 __gitcomp "--prune --aggressive"
1080 return
1082 esac
1083 COMPREPLY=()
1086 _git_grep ()
1088 __git_has_doubledash && return
1090 local cur="${COMP_WORDS[COMP_CWORD]}"
1091 case "$cur" in
1092 --*)
1093 __gitcomp "
1094 --cached
1095 --text --ignore-case --word-regexp --invert-match
1096 --full-name
1097 --extended-regexp --basic-regexp --fixed-strings
1098 --files-with-matches --name-only
1099 --files-without-match
1100 --max-depth
1101 --count
1102 --and --or --not --all-match
1104 return
1106 esac
1108 __gitcomp "$(__git_refs)"
1111 _git_help ()
1113 local cur="${COMP_WORDS[COMP_CWORD]}"
1114 case "$cur" in
1115 --*)
1116 __gitcomp "--all --info --man --web"
1117 return
1119 esac
1120 __git_compute_all_commands
1121 __gitcomp "$__git_all_commands
1122 attributes cli core-tutorial cvs-migration
1123 diffcore gitk glossary hooks ignore modules
1124 repository-layout tutorial tutorial-2
1125 workflows
1129 _git_init ()
1131 local cur="${COMP_WORDS[COMP_CWORD]}"
1132 case "$cur" in
1133 --shared=*)
1134 __gitcomp "
1135 false true umask group all world everybody
1136 " "" "${cur##--shared=}"
1137 return
1139 --*)
1140 __gitcomp "--quiet --bare --template= --shared --shared="
1141 return
1143 esac
1144 COMPREPLY=()
1147 _git_ls_files ()
1149 __git_has_doubledash && return
1151 local cur="${COMP_WORDS[COMP_CWORD]}"
1152 case "$cur" in
1153 --*)
1154 __gitcomp "--cached --deleted --modified --others --ignored
1155 --stage --directory --no-empty-directory --unmerged
1156 --killed --exclude= --exclude-from=
1157 --exclude-per-directory= --exclude-standard
1158 --error-unmatch --with-tree= --full-name
1159 --abbrev --ignored --exclude-per-directory
1161 return
1163 esac
1164 COMPREPLY=()
1167 _git_ls_remote ()
1169 __gitcomp "$(__git_remotes)"
1172 _git_ls_tree ()
1174 __git_complete_file
1177 # Options that go well for log, shortlog and gitk
1178 __git_log_common_options="
1179 --not --all
1180 --branches --tags --remotes
1181 --first-parent --merges --no-merges
1182 --max-count=
1183 --max-age= --since= --after=
1184 --min-age= --until= --before=
1186 # Options that go well for log and gitk (not shortlog)
1187 __git_log_gitk_options="
1188 --dense --sparse --full-history
1189 --simplify-merges --simplify-by-decoration
1190 --left-right
1192 # Options that go well for log and shortlog (not gitk)
1193 __git_log_shortlog_options="
1194 --author= --committer= --grep=
1195 --all-match
1198 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1199 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1201 _git_log ()
1203 __git_has_doubledash && return
1205 local cur="${COMP_WORDS[COMP_CWORD]}"
1206 local g="$(git rev-parse --git-dir 2>/dev/null)"
1207 local merge=""
1208 if [ -f "$g/MERGE_HEAD" ]; then
1209 merge="--merge"
1211 case "$cur" in
1212 --pretty=*)
1213 __gitcomp "$__git_log_pretty_formats
1214 " "" "${cur##--pretty=}"
1215 return
1217 --format=*)
1218 __gitcomp "$__git_log_pretty_formats
1219 " "" "${cur##--format=}"
1220 return
1222 --date=*)
1223 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1224 return
1226 --decorate=*)
1227 __gitcomp "long short" "" "${cur##--decorate=}"
1228 return
1230 --*)
1231 __gitcomp "
1232 $__git_log_common_options
1233 $__git_log_shortlog_options
1234 $__git_log_gitk_options
1235 --root --topo-order --date-order --reverse
1236 --follow --full-diff
1237 --abbrev-commit --abbrev=
1238 --relative-date --date=
1239 --pretty= --format= --oneline
1240 --cherry-pick
1241 --graph
1242 --decorate --decorate=
1243 --walk-reflogs
1244 --parents --children
1245 $merge
1246 $__git_diff_common_options
1247 --pickaxe-all --pickaxe-regex
1249 return
1251 esac
1252 __git_complete_revlist
1255 __git_merge_options="
1256 --no-commit --no-stat --log --no-log --squash --strategy
1257 --commit --stat --no-squash --ff --no-ff --ff-only
1260 _git_merge ()
1262 __git_complete_strategy && return
1264 local cur="${COMP_WORDS[COMP_CWORD]}"
1265 case "$cur" in
1266 --*)
1267 __gitcomp "$__git_merge_options"
1268 return
1269 esac
1270 __gitcomp "$(__git_refs)"
1273 _git_mergetool ()
1275 local cur="${COMP_WORDS[COMP_CWORD]}"
1276 case "$cur" in
1277 --tool=*)
1278 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1279 return
1281 --*)
1282 __gitcomp "--tool="
1283 return
1285 esac
1286 COMPREPLY=()
1289 _git_merge_base ()
1291 __gitcomp "$(__git_refs)"
1294 _git_mv ()
1296 local cur="${COMP_WORDS[COMP_CWORD]}"
1297 case "$cur" in
1298 --*)
1299 __gitcomp "--dry-run"
1300 return
1302 esac
1303 COMPREPLY=()
1306 _git_name_rev ()
1308 __gitcomp "--tags --all --stdin"
1311 _git_pull ()
1313 __git_complete_strategy && return
1315 local cur="${COMP_WORDS[COMP_CWORD]}"
1316 case "$cur" in
1317 --*)
1318 __gitcomp "
1319 --rebase --no-rebase
1320 $__git_merge_options
1321 $__git_fetch_options
1323 return
1325 esac
1326 __git_complete_remote_or_refspec
1329 _git_push ()
1331 local cur="${COMP_WORDS[COMP_CWORD]}"
1332 case "${COMP_WORDS[COMP_CWORD-1]}" in
1333 --repo)
1334 __gitcomp "$(__git_remotes)"
1335 return
1336 esac
1337 case "$cur" in
1338 --repo=*)
1339 __gitcomp "$(__git_remotes)" "" "${cur##--repo=}"
1340 return
1342 --*)
1343 __gitcomp "
1344 --all --mirror --tags --dry-run --force --verbose
1345 --receive-pack= --repo=
1347 return
1349 esac
1350 __git_complete_remote_or_refspec
1353 _git_rebase ()
1355 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1356 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1357 __gitcomp "--continue --skip --abort"
1358 return
1360 __git_complete_strategy && return
1361 case "$cur" in
1362 --whitespace=*)
1363 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
1364 return
1366 --*)
1367 __gitcomp "
1368 --onto --merge --strategy --interactive
1369 --preserve-merges --stat --no-stat
1370 --committer-date-is-author-date --ignore-date
1371 --ignore-whitespace --whitespace=
1374 return
1375 esac
1376 __gitcomp "$(__git_refs)"
1379 __git_send_email_confirm_options="always never auto cc compose"
1380 __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
1382 _git_send_email ()
1384 local cur="${COMP_WORDS[COMP_CWORD]}"
1385 case "$cur" in
1386 --confirm=*)
1387 __gitcomp "
1388 $__git_send_email_confirm_options
1389 " "" "${cur##--confirm=}"
1390 return
1392 --suppress-cc=*)
1393 __gitcomp "
1394 $__git_send_email_suppresscc_options
1395 " "" "${cur##--suppress-cc=}"
1397 return
1399 --smtp-encryption=*)
1400 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1401 return
1403 --*)
1404 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1405 --compose --confirm= --dry-run --envelope-sender
1406 --from --identity
1407 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1408 --no-suppress-from --no-thread --quiet
1409 --signed-off-by-cc --smtp-pass --smtp-server
1410 --smtp-server-port --smtp-encryption= --smtp-user
1411 --subject --suppress-cc= --suppress-from --thread --to
1412 --validate --no-validate"
1413 return
1415 esac
1416 COMPREPLY=()
1419 __git_config_get_set_variables ()
1421 local prevword word config_file= c=$COMP_CWORD
1422 while [ $c -gt 1 ]; do
1423 word="${COMP_WORDS[c]}"
1424 case "$word" in
1425 --global|--system|--file=*)
1426 config_file="$word"
1427 break
1429 -f|--file)
1430 config_file="$word $prevword"
1431 break
1433 esac
1434 prevword=$word
1435 c=$((--c))
1436 done
1438 git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
1439 while read line
1441 case "$line" in
1442 *.*=*)
1443 echo "${line/=*/}"
1445 esac
1446 done
1449 _git_config ()
1451 local cur="${COMP_WORDS[COMP_CWORD]}"
1452 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1453 case "$prv" in
1454 branch.*.remote)
1455 __gitcomp "$(__git_remotes)"
1456 return
1458 branch.*.merge)
1459 __gitcomp "$(__git_refs)"
1460 return
1462 remote.*.fetch)
1463 local remote="${prv#remote.}"
1464 remote="${remote%.fetch}"
1465 __gitcomp "$(__git_refs_remotes "$remote")"
1466 return
1468 remote.*.push)
1469 local remote="${prv#remote.}"
1470 remote="${remote%.push}"
1471 __gitcomp "$(git --git-dir="$(__gitdir)" \
1472 for-each-ref --format='%(refname):%(refname)' \
1473 refs/heads)"
1474 return
1476 pull.twohead|pull.octopus)
1477 __git_compute_merge_strategies
1478 __gitcomp "$__git_merge_strategies"
1479 return
1481 color.branch|color.diff|color.interactive|\
1482 color.showbranch|color.status|color.ui)
1483 __gitcomp "always never auto"
1484 return
1486 color.pager)
1487 __gitcomp "false true"
1488 return
1490 color.*.*)
1491 __gitcomp "
1492 normal black red green yellow blue magenta cyan white
1493 bold dim ul blink reverse
1495 return
1497 help.format)
1498 __gitcomp "man info web html"
1499 return
1501 log.date)
1502 __gitcomp "$__git_log_date_formats"
1503 return
1505 sendemail.aliasesfiletype)
1506 __gitcomp "mutt mailrc pine elm gnus"
1507 return
1509 sendemail.confirm)
1510 __gitcomp "$__git_send_email_confirm_options"
1511 return
1513 sendemail.suppresscc)
1514 __gitcomp "$__git_send_email_suppresscc_options"
1515 return
1517 --get|--get-all|--unset|--unset-all)
1518 __gitcomp "$(__git_config_get_set_variables)"
1519 return
1521 *.*)
1522 COMPREPLY=()
1523 return
1525 esac
1526 case "$cur" in
1527 --*)
1528 __gitcomp "
1529 --global --system --file=
1530 --list --replace-all
1531 --get --get-all --get-regexp
1532 --add --unset --unset-all
1533 --remove-section --rename-section
1535 return
1537 branch.*.*)
1538 local pfx="${cur%.*}."
1539 cur="${cur##*.}"
1540 __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur"
1541 return
1543 branch.*)
1544 local pfx="${cur%.*}."
1545 cur="${cur#*.}"
1546 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1547 return
1549 guitool.*.*)
1550 local pfx="${cur%.*}."
1551 cur="${cur##*.}"
1552 __gitcomp "
1553 argprompt cmd confirm needsfile noconsole norescan
1554 prompt revprompt revunmerged title
1555 " "$pfx" "$cur"
1556 return
1558 difftool.*.*)
1559 local pfx="${cur%.*}."
1560 cur="${cur##*.}"
1561 __gitcomp "cmd path" "$pfx" "$cur"
1562 return
1564 man.*.*)
1565 local pfx="${cur%.*}."
1566 cur="${cur##*.}"
1567 __gitcomp "cmd path" "$pfx" "$cur"
1568 return
1570 mergetool.*.*)
1571 local pfx="${cur%.*}."
1572 cur="${cur##*.}"
1573 __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
1574 return
1576 pager.*)
1577 local pfx="${cur%.*}."
1578 cur="${cur#*.}"
1579 __git_compute_all_commands
1580 __gitcomp "$__git_all_commands" "$pfx" "$cur"
1581 return
1583 remote.*.*)
1584 local pfx="${cur%.*}."
1585 cur="${cur##*.}"
1586 __gitcomp "
1587 url proxy fetch push mirror skipDefaultUpdate
1588 receivepack uploadpack tagopt pushurl
1589 " "$pfx" "$cur"
1590 return
1592 remote.*)
1593 local pfx="${cur%.*}."
1594 cur="${cur#*.}"
1595 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1596 return
1598 url.*.*)
1599 local pfx="${cur%.*}."
1600 cur="${cur##*.}"
1601 __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur"
1602 return
1604 esac
1605 __gitcomp "
1606 add.ignore-errors
1607 alias.
1608 apply.ignorewhitespace
1609 apply.whitespace
1610 branch.autosetupmerge
1611 branch.autosetuprebase
1612 clean.requireForce
1613 color.branch
1614 color.branch.current
1615 color.branch.local
1616 color.branch.plain
1617 color.branch.remote
1618 color.diff
1619 color.diff.commit
1620 color.diff.frag
1621 color.diff.meta
1622 color.diff.new
1623 color.diff.old
1624 color.diff.plain
1625 color.diff.whitespace
1626 color.grep
1627 color.grep.external
1628 color.grep.match
1629 color.interactive
1630 color.interactive.header
1631 color.interactive.help
1632 color.interactive.prompt
1633 color.pager
1634 color.showbranch
1635 color.status
1636 color.status.added
1637 color.status.changed
1638 color.status.header
1639 color.status.nobranch
1640 color.status.untracked
1641 color.status.updated
1642 color.ui
1643 commit.template
1644 core.autocrlf
1645 core.bare
1646 core.compression
1647 core.createObject
1648 core.deltaBaseCacheLimit
1649 core.editor
1650 core.excludesfile
1651 core.fileMode
1652 core.fsyncobjectfiles
1653 core.gitProxy
1654 core.ignoreCygwinFSTricks
1655 core.ignoreStat
1656 core.logAllRefUpdates
1657 core.loosecompression
1658 core.packedGitLimit
1659 core.packedGitWindowSize
1660 core.pager
1661 core.preferSymlinkRefs
1662 core.preloadindex
1663 core.quotepath
1664 core.repositoryFormatVersion
1665 core.safecrlf
1666 core.sharedRepository
1667 core.symlinks
1668 core.trustctime
1669 core.warnAmbiguousRefs
1670 core.whitespace
1671 core.worktree
1672 diff.autorefreshindex
1673 diff.external
1674 diff.mnemonicprefix
1675 diff.renameLimit
1676 diff.renameLimit.
1677 diff.renames
1678 diff.suppressBlankEmpty
1679 diff.tool
1680 diff.wordRegex
1681 difftool.
1682 difftool.prompt
1683 fetch.unpackLimit
1684 format.attach
1685 format.cc
1686 format.headers
1687 format.numbered
1688 format.pretty
1689 format.signoff
1690 format.subjectprefix
1691 format.suffix
1692 format.thread
1693 gc.aggressiveWindow
1694 gc.auto
1695 gc.autopacklimit
1696 gc.packrefs
1697 gc.pruneexpire
1698 gc.reflogexpire
1699 gc.reflogexpireunreachable
1700 gc.rerereresolved
1701 gc.rerereunresolved
1702 gitcvs.allbinary
1703 gitcvs.commitmsgannotation
1704 gitcvs.dbTableNamePrefix
1705 gitcvs.dbdriver
1706 gitcvs.dbname
1707 gitcvs.dbpass
1708 gitcvs.dbuser
1709 gitcvs.enabled
1710 gitcvs.logfile
1711 gitcvs.usecrlfattr
1712 guitool.
1713 gui.blamehistoryctx
1714 gui.commitmsgwidth
1715 gui.copyblamethreshold
1716 gui.diffcontext
1717 gui.encoding
1718 gui.fastcopyblame
1719 gui.matchtrackingbranch
1720 gui.newbranchtemplate
1721 gui.pruneduringfetch
1722 gui.spellingdictionary
1723 gui.trustmtime
1724 help.autocorrect
1725 help.browser
1726 help.format
1727 http.lowSpeedLimit
1728 http.lowSpeedTime
1729 http.maxRequests
1730 http.noEPSV
1731 http.proxy
1732 http.sslCAInfo
1733 http.sslCAPath
1734 http.sslCert
1735 http.sslKey
1736 http.sslVerify
1737 i18n.commitEncoding
1738 i18n.logOutputEncoding
1739 imap.folder
1740 imap.host
1741 imap.pass
1742 imap.port
1743 imap.preformattedHTML
1744 imap.sslverify
1745 imap.tunnel
1746 imap.user
1747 instaweb.browser
1748 instaweb.httpd
1749 instaweb.local
1750 instaweb.modulepath
1751 instaweb.port
1752 interactive.singlekey
1753 log.date
1754 log.showroot
1755 mailmap.file
1756 man.
1757 man.viewer
1758 merge.conflictstyle
1759 merge.log
1760 merge.renameLimit
1761 merge.stat
1762 merge.tool
1763 merge.verbosity
1764 mergetool.
1765 mergetool.keepBackup
1766 mergetool.prompt
1767 pack.compression
1768 pack.deltaCacheLimit
1769 pack.deltaCacheSize
1770 pack.depth
1771 pack.indexVersion
1772 pack.packSizeLimit
1773 pack.threads
1774 pack.window
1775 pack.windowMemory
1776 pager.
1777 pull.octopus
1778 pull.twohead
1779 push.default
1780 rebase.stat
1781 receive.denyCurrentBranch
1782 receive.denyDeletes
1783 receive.denyNonFastForwards
1784 receive.fsckObjects
1785 receive.unpackLimit
1786 repack.usedeltabaseoffset
1787 rerere.autoupdate
1788 rerere.enabled
1789 sendemail.aliasesfile
1790 sendemail.aliasesfiletype
1791 sendemail.bcc
1792 sendemail.cc
1793 sendemail.cccmd
1794 sendemail.chainreplyto
1795 sendemail.confirm
1796 sendemail.envelopesender
1797 sendemail.multiedit
1798 sendemail.signedoffbycc
1799 sendemail.smtpencryption
1800 sendemail.smtppass
1801 sendemail.smtpserver
1802 sendemail.smtpserverport
1803 sendemail.smtpuser
1804 sendemail.suppresscc
1805 sendemail.suppressfrom
1806 sendemail.thread
1807 sendemail.to
1808 sendemail.validate
1809 showbranch.default
1810 status.relativePaths
1811 status.showUntrackedFiles
1812 tar.umask
1813 transfer.unpackLimit
1814 url.
1815 user.email
1816 user.name
1817 user.signingkey
1818 web.browser
1819 branch. remote.
1823 _git_remote ()
1825 local subcommands="add rename rm show prune update set-head"
1826 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1827 if [ -z "$subcommand" ]; then
1828 __gitcomp "$subcommands"
1829 return
1832 case "$subcommand" in
1833 rename|rm|show|prune)
1834 __gitcomp "$(__git_remotes)"
1836 update)
1837 local i c='' IFS=$'\n'
1838 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
1839 i="${i#remotes.}"
1840 c="$c ${i/ */}"
1841 done
1842 __gitcomp "$c"
1845 COMPREPLY=()
1847 esac
1850 _git_replace ()
1852 __gitcomp "$(__git_refs)"
1855 _git_reset ()
1857 __git_has_doubledash && return
1859 local cur="${COMP_WORDS[COMP_CWORD]}"
1860 case "$cur" in
1861 --*)
1862 __gitcomp "--merge --mixed --hard --soft --patch"
1863 return
1865 esac
1866 __gitcomp "$(__git_refs)"
1869 _git_revert ()
1871 local cur="${COMP_WORDS[COMP_CWORD]}"
1872 case "$cur" in
1873 --*)
1874 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1875 return
1877 esac
1878 __gitcomp "$(__git_refs)"
1881 _git_rm ()
1883 __git_has_doubledash && return
1885 local cur="${COMP_WORDS[COMP_CWORD]}"
1886 case "$cur" in
1887 --*)
1888 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1889 return
1891 esac
1892 COMPREPLY=()
1895 _git_shortlog ()
1897 __git_has_doubledash && return
1899 local cur="${COMP_WORDS[COMP_CWORD]}"
1900 case "$cur" in
1901 --*)
1902 __gitcomp "
1903 $__git_log_common_options
1904 $__git_log_shortlog_options
1905 --numbered --summary
1907 return
1909 esac
1910 __git_complete_revlist
1913 _git_show ()
1915 __git_has_doubledash && return
1917 local cur="${COMP_WORDS[COMP_CWORD]}"
1918 case "$cur" in
1919 --pretty=*)
1920 __gitcomp "$__git_log_pretty_formats
1921 " "" "${cur##--pretty=}"
1922 return
1924 --format=*)
1925 __gitcomp "$__git_log_pretty_formats
1926 " "" "${cur##--format=}"
1927 return
1929 --*)
1930 __gitcomp "--pretty= --format= --abbrev-commit --oneline
1931 $__git_diff_common_options
1933 return
1935 esac
1936 __git_complete_file
1939 _git_show_branch ()
1941 local cur="${COMP_WORDS[COMP_CWORD]}"
1942 case "$cur" in
1943 --*)
1944 __gitcomp "
1945 --all --remotes --topo-order --current --more=
1946 --list --independent --merge-base --no-name
1947 --color --no-color
1948 --sha1-name --sparse --topics --reflog
1950 return
1952 esac
1953 __git_complete_revlist
1956 _git_stash ()
1958 local cur="${COMP_WORDS[COMP_CWORD]}"
1959 local save_opts='--keep-index --no-keep-index --quiet --patch'
1960 local subcommands='save list show apply clear drop pop create branch'
1961 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1962 if [ -z "$subcommand" ]; then
1963 case "$cur" in
1964 --*)
1965 __gitcomp "$save_opts"
1968 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
1969 __gitcomp "$subcommands"
1970 else
1971 COMPREPLY=()
1974 esac
1975 else
1976 case "$subcommand,$cur" in
1977 save,--*)
1978 __gitcomp "$save_opts"
1980 apply,--*|pop,--*)
1981 __gitcomp "--index --quiet"
1983 show,--*|drop,--*|branch,--*)
1984 COMPREPLY=()
1986 show,*|apply,*|drop,*|pop,*|branch,*)
1987 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1988 | sed -n -e 's/:.*//p')"
1991 COMPREPLY=()
1993 esac
1997 _git_submodule ()
1999 __git_has_doubledash && return
2001 local subcommands="add status init update summary foreach sync"
2002 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
2003 local cur="${COMP_WORDS[COMP_CWORD]}"
2004 case "$cur" in
2005 --*)
2006 __gitcomp "--quiet --cached"
2009 __gitcomp "$subcommands"
2011 esac
2012 return
2016 _git_svn ()
2018 local subcommands="
2019 init fetch clone rebase dcommit log find-rev
2020 set-tree commit-diff info create-ignore propget
2021 proplist show-ignore show-externals branch tag blame
2022 migrate mkdirs reset gc
2024 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2025 if [ -z "$subcommand" ]; then
2026 __gitcomp "$subcommands"
2027 else
2028 local remote_opts="--username= --config-dir= --no-auth-cache"
2029 local fc_opts="
2030 --follow-parent --authors-file= --repack=
2031 --no-metadata --use-svm-props --use-svnsync-props
2032 --log-window-size= --no-checkout --quiet
2033 --repack-flags --use-log-author --localtime
2034 --ignore-paths= $remote_opts
2036 local init_opts="
2037 --template= --shared= --trunk= --tags=
2038 --branches= --stdlayout --minimize-url
2039 --no-metadata --use-svm-props --use-svnsync-props
2040 --rewrite-root= --prefix= --use-log-author
2041 --add-author-from $remote_opts
2043 local cmt_opts="
2044 --edit --rmdir --find-copies-harder --copy-similarity=
2047 local cur="${COMP_WORDS[COMP_CWORD]}"
2048 case "$subcommand,$cur" in
2049 fetch,--*)
2050 __gitcomp "--revision= --fetch-all $fc_opts"
2052 clone,--*)
2053 __gitcomp "--revision= $fc_opts $init_opts"
2055 init,--*)
2056 __gitcomp "$init_opts"
2058 dcommit,--*)
2059 __gitcomp "
2060 --merge --strategy= --verbose --dry-run
2061 --fetch-all --no-rebase --commit-url
2062 --revision $cmt_opts $fc_opts
2065 set-tree,--*)
2066 __gitcomp "--stdin $cmt_opts $fc_opts"
2068 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
2069 show-externals,--*|mkdirs,--*)
2070 __gitcomp "--revision="
2072 log,--*)
2073 __gitcomp "
2074 --limit= --revision= --verbose --incremental
2075 --oneline --show-commit --non-recursive
2076 --authors-file= --color
2079 rebase,--*)
2080 __gitcomp "
2081 --merge --verbose --strategy= --local
2082 --fetch-all --dry-run $fc_opts
2085 commit-diff,--*)
2086 __gitcomp "--message= --file= --revision= $cmt_opts"
2088 info,--*)
2089 __gitcomp "--url"
2091 branch,--*)
2092 __gitcomp "--dry-run --message --tag"
2094 tag,--*)
2095 __gitcomp "--dry-run --message"
2097 blame,--*)
2098 __gitcomp "--git-format"
2100 migrate,--*)
2101 __gitcomp "
2102 --config-dir= --ignore-paths= --minimize
2103 --no-auth-cache --username=
2106 reset,--*)
2107 __gitcomp "--revision= --parent"
2110 COMPREPLY=()
2112 esac
2116 _git_tag ()
2118 local i c=1 f=0
2119 while [ $c -lt $COMP_CWORD ]; do
2120 i="${COMP_WORDS[c]}"
2121 case "$i" in
2122 -d|-v)
2123 __gitcomp "$(__git_tags)"
2124 return
2129 esac
2130 c=$((++c))
2131 done
2133 case "${COMP_WORDS[COMP_CWORD-1]}" in
2134 -m|-F)
2135 COMPREPLY=()
2137 -*|tag)
2138 if [ $f = 1 ]; then
2139 __gitcomp "$(__git_tags)"
2140 else
2141 COMPREPLY=()
2145 __gitcomp "$(__git_refs)"
2147 esac
2150 _git ()
2152 local i c=1 command __git_dir
2154 while [ $c -lt $COMP_CWORD ]; do
2155 i="${COMP_WORDS[c]}"
2156 case "$i" in
2157 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2158 --bare) __git_dir="." ;;
2159 --version|-p|--paginate) ;;
2160 --help) command="help"; break ;;
2161 *) command="$i"; break ;;
2162 esac
2163 c=$((++c))
2164 done
2166 if [ -z "$command" ]; then
2167 case "${COMP_WORDS[COMP_CWORD]}" in
2168 --*) __gitcomp "
2169 --paginate
2170 --no-pager
2171 --git-dir=
2172 --bare
2173 --version
2174 --exec-path
2175 --html-path
2176 --work-tree=
2177 --help
2180 *) __git_compute_porcelain_commands
2181 __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
2182 esac
2183 return
2186 local expansion=$(__git_aliased_command "$command")
2187 [ "$expansion" ] && command="$expansion"
2189 case "$command" in
2190 am) _git_am ;;
2191 add) _git_add ;;
2192 apply) _git_apply ;;
2193 archive) _git_archive ;;
2194 bisect) _git_bisect ;;
2195 bundle) _git_bundle ;;
2196 branch) _git_branch ;;
2197 checkout) _git_checkout ;;
2198 cherry) _git_cherry ;;
2199 cherry-pick) _git_cherry_pick ;;
2200 clean) _git_clean ;;
2201 clone) _git_clone ;;
2202 commit) _git_commit ;;
2203 config) _git_config ;;
2204 describe) _git_describe ;;
2205 diff) _git_diff ;;
2206 difftool) _git_difftool ;;
2207 fetch) _git_fetch ;;
2208 format-patch) _git_format_patch ;;
2209 fsck) _git_fsck ;;
2210 gc) _git_gc ;;
2211 grep) _git_grep ;;
2212 help) _git_help ;;
2213 init) _git_init ;;
2214 log) _git_log ;;
2215 ls-files) _git_ls_files ;;
2216 ls-remote) _git_ls_remote ;;
2217 ls-tree) _git_ls_tree ;;
2218 merge) _git_merge;;
2219 mergetool) _git_mergetool;;
2220 merge-base) _git_merge_base ;;
2221 mv) _git_mv ;;
2222 name-rev) _git_name_rev ;;
2223 pull) _git_pull ;;
2224 push) _git_push ;;
2225 rebase) _git_rebase ;;
2226 remote) _git_remote ;;
2227 replace) _git_replace ;;
2228 reset) _git_reset ;;
2229 revert) _git_revert ;;
2230 rm) _git_rm ;;
2231 send-email) _git_send_email ;;
2232 shortlog) _git_shortlog ;;
2233 show) _git_show ;;
2234 show-branch) _git_show_branch ;;
2235 stash) _git_stash ;;
2236 stage) _git_add ;;
2237 submodule) _git_submodule ;;
2238 svn) _git_svn ;;
2239 tag) _git_tag ;;
2240 whatchanged) _git_log ;;
2241 *) COMPREPLY=() ;;
2242 esac
2245 _gitk ()
2247 __git_has_doubledash && return
2249 local cur="${COMP_WORDS[COMP_CWORD]}"
2250 local g="$(__gitdir)"
2251 local merge=""
2252 if [ -f "$g/MERGE_HEAD" ]; then
2253 merge="--merge"
2255 case "$cur" in
2256 --*)
2257 __gitcomp "
2258 $__git_log_common_options
2259 $__git_log_gitk_options
2260 $merge
2262 return
2264 esac
2265 __git_complete_revlist
2268 complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \
2269 || complete -o default -o nospace -F _git git
2270 complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \
2271 || complete -o default -o nospace -F _gitk gitk
2273 # The following are necessary only for Cygwin, and only are needed
2274 # when the user has tab-completed the executable name and consequently
2275 # included the '.exe' suffix.
2277 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2278 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
2279 || complete -o default -o nospace -F _git git.exe