Merge branch 'maint-1.6.5' into maint
[git/gitweb.git] / contrib / completion / git-completion.bash
blob1a9943c012d2efc47132e09d383332cb5efaead2
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 if [ -n "${1-}" ]; then
165 printf "$1" "$c${b##refs/heads/}$w$i$s$u$r"
166 else
167 printf " (%s)" "$c${b##refs/heads/}$w$i$s$u$r"
172 # __gitcomp_1 requires 2 arguments
173 __gitcomp_1 ()
175 local c IFS=' '$'\t'$'\n'
176 for c in $1; do
177 case "$c$2" in
178 --*=*) printf %s$'\n' "$c$2" ;;
179 *.) printf %s$'\n' "$c$2" ;;
180 *) printf %s$'\n' "$c$2 " ;;
181 esac
182 done
185 # __gitcomp accepts 1, 2, 3, or 4 arguments
186 # generates completion reply with compgen
187 __gitcomp ()
189 local cur="${COMP_WORDS[COMP_CWORD]}"
190 if [ $# -gt 2 ]; then
191 cur="$3"
193 case "$cur" in
194 --*=)
195 COMPREPLY=()
198 local IFS=$'\n'
199 COMPREPLY=($(compgen -P "${2-}" \
200 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
201 -- "$cur"))
203 esac
206 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
207 __git_heads ()
209 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
210 if [ -d "$dir" ]; then
211 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
212 refs/heads
213 return
215 for i in $(git ls-remote "${1-}" 2>/dev/null); do
216 case "$is_hash,$i" in
217 y,*) is_hash=n ;;
218 n,*^{}) is_hash=y ;;
219 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
220 n,*) is_hash=y; echo "$i" ;;
221 esac
222 done
225 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
226 __git_tags ()
228 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
229 if [ -d "$dir" ]; then
230 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
231 refs/tags
232 return
234 for i in $(git ls-remote "${1-}" 2>/dev/null); do
235 case "$is_hash,$i" in
236 y,*) is_hash=n ;;
237 n,*^{}) is_hash=y ;;
238 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
239 n,*) is_hash=y; echo "$i" ;;
240 esac
241 done
244 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
245 __git_refs ()
247 local i is_hash=y dir="$(__gitdir "${1-}")"
248 local cur="${COMP_WORDS[COMP_CWORD]}" format refs
249 if [ -d "$dir" ]; then
250 case "$cur" in
251 refs|refs/*)
252 format="refname"
253 refs="${cur%/*}"
256 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
257 format="refname:short"
258 refs="refs/tags refs/heads refs/remotes"
260 esac
261 git --git-dir="$dir" for-each-ref --format="%($format)" \
262 $refs
263 return
265 for i in $(git ls-remote "$dir" 2>/dev/null); do
266 case "$is_hash,$i" in
267 y,*) is_hash=n ;;
268 n,*^{}) is_hash=y ;;
269 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
270 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
271 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
272 n,*) is_hash=y; echo "$i" ;;
273 esac
274 done
277 # __git_refs2 requires 1 argument (to pass to __git_refs)
278 __git_refs2 ()
280 local i
281 for i in $(__git_refs "$1"); do
282 echo "$i:$i"
283 done
286 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
287 __git_refs_remotes ()
289 local cmd i is_hash=y
290 for i in $(git ls-remote "$1" 2>/dev/null); do
291 case "$is_hash,$i" in
292 n,refs/heads/*)
293 is_hash=y
294 echo "$i:refs/remotes/$1/${i#refs/heads/}"
296 y,*) is_hash=n ;;
297 n,*^{}) is_hash=y ;;
298 n,refs/tags/*) is_hash=y;;
299 n,*) is_hash=y; ;;
300 esac
301 done
304 __git_remotes ()
306 local i ngoff IFS=$'\n' d="$(__gitdir)"
307 shopt -q nullglob || ngoff=1
308 shopt -s nullglob
309 for i in "$d/remotes"/*; do
310 echo ${i#$d/remotes/}
311 done
312 [ "$ngoff" ] && shopt -u nullglob
313 for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
314 i="${i#remote.}"
315 echo "${i/.url*/}"
316 done
319 __git_list_merge_strategies ()
321 git merge -s help 2>&1 |
322 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
323 s/\.$//
324 s/.*://
325 s/^[ ]*//
326 s/[ ]*$//
331 __git_merge_strategies=
332 # 'git merge -s help' (and thus detection of the merge strategy
333 # list) fails, unfortunately, if run outside of any git working
334 # tree. __git_merge_strategies is set to the empty string in
335 # that case, and the detection will be repeated the next time it
336 # is needed.
337 __git_compute_merge_strategies ()
339 : ${__git_merge_strategies:=$(__git_list_merge_strategies)}
342 __git_complete_file ()
344 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
345 case "$cur" in
346 ?*:*)
347 ref="${cur%%:*}"
348 cur="${cur#*:}"
349 case "$cur" in
350 ?*/*)
351 pfx="${cur%/*}"
352 cur="${cur##*/}"
353 ls="$ref:$pfx"
354 pfx="$pfx/"
357 ls="$ref"
359 esac
361 case "$COMP_WORDBREAKS" in
362 *:*) : great ;;
363 *) pfx="$ref:$pfx" ;;
364 esac
366 local IFS=$'\n'
367 COMPREPLY=($(compgen -P "$pfx" \
368 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
369 | sed '/^100... blob /{
370 s,^.* ,,
371 s,$, ,
373 /^120000 blob /{
374 s,^.* ,,
375 s,$, ,
377 /^040000 tree /{
378 s,^.* ,,
379 s,$,/,
381 s/^.* //')" \
382 -- "$cur"))
385 __gitcomp "$(__git_refs)"
387 esac
390 __git_complete_revlist ()
392 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
393 case "$cur" in
394 *...*)
395 pfx="${cur%...*}..."
396 cur="${cur#*...}"
397 __gitcomp "$(__git_refs)" "$pfx" "$cur"
399 *..*)
400 pfx="${cur%..*}.."
401 cur="${cur#*..}"
402 __gitcomp "$(__git_refs)" "$pfx" "$cur"
405 __gitcomp "$(__git_refs)"
407 esac
410 __git_complete_remote_or_refspec ()
412 local cmd="${COMP_WORDS[1]}"
413 local cur="${COMP_WORDS[COMP_CWORD]}"
414 local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
415 while [ $c -lt $COMP_CWORD ]; do
416 i="${COMP_WORDS[c]}"
417 case "$i" in
418 --mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
419 --all)
420 case "$cmd" in
421 push) no_complete_refspec=1 ;;
422 fetch)
423 COMPREPLY=()
424 return
426 *) ;;
427 esac
429 -*) ;;
430 *) remote="$i"; break ;;
431 esac
432 c=$((++c))
433 done
434 if [ -z "$remote" ]; then
435 __gitcomp "$(__git_remotes)"
436 return
438 if [ $no_complete_refspec = 1 ]; then
439 COMPREPLY=()
440 return
442 [ "$remote" = "." ] && remote=
443 case "$cur" in
444 *:*)
445 case "$COMP_WORDBREAKS" in
446 *:*) : great ;;
447 *) pfx="${cur%%:*}:" ;;
448 esac
449 cur="${cur#*:}"
450 lhs=0
453 pfx="+"
454 cur="${cur#+}"
456 esac
457 case "$cmd" in
458 fetch)
459 if [ $lhs = 1 ]; then
460 __gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
461 else
462 __gitcomp "$(__git_refs)" "$pfx" "$cur"
465 pull)
466 if [ $lhs = 1 ]; then
467 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
468 else
469 __gitcomp "$(__git_refs)" "$pfx" "$cur"
472 push)
473 if [ $lhs = 1 ]; then
474 __gitcomp "$(__git_refs)" "$pfx" "$cur"
475 else
476 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
479 esac
482 __git_complete_strategy ()
484 __git_compute_merge_strategies
485 case "${COMP_WORDS[COMP_CWORD-1]}" in
486 -s|--strategy)
487 __gitcomp "$__git_merge_strategies"
488 return 0
489 esac
490 local cur="${COMP_WORDS[COMP_CWORD]}"
491 case "$cur" in
492 --strategy=*)
493 __gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
494 return 0
496 esac
497 return 1
500 __git_list_all_commands ()
502 local i IFS=" "$'\n'
503 for i in $(git help -a|egrep '^ [a-zA-Z0-9]')
505 case $i in
506 *--*) : helper pattern;;
507 *) echo $i;;
508 esac
509 done
512 __git_all_commands=
513 __git_compute_all_commands ()
515 : ${__git_all_commands:=$(__git_list_all_commands)}
518 __git_list_porcelain_commands ()
520 local i IFS=" "$'\n'
521 __git_compute_all_commands
522 for i in "help" $__git_all_commands
524 case $i in
525 *--*) : helper pattern;;
526 applymbox) : ask gittus;;
527 applypatch) : ask gittus;;
528 archimport) : import;;
529 cat-file) : plumbing;;
530 check-attr) : plumbing;;
531 check-ref-format) : plumbing;;
532 checkout-index) : plumbing;;
533 commit-tree) : plumbing;;
534 count-objects) : infrequent;;
535 cvsexportcommit) : export;;
536 cvsimport) : import;;
537 cvsserver) : daemon;;
538 daemon) : daemon;;
539 diff-files) : plumbing;;
540 diff-index) : plumbing;;
541 diff-tree) : plumbing;;
542 fast-import) : import;;
543 fast-export) : export;;
544 fsck-objects) : plumbing;;
545 fetch-pack) : plumbing;;
546 fmt-merge-msg) : plumbing;;
547 for-each-ref) : plumbing;;
548 hash-object) : plumbing;;
549 http-*) : transport;;
550 index-pack) : plumbing;;
551 init-db) : deprecated;;
552 local-fetch) : plumbing;;
553 lost-found) : infrequent;;
554 ls-files) : plumbing;;
555 ls-remote) : plumbing;;
556 ls-tree) : plumbing;;
557 mailinfo) : plumbing;;
558 mailsplit) : plumbing;;
559 merge-*) : plumbing;;
560 mktree) : plumbing;;
561 mktag) : plumbing;;
562 pack-objects) : plumbing;;
563 pack-redundant) : plumbing;;
564 pack-refs) : plumbing;;
565 parse-remote) : plumbing;;
566 patch-id) : plumbing;;
567 peek-remote) : plumbing;;
568 prune) : plumbing;;
569 prune-packed) : plumbing;;
570 quiltimport) : import;;
571 read-tree) : plumbing;;
572 receive-pack) : plumbing;;
573 reflog) : plumbing;;
574 repo-config) : deprecated;;
575 rerere) : plumbing;;
576 rev-list) : plumbing;;
577 rev-parse) : plumbing;;
578 runstatus) : plumbing;;
579 sh-setup) : internal;;
580 shell) : daemon;;
581 show-ref) : plumbing;;
582 send-pack) : plumbing;;
583 show-index) : plumbing;;
584 ssh-*) : transport;;
585 stripspace) : plumbing;;
586 symbolic-ref) : plumbing;;
587 tar-tree) : deprecated;;
588 unpack-file) : plumbing;;
589 unpack-objects) : plumbing;;
590 update-index) : plumbing;;
591 update-ref) : plumbing;;
592 update-server-info) : daemon;;
593 upload-archive) : plumbing;;
594 upload-pack) : plumbing;;
595 write-tree) : plumbing;;
596 var) : infrequent;;
597 verify-pack) : infrequent;;
598 verify-tag) : plumbing;;
599 *) echo $i;;
600 esac
601 done
604 __git_porcelain_commands=
605 __git_compute_porcelain_commands ()
607 __git_compute_all_commands
608 : ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}
611 __git_aliases ()
613 local i IFS=$'\n'
614 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
615 case "$i" in
616 alias.*)
617 i="${i#alias.}"
618 echo "${i/ */}"
620 esac
621 done
624 # __git_aliased_command requires 1 argument
625 __git_aliased_command ()
627 local word cmdline=$(git --git-dir="$(__gitdir)" \
628 config --get "alias.$1")
629 for word in $cmdline; do
630 if [ "${word##-*}" ]; then
631 echo $word
632 return
634 done
637 # __git_find_on_cmdline requires 1 argument
638 __git_find_on_cmdline ()
640 local word subcommand c=1
642 while [ $c -lt $COMP_CWORD ]; do
643 word="${COMP_WORDS[c]}"
644 for subcommand in $1; do
645 if [ "$subcommand" = "$word" ]; then
646 echo "$subcommand"
647 return
649 done
650 c=$((++c))
651 done
654 __git_has_doubledash ()
656 local c=1
657 while [ $c -lt $COMP_CWORD ]; do
658 if [ "--" = "${COMP_WORDS[c]}" ]; then
659 return 0
661 c=$((++c))
662 done
663 return 1
666 __git_whitespacelist="nowarn warn error error-all fix"
668 _git_am ()
670 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
671 if [ -d "$dir"/rebase-apply ]; then
672 __gitcomp "--skip --resolved --abort"
673 return
675 case "$cur" in
676 --whitespace=*)
677 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
678 return
680 --*)
681 __gitcomp "
682 --3way --committer-date-is-author-date --ignore-date
683 --ignore-whitespace --ignore-space-change
684 --interactive --keep --no-utf8 --signoff --utf8
685 --whitespace= --scissors
687 return
688 esac
689 COMPREPLY=()
692 _git_apply ()
694 local cur="${COMP_WORDS[COMP_CWORD]}"
695 case "$cur" in
696 --whitespace=*)
697 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
698 return
700 --*)
701 __gitcomp "
702 --stat --numstat --summary --check --index
703 --cached --index-info --reverse --reject --unidiff-zero
704 --apply --no-add --exclude=
705 --ignore-whitespace --ignore-space-change
706 --whitespace= --inaccurate-eof --verbose
708 return
709 esac
710 COMPREPLY=()
713 _git_add ()
715 __git_has_doubledash && return
717 local cur="${COMP_WORDS[COMP_CWORD]}"
718 case "$cur" in
719 --*)
720 __gitcomp "
721 --interactive --refresh --patch --update --dry-run
722 --ignore-errors --intent-to-add
724 return
725 esac
726 COMPREPLY=()
729 _git_archive ()
731 local cur="${COMP_WORDS[COMP_CWORD]}"
732 case "$cur" in
733 --format=*)
734 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
735 return
737 --remote=*)
738 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
739 return
741 --*)
742 __gitcomp "
743 --format= --list --verbose
744 --prefix= --remote= --exec=
746 return
748 esac
749 __git_complete_file
752 _git_bisect ()
754 __git_has_doubledash && return
756 local subcommands="start bad good skip reset visualize replay log run"
757 local subcommand="$(__git_find_on_cmdline "$subcommands")"
758 if [ -z "$subcommand" ]; then
759 __gitcomp "$subcommands"
760 return
763 case "$subcommand" in
764 bad|good|reset|skip)
765 __gitcomp "$(__git_refs)"
768 COMPREPLY=()
770 esac
773 _git_branch ()
775 local i c=1 only_local_ref="n" has_r="n"
777 while [ $c -lt $COMP_CWORD ]; do
778 i="${COMP_WORDS[c]}"
779 case "$i" in
780 -d|-m) only_local_ref="y" ;;
781 -r) has_r="y" ;;
782 esac
783 c=$((++c))
784 done
786 case "${COMP_WORDS[COMP_CWORD]}" in
787 --*)
788 __gitcomp "
789 --color --no-color --verbose --abbrev= --no-abbrev
790 --track --no-track --contains --merged --no-merged
794 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
795 __gitcomp "$(__git_heads)"
796 else
797 __gitcomp "$(__git_refs)"
800 esac
803 _git_bundle ()
805 local cmd="${COMP_WORDS[2]}"
806 case "$COMP_CWORD" in
808 __gitcomp "create list-heads verify unbundle"
811 # looking for a file
814 case "$cmd" in
815 create)
816 __git_complete_revlist
818 esac
820 esac
823 _git_checkout ()
825 __git_has_doubledash && return
827 local cur="${COMP_WORDS[COMP_CWORD]}"
828 case "$cur" in
829 --conflict=*)
830 __gitcomp "diff3 merge" "" "${cur##--conflict=}"
832 --*)
833 __gitcomp "
834 --quiet --ours --theirs --track --no-track --merge
835 --conflict= --patch
839 __gitcomp "$(__git_refs)"
841 esac
844 _git_cherry ()
846 __gitcomp "$(__git_refs)"
849 _git_cherry_pick ()
851 local cur="${COMP_WORDS[COMP_CWORD]}"
852 case "$cur" in
853 --*)
854 __gitcomp "--edit --no-commit"
857 __gitcomp "$(__git_refs)"
859 esac
862 _git_clean ()
864 __git_has_doubledash && return
866 local cur="${COMP_WORDS[COMP_CWORD]}"
867 case "$cur" in
868 --*)
869 __gitcomp "--dry-run --quiet"
870 return
872 esac
873 COMPREPLY=()
876 _git_clone ()
878 local cur="${COMP_WORDS[COMP_CWORD]}"
879 case "$cur" in
880 --*)
881 __gitcomp "
882 --local
883 --no-hardlinks
884 --shared
885 --reference
886 --quiet
887 --no-checkout
888 --bare
889 --mirror
890 --origin
891 --upload-pack
892 --template=
893 --depth
895 return
897 esac
898 COMPREPLY=()
901 _git_commit ()
903 __git_has_doubledash && return
905 local cur="${COMP_WORDS[COMP_CWORD]}"
906 case "$cur" in
907 --cleanup=*)
908 __gitcomp "default strip verbatim whitespace
909 " "" "${cur##--cleanup=}"
910 return
912 --reuse-message=*)
913 __gitcomp "$(__git_refs)" "" "${cur##--reuse-message=}"
914 return
916 --reedit-message=*)
917 __gitcomp "$(__git_refs)" "" "${cur##--reedit-message=}"
918 return
920 --untracked-files=*)
921 __gitcomp "all no normal" "" "${cur##--untracked-files=}"
922 return
924 --*)
925 __gitcomp "
926 --all --author= --signoff --verify --no-verify
927 --edit --amend --include --only --interactive
928 --dry-run --reuse-message= --reedit-message=
929 --reset-author --file= --message= --template=
930 --cleanup= --untracked-files --untracked-files=
931 --verbose --quiet
933 return
934 esac
935 COMPREPLY=()
938 _git_describe ()
940 local cur="${COMP_WORDS[COMP_CWORD]}"
941 case "$cur" in
942 --*)
943 __gitcomp "
944 --all --tags --contains --abbrev= --candidates=
945 --exact-match --debug --long --match --always
947 return
948 esac
949 __gitcomp "$(__git_refs)"
952 __git_diff_common_options="--stat --numstat --shortstat --summary
953 --patch-with-stat --name-only --name-status --color
954 --no-color --color-words --no-renames --check
955 --full-index --binary --abbrev --diff-filter=
956 --find-copies-harder
957 --text --ignore-space-at-eol --ignore-space-change
958 --ignore-all-space --exit-code --quiet --ext-diff
959 --no-ext-diff
960 --no-prefix --src-prefix= --dst-prefix=
961 --inter-hunk-context=
962 --patience
963 --raw
964 --dirstat --dirstat= --dirstat-by-file
965 --dirstat-by-file= --cumulative
968 _git_diff ()
970 __git_has_doubledash && return
972 local cur="${COMP_WORDS[COMP_CWORD]}"
973 case "$cur" in
974 --*)
975 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
976 --base --ours --theirs
977 $__git_diff_common_options
979 return
981 esac
982 __git_complete_file
985 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
986 tkdiff vimdiff gvimdiff xxdiff araxis p4merge
989 _git_difftool ()
991 __git_has_doubledash && return
993 local cur="${COMP_WORDS[COMP_CWORD]}"
994 case "$cur" in
995 --tool=*)
996 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
997 return
999 --*)
1000 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
1001 --base --ours --theirs
1002 --no-renames --diff-filter= --find-copies-harder
1003 --relative --ignore-submodules
1004 --tool="
1005 return
1007 esac
1008 __git_complete_file
1011 __git_fetch_options="
1012 --quiet --verbose --append --upload-pack --force --keep --depth=
1013 --tags --no-tags --all --prune --dry-run
1016 _git_fetch ()
1018 local cur="${COMP_WORDS[COMP_CWORD]}"
1019 case "$cur" in
1020 --*)
1021 __gitcomp "$__git_fetch_options"
1022 return
1024 esac
1025 __git_complete_remote_or_refspec
1028 _git_format_patch ()
1030 local cur="${COMP_WORDS[COMP_CWORD]}"
1031 case "$cur" in
1032 --thread=*)
1033 __gitcomp "
1034 deep shallow
1035 " "" "${cur##--thread=}"
1036 return
1038 --*)
1039 __gitcomp "
1040 --stdout --attach --no-attach --thread --thread=
1041 --output-directory
1042 --numbered --start-number
1043 --numbered-files
1044 --keep-subject
1045 --signoff
1046 --in-reply-to= --cc=
1047 --full-index --binary
1048 --not --all
1049 --cover-letter
1050 --no-prefix --src-prefix= --dst-prefix=
1051 --inline --suffix= --ignore-if-in-upstream
1052 --subject-prefix=
1054 return
1056 esac
1057 __git_complete_revlist
1060 _git_fsck ()
1062 local cur="${COMP_WORDS[COMP_CWORD]}"
1063 case "$cur" in
1064 --*)
1065 __gitcomp "
1066 --tags --root --unreachable --cache --no-reflogs --full
1067 --strict --verbose --lost-found
1069 return
1071 esac
1072 COMPREPLY=()
1075 _git_gc ()
1077 local cur="${COMP_WORDS[COMP_CWORD]}"
1078 case "$cur" in
1079 --*)
1080 __gitcomp "--prune --aggressive"
1081 return
1083 esac
1084 COMPREPLY=()
1087 _git_grep ()
1089 __git_has_doubledash && return
1091 local cur="${COMP_WORDS[COMP_CWORD]}"
1092 case "$cur" in
1093 --*)
1094 __gitcomp "
1095 --cached
1096 --text --ignore-case --word-regexp --invert-match
1097 --full-name
1098 --extended-regexp --basic-regexp --fixed-strings
1099 --files-with-matches --name-only
1100 --files-without-match
1101 --max-depth
1102 --count
1103 --and --or --not --all-match
1105 return
1107 esac
1109 __gitcomp "$(__git_refs)"
1112 _git_help ()
1114 local cur="${COMP_WORDS[COMP_CWORD]}"
1115 case "$cur" in
1116 --*)
1117 __gitcomp "--all --info --man --web"
1118 return
1120 esac
1121 __git_compute_all_commands
1122 __gitcomp "$__git_all_commands
1123 attributes cli core-tutorial cvs-migration
1124 diffcore gitk glossary hooks ignore modules
1125 repository-layout tutorial tutorial-2
1126 workflows
1130 _git_init ()
1132 local cur="${COMP_WORDS[COMP_CWORD]}"
1133 case "$cur" in
1134 --shared=*)
1135 __gitcomp "
1136 false true umask group all world everybody
1137 " "" "${cur##--shared=}"
1138 return
1140 --*)
1141 __gitcomp "--quiet --bare --template= --shared --shared="
1142 return
1144 esac
1145 COMPREPLY=()
1148 _git_ls_files ()
1150 __git_has_doubledash && return
1152 local cur="${COMP_WORDS[COMP_CWORD]}"
1153 case "$cur" in
1154 --*)
1155 __gitcomp "--cached --deleted --modified --others --ignored
1156 --stage --directory --no-empty-directory --unmerged
1157 --killed --exclude= --exclude-from=
1158 --exclude-per-directory= --exclude-standard
1159 --error-unmatch --with-tree= --full-name
1160 --abbrev --ignored --exclude-per-directory
1162 return
1164 esac
1165 COMPREPLY=()
1168 _git_ls_remote ()
1170 __gitcomp "$(__git_remotes)"
1173 _git_ls_tree ()
1175 __git_complete_file
1178 # Options that go well for log, shortlog and gitk
1179 __git_log_common_options="
1180 --not --all
1181 --branches --tags --remotes
1182 --first-parent --merges --no-merges
1183 --max-count=
1184 --max-age= --since= --after=
1185 --min-age= --until= --before=
1187 # Options that go well for log and gitk (not shortlog)
1188 __git_log_gitk_options="
1189 --dense --sparse --full-history
1190 --simplify-merges --simplify-by-decoration
1191 --left-right
1193 # Options that go well for log and shortlog (not gitk)
1194 __git_log_shortlog_options="
1195 --author= --committer= --grep=
1196 --all-match
1199 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1200 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1202 _git_log ()
1204 __git_has_doubledash && return
1206 local cur="${COMP_WORDS[COMP_CWORD]}"
1207 local g="$(git rev-parse --git-dir 2>/dev/null)"
1208 local merge=""
1209 if [ -f "$g/MERGE_HEAD" ]; then
1210 merge="--merge"
1212 case "$cur" in
1213 --pretty=*)
1214 __gitcomp "$__git_log_pretty_formats
1215 " "" "${cur##--pretty=}"
1216 return
1218 --format=*)
1219 __gitcomp "$__git_log_pretty_formats
1220 " "" "${cur##--format=}"
1221 return
1223 --date=*)
1224 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1225 return
1227 --decorate=*)
1228 __gitcomp "long short" "" "${cur##--decorate=}"
1229 return
1231 --*)
1232 __gitcomp "
1233 $__git_log_common_options
1234 $__git_log_shortlog_options
1235 $__git_log_gitk_options
1236 --root --topo-order --date-order --reverse
1237 --follow --full-diff
1238 --abbrev-commit --abbrev=
1239 --relative-date --date=
1240 --pretty= --format= --oneline
1241 --cherry-pick
1242 --graph
1243 --decorate --decorate=
1244 --walk-reflogs
1245 --parents --children
1246 $merge
1247 $__git_diff_common_options
1248 --pickaxe-all --pickaxe-regex
1250 return
1252 esac
1253 __git_complete_revlist
1256 __git_merge_options="
1257 --no-commit --no-stat --log --no-log --squash --strategy
1258 --commit --stat --no-squash --ff --no-ff --ff-only
1261 _git_merge ()
1263 __git_complete_strategy && return
1265 local cur="${COMP_WORDS[COMP_CWORD]}"
1266 case "$cur" in
1267 --*)
1268 __gitcomp "$__git_merge_options"
1269 return
1270 esac
1271 __gitcomp "$(__git_refs)"
1274 _git_mergetool ()
1276 local cur="${COMP_WORDS[COMP_CWORD]}"
1277 case "$cur" in
1278 --tool=*)
1279 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1280 return
1282 --*)
1283 __gitcomp "--tool="
1284 return
1286 esac
1287 COMPREPLY=()
1290 _git_merge_base ()
1292 __gitcomp "$(__git_refs)"
1295 _git_mv ()
1297 local cur="${COMP_WORDS[COMP_CWORD]}"
1298 case "$cur" in
1299 --*)
1300 __gitcomp "--dry-run"
1301 return
1303 esac
1304 COMPREPLY=()
1307 _git_name_rev ()
1309 __gitcomp "--tags --all --stdin"
1312 _git_pull ()
1314 __git_complete_strategy && return
1316 local cur="${COMP_WORDS[COMP_CWORD]}"
1317 case "$cur" in
1318 --*)
1319 __gitcomp "
1320 --rebase --no-rebase
1321 $__git_merge_options
1322 $__git_fetch_options
1324 return
1326 esac
1327 __git_complete_remote_or_refspec
1330 _git_push ()
1332 local cur="${COMP_WORDS[COMP_CWORD]}"
1333 case "${COMP_WORDS[COMP_CWORD-1]}" in
1334 --repo)
1335 __gitcomp "$(__git_remotes)"
1336 return
1337 esac
1338 case "$cur" in
1339 --repo=*)
1340 __gitcomp "$(__git_remotes)" "" "${cur##--repo=}"
1341 return
1343 --*)
1344 __gitcomp "
1345 --all --mirror --tags --dry-run --force --verbose
1346 --receive-pack= --repo=
1348 return
1350 esac
1351 __git_complete_remote_or_refspec
1354 _git_rebase ()
1356 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1357 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1358 __gitcomp "--continue --skip --abort"
1359 return
1361 __git_complete_strategy && return
1362 case "$cur" in
1363 --whitespace=*)
1364 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
1365 return
1367 --*)
1368 __gitcomp "
1369 --onto --merge --strategy --interactive
1370 --preserve-merges --stat --no-stat
1371 --committer-date-is-author-date --ignore-date
1372 --ignore-whitespace --whitespace=
1375 return
1376 esac
1377 __gitcomp "$(__git_refs)"
1380 __git_send_email_confirm_options="always never auto cc compose"
1381 __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
1383 _git_send_email ()
1385 local cur="${COMP_WORDS[COMP_CWORD]}"
1386 case "$cur" in
1387 --confirm=*)
1388 __gitcomp "
1389 $__git_send_email_confirm_options
1390 " "" "${cur##--confirm=}"
1391 return
1393 --suppress-cc=*)
1394 __gitcomp "
1395 $__git_send_email_suppresscc_options
1396 " "" "${cur##--suppress-cc=}"
1398 return
1400 --smtp-encryption=*)
1401 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1402 return
1404 --*)
1405 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1406 --compose --confirm= --dry-run --envelope-sender
1407 --from --identity
1408 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1409 --no-suppress-from --no-thread --quiet
1410 --signed-off-by-cc --smtp-pass --smtp-server
1411 --smtp-server-port --smtp-encryption= --smtp-user
1412 --subject --suppress-cc= --suppress-from --thread --to
1413 --validate --no-validate"
1414 return
1416 esac
1417 COMPREPLY=()
1420 __git_config_get_set_variables ()
1422 local prevword word config_file= c=$COMP_CWORD
1423 while [ $c -gt 1 ]; do
1424 word="${COMP_WORDS[c]}"
1425 case "$word" in
1426 --global|--system|--file=*)
1427 config_file="$word"
1428 break
1430 -f|--file)
1431 config_file="$word $prevword"
1432 break
1434 esac
1435 prevword=$word
1436 c=$((--c))
1437 done
1439 git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
1440 while read line
1442 case "$line" in
1443 *.*=*)
1444 echo "${line/=*/}"
1446 esac
1447 done
1450 _git_config ()
1452 local cur="${COMP_WORDS[COMP_CWORD]}"
1453 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1454 case "$prv" in
1455 branch.*.remote)
1456 __gitcomp "$(__git_remotes)"
1457 return
1459 branch.*.merge)
1460 __gitcomp "$(__git_refs)"
1461 return
1463 remote.*.fetch)
1464 local remote="${prv#remote.}"
1465 remote="${remote%.fetch}"
1466 __gitcomp "$(__git_refs_remotes "$remote")"
1467 return
1469 remote.*.push)
1470 local remote="${prv#remote.}"
1471 remote="${remote%.push}"
1472 __gitcomp "$(git --git-dir="$(__gitdir)" \
1473 for-each-ref --format='%(refname):%(refname)' \
1474 refs/heads)"
1475 return
1477 pull.twohead|pull.octopus)
1478 __git_compute_merge_strategies
1479 __gitcomp "$__git_merge_strategies"
1480 return
1482 color.branch|color.diff|color.interactive|\
1483 color.showbranch|color.status|color.ui)
1484 __gitcomp "always never auto"
1485 return
1487 color.pager)
1488 __gitcomp "false true"
1489 return
1491 color.*.*)
1492 __gitcomp "
1493 normal black red green yellow blue magenta cyan white
1494 bold dim ul blink reverse
1496 return
1498 help.format)
1499 __gitcomp "man info web html"
1500 return
1502 log.date)
1503 __gitcomp "$__git_log_date_formats"
1504 return
1506 sendemail.aliasesfiletype)
1507 __gitcomp "mutt mailrc pine elm gnus"
1508 return
1510 sendemail.confirm)
1511 __gitcomp "$__git_send_email_confirm_options"
1512 return
1514 sendemail.suppresscc)
1515 __gitcomp "$__git_send_email_suppresscc_options"
1516 return
1518 --get|--get-all|--unset|--unset-all)
1519 __gitcomp "$(__git_config_get_set_variables)"
1520 return
1522 *.*)
1523 COMPREPLY=()
1524 return
1526 esac
1527 case "$cur" in
1528 --*)
1529 __gitcomp "
1530 --global --system --file=
1531 --list --replace-all
1532 --get --get-all --get-regexp
1533 --add --unset --unset-all
1534 --remove-section --rename-section
1536 return
1538 branch.*.*)
1539 local pfx="${cur%.*}."
1540 cur="${cur##*.}"
1541 __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur"
1542 return
1544 branch.*)
1545 local pfx="${cur%.*}."
1546 cur="${cur#*.}"
1547 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1548 return
1550 guitool.*.*)
1551 local pfx="${cur%.*}."
1552 cur="${cur##*.}"
1553 __gitcomp "
1554 argprompt cmd confirm needsfile noconsole norescan
1555 prompt revprompt revunmerged title
1556 " "$pfx" "$cur"
1557 return
1559 difftool.*.*)
1560 local pfx="${cur%.*}."
1561 cur="${cur##*.}"
1562 __gitcomp "cmd path" "$pfx" "$cur"
1563 return
1565 man.*.*)
1566 local pfx="${cur%.*}."
1567 cur="${cur##*.}"
1568 __gitcomp "cmd path" "$pfx" "$cur"
1569 return
1571 mergetool.*.*)
1572 local pfx="${cur%.*}."
1573 cur="${cur##*.}"
1574 __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
1575 return
1577 pager.*)
1578 local pfx="${cur%.*}."
1579 cur="${cur#*.}"
1580 __git_compute_all_commands
1581 __gitcomp "$__git_all_commands" "$pfx" "$cur"
1582 return
1584 remote.*.*)
1585 local pfx="${cur%.*}."
1586 cur="${cur##*.}"
1587 __gitcomp "
1588 url proxy fetch push mirror skipDefaultUpdate
1589 receivepack uploadpack tagopt pushurl
1590 " "$pfx" "$cur"
1591 return
1593 remote.*)
1594 local pfx="${cur%.*}."
1595 cur="${cur#*.}"
1596 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1597 return
1599 url.*.*)
1600 local pfx="${cur%.*}."
1601 cur="${cur##*.}"
1602 __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur"
1603 return
1605 esac
1606 __gitcomp "
1607 add.ignore-errors
1608 alias.
1609 apply.ignorewhitespace
1610 apply.whitespace
1611 branch.autosetupmerge
1612 branch.autosetuprebase
1613 clean.requireForce
1614 color.branch
1615 color.branch.current
1616 color.branch.local
1617 color.branch.plain
1618 color.branch.remote
1619 color.diff
1620 color.diff.commit
1621 color.diff.frag
1622 color.diff.meta
1623 color.diff.new
1624 color.diff.old
1625 color.diff.plain
1626 color.diff.whitespace
1627 color.grep
1628 color.grep.external
1629 color.grep.match
1630 color.interactive
1631 color.interactive.header
1632 color.interactive.help
1633 color.interactive.prompt
1634 color.pager
1635 color.showbranch
1636 color.status
1637 color.status.added
1638 color.status.changed
1639 color.status.header
1640 color.status.nobranch
1641 color.status.untracked
1642 color.status.updated
1643 color.ui
1644 commit.template
1645 core.autocrlf
1646 core.bare
1647 core.compression
1648 core.createObject
1649 core.deltaBaseCacheLimit
1650 core.editor
1651 core.excludesfile
1652 core.fileMode
1653 core.fsyncobjectfiles
1654 core.gitProxy
1655 core.ignoreCygwinFSTricks
1656 core.ignoreStat
1657 core.logAllRefUpdates
1658 core.loosecompression
1659 core.packedGitLimit
1660 core.packedGitWindowSize
1661 core.pager
1662 core.preferSymlinkRefs
1663 core.preloadindex
1664 core.quotepath
1665 core.repositoryFormatVersion
1666 core.safecrlf
1667 core.sharedRepository
1668 core.symlinks
1669 core.trustctime
1670 core.warnAmbiguousRefs
1671 core.whitespace
1672 core.worktree
1673 diff.autorefreshindex
1674 diff.external
1675 diff.mnemonicprefix
1676 diff.renameLimit
1677 diff.renameLimit.
1678 diff.renames
1679 diff.suppressBlankEmpty
1680 diff.tool
1681 diff.wordRegex
1682 difftool.
1683 difftool.prompt
1684 fetch.unpackLimit
1685 format.attach
1686 format.cc
1687 format.headers
1688 format.numbered
1689 format.pretty
1690 format.signoff
1691 format.subjectprefix
1692 format.suffix
1693 format.thread
1694 gc.aggressiveWindow
1695 gc.auto
1696 gc.autopacklimit
1697 gc.packrefs
1698 gc.pruneexpire
1699 gc.reflogexpire
1700 gc.reflogexpireunreachable
1701 gc.rerereresolved
1702 gc.rerereunresolved
1703 gitcvs.allbinary
1704 gitcvs.commitmsgannotation
1705 gitcvs.dbTableNamePrefix
1706 gitcvs.dbdriver
1707 gitcvs.dbname
1708 gitcvs.dbpass
1709 gitcvs.dbuser
1710 gitcvs.enabled
1711 gitcvs.logfile
1712 gitcvs.usecrlfattr
1713 guitool.
1714 gui.blamehistoryctx
1715 gui.commitmsgwidth
1716 gui.copyblamethreshold
1717 gui.diffcontext
1718 gui.encoding
1719 gui.fastcopyblame
1720 gui.matchtrackingbranch
1721 gui.newbranchtemplate
1722 gui.pruneduringfetch
1723 gui.spellingdictionary
1724 gui.trustmtime
1725 help.autocorrect
1726 help.browser
1727 help.format
1728 http.lowSpeedLimit
1729 http.lowSpeedTime
1730 http.maxRequests
1731 http.noEPSV
1732 http.proxy
1733 http.sslCAInfo
1734 http.sslCAPath
1735 http.sslCert
1736 http.sslKey
1737 http.sslVerify
1738 i18n.commitEncoding
1739 i18n.logOutputEncoding
1740 imap.folder
1741 imap.host
1742 imap.pass
1743 imap.port
1744 imap.preformattedHTML
1745 imap.sslverify
1746 imap.tunnel
1747 imap.user
1748 instaweb.browser
1749 instaweb.httpd
1750 instaweb.local
1751 instaweb.modulepath
1752 instaweb.port
1753 interactive.singlekey
1754 log.date
1755 log.showroot
1756 mailmap.file
1757 man.
1758 man.viewer
1759 merge.conflictstyle
1760 merge.log
1761 merge.renameLimit
1762 merge.stat
1763 merge.tool
1764 merge.verbosity
1765 mergetool.
1766 mergetool.keepBackup
1767 mergetool.prompt
1768 pack.compression
1769 pack.deltaCacheLimit
1770 pack.deltaCacheSize
1771 pack.depth
1772 pack.indexVersion
1773 pack.packSizeLimit
1774 pack.threads
1775 pack.window
1776 pack.windowMemory
1777 pager.
1778 pull.octopus
1779 pull.twohead
1780 push.default
1781 rebase.stat
1782 receive.denyCurrentBranch
1783 receive.denyDeletes
1784 receive.denyNonFastForwards
1785 receive.fsckObjects
1786 receive.unpackLimit
1787 repack.usedeltabaseoffset
1788 rerere.autoupdate
1789 rerere.enabled
1790 sendemail.aliasesfile
1791 sendemail.aliasesfiletype
1792 sendemail.bcc
1793 sendemail.cc
1794 sendemail.cccmd
1795 sendemail.chainreplyto
1796 sendemail.confirm
1797 sendemail.envelopesender
1798 sendemail.multiedit
1799 sendemail.signedoffbycc
1800 sendemail.smtpencryption
1801 sendemail.smtppass
1802 sendemail.smtpserver
1803 sendemail.smtpserverport
1804 sendemail.smtpuser
1805 sendemail.suppresscc
1806 sendemail.suppressfrom
1807 sendemail.thread
1808 sendemail.to
1809 sendemail.validate
1810 showbranch.default
1811 status.relativePaths
1812 status.showUntrackedFiles
1813 tar.umask
1814 transfer.unpackLimit
1815 url.
1816 user.email
1817 user.name
1818 user.signingkey
1819 web.browser
1820 branch. remote.
1824 _git_remote ()
1826 local subcommands="add rename rm show prune update set-head"
1827 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1828 if [ -z "$subcommand" ]; then
1829 __gitcomp "$subcommands"
1830 return
1833 case "$subcommand" in
1834 rename|rm|show|prune)
1835 __gitcomp "$(__git_remotes)"
1837 update)
1838 local i c='' IFS=$'\n'
1839 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
1840 i="${i#remotes.}"
1841 c="$c ${i/ */}"
1842 done
1843 __gitcomp "$c"
1846 COMPREPLY=()
1848 esac
1851 _git_replace ()
1853 __gitcomp "$(__git_refs)"
1856 _git_reset ()
1858 __git_has_doubledash && return
1860 local cur="${COMP_WORDS[COMP_CWORD]}"
1861 case "$cur" in
1862 --*)
1863 __gitcomp "--merge --mixed --hard --soft --patch"
1864 return
1866 esac
1867 __gitcomp "$(__git_refs)"
1870 _git_revert ()
1872 local cur="${COMP_WORDS[COMP_CWORD]}"
1873 case "$cur" in
1874 --*)
1875 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1876 return
1878 esac
1879 __gitcomp "$(__git_refs)"
1882 _git_rm ()
1884 __git_has_doubledash && return
1886 local cur="${COMP_WORDS[COMP_CWORD]}"
1887 case "$cur" in
1888 --*)
1889 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1890 return
1892 esac
1893 COMPREPLY=()
1896 _git_shortlog ()
1898 __git_has_doubledash && return
1900 local cur="${COMP_WORDS[COMP_CWORD]}"
1901 case "$cur" in
1902 --*)
1903 __gitcomp "
1904 $__git_log_common_options
1905 $__git_log_shortlog_options
1906 --numbered --summary
1908 return
1910 esac
1911 __git_complete_revlist
1914 _git_show ()
1916 __git_has_doubledash && return
1918 local cur="${COMP_WORDS[COMP_CWORD]}"
1919 case "$cur" in
1920 --pretty=*)
1921 __gitcomp "$__git_log_pretty_formats
1922 " "" "${cur##--pretty=}"
1923 return
1925 --format=*)
1926 __gitcomp "$__git_log_pretty_formats
1927 " "" "${cur##--format=}"
1928 return
1930 --*)
1931 __gitcomp "--pretty= --format= --abbrev-commit --oneline
1932 $__git_diff_common_options
1934 return
1936 esac
1937 __git_complete_file
1940 _git_show_branch ()
1942 local cur="${COMP_WORDS[COMP_CWORD]}"
1943 case "$cur" in
1944 --*)
1945 __gitcomp "
1946 --all --remotes --topo-order --current --more=
1947 --list --independent --merge-base --no-name
1948 --color --no-color
1949 --sha1-name --sparse --topics --reflog
1951 return
1953 esac
1954 __git_complete_revlist
1957 _git_stash ()
1959 local cur="${COMP_WORDS[COMP_CWORD]}"
1960 local save_opts='--keep-index --no-keep-index --quiet --patch'
1961 local subcommands='save list show apply clear drop pop create branch'
1962 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1963 if [ -z "$subcommand" ]; then
1964 case "$cur" in
1965 --*)
1966 __gitcomp "$save_opts"
1969 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
1970 __gitcomp "$subcommands"
1971 else
1972 COMPREPLY=()
1975 esac
1976 else
1977 case "$subcommand,$cur" in
1978 save,--*)
1979 __gitcomp "$save_opts"
1981 apply,--*|pop,--*)
1982 __gitcomp "--index --quiet"
1984 show,--*|drop,--*|branch,--*)
1985 COMPREPLY=()
1987 show,*|apply,*|drop,*|pop,*|branch,*)
1988 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1989 | sed -n -e 's/:.*//p')"
1992 COMPREPLY=()
1994 esac
1998 _git_submodule ()
2000 __git_has_doubledash && return
2002 local subcommands="add status init update summary foreach sync"
2003 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
2004 local cur="${COMP_WORDS[COMP_CWORD]}"
2005 case "$cur" in
2006 --*)
2007 __gitcomp "--quiet --cached"
2010 __gitcomp "$subcommands"
2012 esac
2013 return
2017 _git_svn ()
2019 local subcommands="
2020 init fetch clone rebase dcommit log find-rev
2021 set-tree commit-diff info create-ignore propget
2022 proplist show-ignore show-externals branch tag blame
2023 migrate
2025 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2026 if [ -z "$subcommand" ]; then
2027 __gitcomp "$subcommands"
2028 else
2029 local remote_opts="--username= --config-dir= --no-auth-cache"
2030 local fc_opts="
2031 --follow-parent --authors-file= --repack=
2032 --no-metadata --use-svm-props --use-svnsync-props
2033 --log-window-size= --no-checkout --quiet
2034 --repack-flags --use-log-author --localtime
2035 --ignore-paths= $remote_opts
2037 local init_opts="
2038 --template= --shared= --trunk= --tags=
2039 --branches= --stdlayout --minimize-url
2040 --no-metadata --use-svm-props --use-svnsync-props
2041 --rewrite-root= --prefix= --use-log-author
2042 --add-author-from $remote_opts
2044 local cmt_opts="
2045 --edit --rmdir --find-copies-harder --copy-similarity=
2048 local cur="${COMP_WORDS[COMP_CWORD]}"
2049 case "$subcommand,$cur" in
2050 fetch,--*)
2051 __gitcomp "--revision= --fetch-all $fc_opts"
2053 clone,--*)
2054 __gitcomp "--revision= $fc_opts $init_opts"
2056 init,--*)
2057 __gitcomp "$init_opts"
2059 dcommit,--*)
2060 __gitcomp "
2061 --merge --strategy= --verbose --dry-run
2062 --fetch-all --no-rebase --commit-url
2063 --revision $cmt_opts $fc_opts
2066 set-tree,--*)
2067 __gitcomp "--stdin $cmt_opts $fc_opts"
2069 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
2070 show-externals,--*)
2071 __gitcomp "--revision="
2073 log,--*)
2074 __gitcomp "
2075 --limit= --revision= --verbose --incremental
2076 --oneline --show-commit --non-recursive
2077 --authors-file= --color
2080 rebase,--*)
2081 __gitcomp "
2082 --merge --verbose --strategy= --local
2083 --fetch-all --dry-run $fc_opts
2086 commit-diff,--*)
2087 __gitcomp "--message= --file= --revision= $cmt_opts"
2089 info,--*)
2090 __gitcomp "--url"
2092 branch,--*)
2093 __gitcomp "--dry-run --message --tag"
2095 tag,--*)
2096 __gitcomp "--dry-run --message"
2098 blame,--*)
2099 __gitcomp "--git-format"
2101 migrate,--*)
2102 __gitcomp "
2103 --config-dir= --ignore-paths= --minimize
2104 --no-auth-cache --username=
2108 COMPREPLY=()
2110 esac
2114 _git_tag ()
2116 local i c=1 f=0
2117 while [ $c -lt $COMP_CWORD ]; do
2118 i="${COMP_WORDS[c]}"
2119 case "$i" in
2120 -d|-v)
2121 __gitcomp "$(__git_tags)"
2122 return
2127 esac
2128 c=$((++c))
2129 done
2131 case "${COMP_WORDS[COMP_CWORD-1]}" in
2132 -m|-F)
2133 COMPREPLY=()
2135 -*|tag)
2136 if [ $f = 1 ]; then
2137 __gitcomp "$(__git_tags)"
2138 else
2139 COMPREPLY=()
2143 __gitcomp "$(__git_refs)"
2145 esac
2148 _git ()
2150 local i c=1 command __git_dir
2152 while [ $c -lt $COMP_CWORD ]; do
2153 i="${COMP_WORDS[c]}"
2154 case "$i" in
2155 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2156 --bare) __git_dir="." ;;
2157 --version|-p|--paginate) ;;
2158 --help) command="help"; break ;;
2159 *) command="$i"; break ;;
2160 esac
2161 c=$((++c))
2162 done
2164 if [ -z "$command" ]; then
2165 case "${COMP_WORDS[COMP_CWORD]}" in
2166 --*) __gitcomp "
2167 --paginate
2168 --no-pager
2169 --git-dir=
2170 --bare
2171 --version
2172 --exec-path
2173 --html-path
2174 --work-tree=
2175 --help
2178 *) __git_compute_porcelain_commands
2179 __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
2180 esac
2181 return
2184 local expansion=$(__git_aliased_command "$command")
2185 [ "$expansion" ] && command="$expansion"
2187 case "$command" in
2188 am) _git_am ;;
2189 add) _git_add ;;
2190 apply) _git_apply ;;
2191 archive) _git_archive ;;
2192 bisect) _git_bisect ;;
2193 bundle) _git_bundle ;;
2194 branch) _git_branch ;;
2195 checkout) _git_checkout ;;
2196 cherry) _git_cherry ;;
2197 cherry-pick) _git_cherry_pick ;;
2198 clean) _git_clean ;;
2199 clone) _git_clone ;;
2200 commit) _git_commit ;;
2201 config) _git_config ;;
2202 describe) _git_describe ;;
2203 diff) _git_diff ;;
2204 difftool) _git_difftool ;;
2205 fetch) _git_fetch ;;
2206 format-patch) _git_format_patch ;;
2207 fsck) _git_fsck ;;
2208 gc) _git_gc ;;
2209 grep) _git_grep ;;
2210 help) _git_help ;;
2211 init) _git_init ;;
2212 log) _git_log ;;
2213 ls-files) _git_ls_files ;;
2214 ls-remote) _git_ls_remote ;;
2215 ls-tree) _git_ls_tree ;;
2216 merge) _git_merge;;
2217 mergetool) _git_mergetool;;
2218 merge-base) _git_merge_base ;;
2219 mv) _git_mv ;;
2220 name-rev) _git_name_rev ;;
2221 pull) _git_pull ;;
2222 push) _git_push ;;
2223 rebase) _git_rebase ;;
2224 remote) _git_remote ;;
2225 replace) _git_replace ;;
2226 reset) _git_reset ;;
2227 revert) _git_revert ;;
2228 rm) _git_rm ;;
2229 send-email) _git_send_email ;;
2230 shortlog) _git_shortlog ;;
2231 show) _git_show ;;
2232 show-branch) _git_show_branch ;;
2233 stash) _git_stash ;;
2234 stage) _git_add ;;
2235 submodule) _git_submodule ;;
2236 svn) _git_svn ;;
2237 tag) _git_tag ;;
2238 whatchanged) _git_log ;;
2239 *) COMPREPLY=() ;;
2240 esac
2243 _gitk ()
2245 __git_has_doubledash && return
2247 local cur="${COMP_WORDS[COMP_CWORD]}"
2248 local g="$(__gitdir)"
2249 local merge=""
2250 if [ -f "$g/MERGE_HEAD" ]; then
2251 merge="--merge"
2253 case "$cur" in
2254 --*)
2255 __gitcomp "
2256 $__git_log_common_options
2257 $__git_log_gitk_options
2258 $merge
2260 return
2262 esac
2263 __git_complete_revlist
2266 complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \
2267 || complete -o default -o nospace -F _git git
2268 complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \
2269 || complete -o default -o nospace -F _gitk gitk
2271 # The following are necessary only for Cygwin, and only are needed
2272 # when the user has tab-completed the executable name and consequently
2273 # included the '.exe' suffix.
2275 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2276 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
2277 || complete -o default -o nospace -F _git git.exe