Merge commit 'refs/top-bases/t/summary/css-metadata' into t/summary/css-metadata
[git/gitweb.git] / contrib / completion / git-completion.bash
blob0c8bb536c84f04627e78f251f51aea11b2048ce5
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) You may want to make sure the git executable is available
25 # in your PATH before this script is sourced, as some caching
26 # is performed while the script loads. If git isn't found
27 # at source time then all lookups will be done on demand,
28 # which may be slightly slower.
30 # 4) Consider changing your PS1 to also show the current branch:
31 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
33 # The argument to __git_ps1 will be displayed only if you
34 # are currently in a git repository. The %s token will be
35 # the name of the current branch.
37 # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty
38 # value, unstaged (*) and staged (+) changes will be shown next
39 # to the branch name. You can configure this per-repository
40 # with the bash.showDirtyState variable, which defaults to true
41 # once GIT_PS1_SHOWDIRTYSTATE is enabled.
43 # To submit patches:
45 # *) Read Documentation/SubmittingPatches
46 # *) Send all patches to the current maintainer:
48 # "Shawn O. Pearce" <spearce@spearce.org>
50 # *) Always CC the Git mailing list:
52 # git@vger.kernel.org
55 case "$COMP_WORDBREAKS" in
56 *:*) : great ;;
57 *) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
58 esac
60 # __gitdir accepts 0 or 1 arguments (i.e., location)
61 # returns location of .git repo
62 __gitdir ()
64 if [ -z "${1-}" ]; then
65 if [ -n "${__git_dir-}" ]; then
66 echo "$__git_dir"
67 elif [ -d .git ]; then
68 echo .git
69 else
70 git rev-parse --git-dir 2>/dev/null
72 elif [ -d "$1/.git" ]; then
73 echo "$1/.git"
74 else
75 echo "$1"
79 # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
80 # returns text to add to bash PS1 prompt (includes branch name)
81 __git_ps1 ()
83 local g="$(__gitdir)"
84 if [ -n "$g" ]; then
85 local r
86 local b
87 if [ -d "$g/rebase-apply" ]; then
88 if [ -f "$g/rebase-apply/rebasing" ]; then
89 r="|REBASE"
90 elif [ -f "$g/rebase-apply/applying" ]; then
91 r="|AM"
92 else
93 r="|AM/REBASE"
95 b="$(git symbolic-ref HEAD 2>/dev/null)"
96 elif [ -f "$g/rebase-merge/interactive" ]; then
97 r="|REBASE-i"
98 b="$(cat "$g/rebase-merge/head-name")"
99 elif [ -d "$g/rebase-merge" ]; then
100 r="|REBASE-m"
101 b="$(cat "$g/rebase-merge/head-name")"
102 else
103 if [ -f "$g/MERGE_HEAD" ]; then
104 r="|MERGING"
106 if [ -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 c
134 if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
135 if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
136 c="BARE:"
137 else
138 b="GIT_DIR!"
140 elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
141 if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
142 if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
143 git diff --no-ext-diff --ignore-submodules \
144 --quiet --exit-code || w="*"
145 if git rev-parse --quiet --verify HEAD >/dev/null; then
146 git diff-index --cached --quiet \
147 --ignore-submodules HEAD -- || i="+"
148 else
149 i="#"
155 if [ -n "$b" ]; then
156 if [ -n "${1-}" ]; then
157 printf "$1" "$c${b##refs/heads/}$w$i$r"
158 else
159 printf " (%s)" "$c${b##refs/heads/}$w$i$r"
165 # __gitcomp_1 requires 2 arguments
166 __gitcomp_1 ()
168 local c IFS=' '$'\t'$'\n'
169 for c in $1; do
170 case "$c$2" in
171 --*=*) printf %s$'\n' "$c$2" ;;
172 *.) printf %s$'\n' "$c$2" ;;
173 *) printf %s$'\n' "$c$2 " ;;
174 esac
175 done
178 # __gitcomp accepts 1, 2, 3, or 4 arguments
179 # generates completion reply with compgen
180 __gitcomp ()
182 local cur="${COMP_WORDS[COMP_CWORD]}"
183 if [ $# -gt 2 ]; then
184 cur="$3"
186 case "$cur" in
187 --*=)
188 COMPREPLY=()
191 local IFS=$'\n'
192 COMPREPLY=($(compgen -P "${2-}" \
193 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
194 -- "$cur"))
196 esac
199 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
200 __git_heads ()
202 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
203 if [ -d "$dir" ]; then
204 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
205 refs/heads
206 return
208 for i in $(git ls-remote "${1-}" 2>/dev/null); do
209 case "$is_hash,$i" in
210 y,*) is_hash=n ;;
211 n,*^{}) is_hash=y ;;
212 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
213 n,*) is_hash=y; echo "$i" ;;
214 esac
215 done
218 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
219 __git_tags ()
221 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
222 if [ -d "$dir" ]; then
223 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
224 refs/tags
225 return
227 for i in $(git ls-remote "${1-}" 2>/dev/null); do
228 case "$is_hash,$i" in
229 y,*) is_hash=n ;;
230 n,*^{}) is_hash=y ;;
231 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
232 n,*) is_hash=y; echo "$i" ;;
233 esac
234 done
237 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
238 __git_refs ()
240 local i is_hash=y dir="$(__gitdir "${1-}")"
241 local cur="${COMP_WORDS[COMP_CWORD]}" format refs
242 if [ -d "$dir" ]; then
243 case "$cur" in
244 refs|refs/*)
245 format="refname"
246 refs="${cur%/*}"
249 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
250 format="refname:short"
251 refs="refs/tags refs/heads refs/remotes"
253 esac
254 git --git-dir="$dir" for-each-ref --format="%($format)" \
255 $refs
256 return
258 for i in $(git ls-remote "$dir" 2>/dev/null); do
259 case "$is_hash,$i" in
260 y,*) is_hash=n ;;
261 n,*^{}) is_hash=y ;;
262 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
263 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
264 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
265 n,*) is_hash=y; echo "$i" ;;
266 esac
267 done
270 # __git_refs2 requires 1 argument (to pass to __git_refs)
271 __git_refs2 ()
273 local i
274 for i in $(__git_refs "$1"); do
275 echo "$i:$i"
276 done
279 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
280 __git_refs_remotes ()
282 local cmd i is_hash=y
283 for i in $(git ls-remote "$1" 2>/dev/null); do
284 case "$is_hash,$i" in
285 n,refs/heads/*)
286 is_hash=y
287 echo "$i:refs/remotes/$1/${i#refs/heads/}"
289 y,*) is_hash=n ;;
290 n,*^{}) is_hash=y ;;
291 n,refs/tags/*) is_hash=y;;
292 n,*) is_hash=y; ;;
293 esac
294 done
297 __git_remotes ()
299 local i ngoff IFS=$'\n' d="$(__gitdir)"
300 shopt -q nullglob || ngoff=1
301 shopt -s nullglob
302 for i in "$d/remotes"/*; do
303 echo ${i#$d/remotes/}
304 done
305 [ "$ngoff" ] && shopt -u nullglob
306 for i in $(git --git-dir="$d" config --list); do
307 case "$i" in
308 remote.*.url=*)
309 i="${i#remote.}"
310 echo "${i/.url=*/}"
312 esac
313 done
316 __git_merge_strategies ()
318 if [ -n "${__git_merge_strategylist-}" ]; then
319 echo "$__git_merge_strategylist"
320 return
322 git merge -s help 2>&1 |
323 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
324 s/\.$//
325 s/.*://
326 s/^[ ]*//
327 s/[ ]*$//
331 __git_merge_strategylist=
332 __git_merge_strategylist=$(__git_merge_strategies 2>/dev/null)
334 __git_complete_file ()
336 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
337 case "$cur" in
338 ?*:*)
339 ref="${cur%%:*}"
340 cur="${cur#*:}"
341 case "$cur" in
342 ?*/*)
343 pfx="${cur%/*}"
344 cur="${cur##*/}"
345 ls="$ref:$pfx"
346 pfx="$pfx/"
349 ls="$ref"
351 esac
353 case "$COMP_WORDBREAKS" in
354 *:*) : great ;;
355 *) pfx="$ref:$pfx" ;;
356 esac
358 local IFS=$'\n'
359 COMPREPLY=($(compgen -P "$pfx" \
360 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
361 | sed '/^100... blob /{
362 s,^.* ,,
363 s,$, ,
365 /^120000 blob /{
366 s,^.* ,,
367 s,$, ,
369 /^040000 tree /{
370 s,^.* ,,
371 s,$,/,
373 s/^.* //')" \
374 -- "$cur"))
377 __gitcomp "$(__git_refs)"
379 esac
382 __git_complete_revlist ()
384 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
385 case "$cur" in
386 *...*)
387 pfx="${cur%...*}..."
388 cur="${cur#*...}"
389 __gitcomp "$(__git_refs)" "$pfx" "$cur"
391 *..*)
392 pfx="${cur%..*}.."
393 cur="${cur#*..}"
394 __gitcomp "$(__git_refs)" "$pfx" "$cur"
397 __gitcomp "$(__git_refs)"
399 esac
402 __git_complete_remote_or_refspec ()
404 local cmd="${COMP_WORDS[1]}"
405 local cur="${COMP_WORDS[COMP_CWORD]}"
406 local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
407 while [ $c -lt $COMP_CWORD ]; do
408 i="${COMP_WORDS[c]}"
409 case "$i" in
410 --all|--mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
411 -*) ;;
412 *) remote="$i"; break ;;
413 esac
414 c=$((++c))
415 done
416 if [ -z "$remote" ]; then
417 __gitcomp "$(__git_remotes)"
418 return
420 if [ $no_complete_refspec = 1 ]; then
421 COMPREPLY=()
422 return
424 [ "$remote" = "." ] && remote=
425 case "$cur" in
426 *:*)
427 case "$COMP_WORDBREAKS" in
428 *:*) : great ;;
429 *) pfx="${cur%%:*}:" ;;
430 esac
431 cur="${cur#*:}"
432 lhs=0
435 pfx="+"
436 cur="${cur#+}"
438 esac
439 case "$cmd" in
440 fetch)
441 if [ $lhs = 1 ]; then
442 __gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
443 else
444 __gitcomp "$(__git_refs)" "$pfx" "$cur"
447 pull)
448 if [ $lhs = 1 ]; then
449 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
450 else
451 __gitcomp "$(__git_refs)" "$pfx" "$cur"
454 push)
455 if [ $lhs = 1 ]; then
456 __gitcomp "$(__git_refs)" "$pfx" "$cur"
457 else
458 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
461 esac
464 __git_complete_strategy ()
466 case "${COMP_WORDS[COMP_CWORD-1]}" in
467 -s|--strategy)
468 __gitcomp "$(__git_merge_strategies)"
469 return 0
470 esac
471 local cur="${COMP_WORDS[COMP_CWORD]}"
472 case "$cur" in
473 --strategy=*)
474 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
475 return 0
477 esac
478 return 1
481 __git_all_commands ()
483 if [ -n "${__git_all_commandlist-}" ]; then
484 echo "$__git_all_commandlist"
485 return
487 local i IFS=" "$'\n'
488 for i in $(git help -a|egrep '^ ')
490 case $i in
491 *--*) : helper pattern;;
492 *) echo $i;;
493 esac
494 done
496 __git_all_commandlist=
497 __git_all_commandlist="$(__git_all_commands 2>/dev/null)"
499 __git_porcelain_commands ()
501 if [ -n "${__git_porcelain_commandlist-}" ]; then
502 echo "$__git_porcelain_commandlist"
503 return
505 local i IFS=" "$'\n'
506 for i in "help" $(__git_all_commands)
508 case $i in
509 *--*) : helper pattern;;
510 applymbox) : ask gittus;;
511 applypatch) : ask gittus;;
512 archimport) : import;;
513 cat-file) : plumbing;;
514 check-attr) : plumbing;;
515 check-ref-format) : plumbing;;
516 checkout-index) : plumbing;;
517 commit-tree) : plumbing;;
518 count-objects) : infrequent;;
519 cvsexportcommit) : export;;
520 cvsimport) : import;;
521 cvsserver) : daemon;;
522 daemon) : daemon;;
523 diff-files) : plumbing;;
524 diff-index) : plumbing;;
525 diff-tree) : plumbing;;
526 fast-import) : import;;
527 fast-export) : export;;
528 fsck-objects) : plumbing;;
529 fetch-pack) : plumbing;;
530 fmt-merge-msg) : plumbing;;
531 for-each-ref) : plumbing;;
532 hash-object) : plumbing;;
533 http-*) : transport;;
534 index-pack) : plumbing;;
535 init-db) : deprecated;;
536 local-fetch) : plumbing;;
537 lost-found) : infrequent;;
538 ls-files) : plumbing;;
539 ls-remote) : plumbing;;
540 ls-tree) : plumbing;;
541 mailinfo) : plumbing;;
542 mailsplit) : plumbing;;
543 merge-*) : plumbing;;
544 mktree) : plumbing;;
545 mktag) : plumbing;;
546 pack-objects) : plumbing;;
547 pack-redundant) : plumbing;;
548 pack-refs) : plumbing;;
549 parse-remote) : plumbing;;
550 patch-id) : plumbing;;
551 peek-remote) : plumbing;;
552 prune) : plumbing;;
553 prune-packed) : plumbing;;
554 quiltimport) : import;;
555 read-tree) : plumbing;;
556 receive-pack) : plumbing;;
557 reflog) : plumbing;;
558 repo-config) : deprecated;;
559 rerere) : plumbing;;
560 rev-list) : plumbing;;
561 rev-parse) : plumbing;;
562 runstatus) : plumbing;;
563 sh-setup) : internal;;
564 shell) : daemon;;
565 show-ref) : plumbing;;
566 send-pack) : plumbing;;
567 show-index) : plumbing;;
568 ssh-*) : transport;;
569 stripspace) : plumbing;;
570 symbolic-ref) : plumbing;;
571 tar-tree) : deprecated;;
572 unpack-file) : plumbing;;
573 unpack-objects) : plumbing;;
574 update-index) : plumbing;;
575 update-ref) : plumbing;;
576 update-server-info) : daemon;;
577 upload-archive) : plumbing;;
578 upload-pack) : plumbing;;
579 write-tree) : plumbing;;
580 var) : infrequent;;
581 verify-pack) : infrequent;;
582 verify-tag) : plumbing;;
583 *) echo $i;;
584 esac
585 done
587 __git_porcelain_commandlist=
588 __git_porcelain_commandlist="$(__git_porcelain_commands 2>/dev/null)"
590 __git_aliases ()
592 local i IFS=$'\n'
593 for i in $(git --git-dir="$(__gitdir)" config --list); do
594 case "$i" in
595 alias.*)
596 i="${i#alias.}"
597 echo "${i/=*/}"
599 esac
600 done
603 # __git_aliased_command requires 1 argument
604 __git_aliased_command ()
606 local word cmdline=$(git --git-dir="$(__gitdir)" \
607 config --get "alias.$1")
608 for word in $cmdline; do
609 if [ "${word##-*}" ]; then
610 echo $word
611 return
613 done
616 # __git_find_subcommand requires 1 argument
617 __git_find_subcommand ()
619 local word subcommand c=1
621 while [ $c -lt $COMP_CWORD ]; do
622 word="${COMP_WORDS[c]}"
623 for subcommand in $1; do
624 if [ "$subcommand" = "$word" ]; then
625 echo "$subcommand"
626 return
628 done
629 c=$((++c))
630 done
633 __git_has_doubledash ()
635 local c=1
636 while [ $c -lt $COMP_CWORD ]; do
637 if [ "--" = "${COMP_WORDS[c]}" ]; then
638 return 0
640 c=$((++c))
641 done
642 return 1
645 __git_whitespacelist="nowarn warn error error-all fix"
647 _git_am ()
649 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
650 if [ -d "$dir"/rebase-apply ]; then
651 __gitcomp "--skip --resolved --abort"
652 return
654 case "$cur" in
655 --whitespace=*)
656 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
657 return
659 --*)
660 __gitcomp "
661 --3way --committer-date-is-author-date --ignore-date
662 --interactive --keep --no-utf8 --signoff --utf8
663 --whitespace=
665 return
666 esac
667 COMPREPLY=()
670 _git_apply ()
672 local cur="${COMP_WORDS[COMP_CWORD]}"
673 case "$cur" in
674 --whitespace=*)
675 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
676 return
678 --*)
679 __gitcomp "
680 --stat --numstat --summary --check --index
681 --cached --index-info --reverse --reject --unidiff-zero
682 --apply --no-add --exclude=
683 --whitespace= --inaccurate-eof --verbose
685 return
686 esac
687 COMPREPLY=()
690 _git_add ()
692 __git_has_doubledash && return
694 local cur="${COMP_WORDS[COMP_CWORD]}"
695 case "$cur" in
696 --*)
697 __gitcomp "
698 --interactive --refresh --patch --update --dry-run
699 --ignore-errors --intent-to-add
701 return
702 esac
703 COMPREPLY=()
706 _git_archive ()
708 local cur="${COMP_WORDS[COMP_CWORD]}"
709 case "$cur" in
710 --format=*)
711 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
712 return
714 --remote=*)
715 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
716 return
718 --*)
719 __gitcomp "
720 --format= --list --verbose
721 --prefix= --remote= --exec=
723 return
725 esac
726 __git_complete_file
729 _git_bisect ()
731 __git_has_doubledash && return
733 local subcommands="start bad good skip reset visualize replay log run"
734 local subcommand="$(__git_find_subcommand "$subcommands")"
735 if [ -z "$subcommand" ]; then
736 __gitcomp "$subcommands"
737 return
740 case "$subcommand" in
741 bad|good|reset|skip)
742 __gitcomp "$(__git_refs)"
745 COMPREPLY=()
747 esac
750 _git_branch ()
752 local i c=1 only_local_ref="n" has_r="n"
754 while [ $c -lt $COMP_CWORD ]; do
755 i="${COMP_WORDS[c]}"
756 case "$i" in
757 -d|-m) only_local_ref="y" ;;
758 -r) has_r="y" ;;
759 esac
760 c=$((++c))
761 done
763 case "${COMP_WORDS[COMP_CWORD]}" in
764 --*)
765 __gitcomp "
766 --color --no-color --verbose --abbrev= --no-abbrev
767 --track --no-track --contains --merged --no-merged
771 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
772 __gitcomp "$(__git_heads)"
773 else
774 __gitcomp "$(__git_refs)"
777 esac
780 _git_bundle ()
782 local cmd="${COMP_WORDS[2]}"
783 case "$COMP_CWORD" in
785 __gitcomp "create list-heads verify unbundle"
788 # looking for a file
791 case "$cmd" in
792 create)
793 __git_complete_revlist
795 esac
797 esac
800 _git_checkout ()
802 __git_has_doubledash && return
804 __gitcomp "$(__git_refs)"
807 _git_cherry ()
809 __gitcomp "$(__git_refs)"
812 _git_cherry_pick ()
814 local cur="${COMP_WORDS[COMP_CWORD]}"
815 case "$cur" in
816 --*)
817 __gitcomp "--edit --no-commit"
820 __gitcomp "$(__git_refs)"
822 esac
825 _git_clean ()
827 __git_has_doubledash && return
829 local cur="${COMP_WORDS[COMP_CWORD]}"
830 case "$cur" in
831 --*)
832 __gitcomp "--dry-run --quiet"
833 return
835 esac
836 COMPREPLY=()
839 _git_clone ()
841 local cur="${COMP_WORDS[COMP_CWORD]}"
842 case "$cur" in
843 --*)
844 __gitcomp "
845 --local
846 --no-hardlinks
847 --shared
848 --reference
849 --quiet
850 --no-checkout
851 --bare
852 --mirror
853 --origin
854 --upload-pack
855 --template=
856 --depth
858 return
860 esac
861 COMPREPLY=()
864 _git_commit ()
866 __git_has_doubledash && return
868 local cur="${COMP_WORDS[COMP_CWORD]}"
869 case "$cur" in
870 --*)
871 __gitcomp "
872 --all --author= --signoff --verify --no-verify
873 --edit --amend --include --only --interactive
875 return
876 esac
877 COMPREPLY=()
880 _git_describe ()
882 local cur="${COMP_WORDS[COMP_CWORD]}"
883 case "$cur" in
884 --*)
885 __gitcomp "
886 --all --tags --contains --abbrev= --candidates=
887 --exact-match --debug --long --match --always
889 return
890 esac
891 __gitcomp "$(__git_refs)"
894 __git_diff_common_options="--stat --numstat --shortstat --summary
895 --patch-with-stat --name-only --name-status --color
896 --no-color --color-words --no-renames --check
897 --full-index --binary --abbrev --diff-filter=
898 --find-copies-harder
899 --text --ignore-space-at-eol --ignore-space-change
900 --ignore-all-space --exit-code --quiet --ext-diff
901 --no-ext-diff
902 --no-prefix --src-prefix= --dst-prefix=
903 --inter-hunk-context=
904 --patience
905 --raw
908 _git_diff ()
910 __git_has_doubledash && return
912 local cur="${COMP_WORDS[COMP_CWORD]}"
913 case "$cur" in
914 --*)
915 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
916 --base --ours --theirs
917 $__git_diff_common_options
919 return
921 esac
922 __git_complete_file
925 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
926 tkdiff vimdiff gvimdiff xxdiff
929 _git_difftool ()
931 local cur="${COMP_WORDS[COMP_CWORD]}"
932 case "$cur" in
933 --tool=*)
934 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
935 return
937 --*)
938 __gitcomp "--tool="
939 return
941 esac
942 COMPREPLY=()
945 __git_fetch_options="
946 --quiet --verbose --append --upload-pack --force --keep --depth=
947 --tags --no-tags
950 _git_fetch ()
952 local cur="${COMP_WORDS[COMP_CWORD]}"
953 case "$cur" in
954 --*)
955 __gitcomp "$__git_fetch_options"
956 return
958 esac
959 __git_complete_remote_or_refspec
962 _git_format_patch ()
964 local cur="${COMP_WORDS[COMP_CWORD]}"
965 case "$cur" in
966 --thread=*)
967 __gitcomp "
968 deep shallow
969 " "" "${cur##--thread=}"
970 return
972 --*)
973 __gitcomp "
974 --stdout --attach --no-attach --thread --thread=
975 --output-directory
976 --numbered --start-number
977 --numbered-files
978 --keep-subject
979 --signoff
980 --in-reply-to= --cc=
981 --full-index --binary
982 --not --all
983 --cover-letter
984 --no-prefix --src-prefix= --dst-prefix=
985 --inline --suffix= --ignore-if-in-upstream
986 --subject-prefix=
988 return
990 esac
991 __git_complete_revlist
994 _git_fsck ()
996 local cur="${COMP_WORDS[COMP_CWORD]}"
997 case "$cur" in
998 --*)
999 __gitcomp "
1000 --tags --root --unreachable --cache --no-reflogs --full
1001 --strict --verbose --lost-found
1003 return
1005 esac
1006 COMPREPLY=()
1009 _git_gc ()
1011 local cur="${COMP_WORDS[COMP_CWORD]}"
1012 case "$cur" in
1013 --*)
1014 __gitcomp "--prune --aggressive"
1015 return
1017 esac
1018 COMPREPLY=()
1021 _git_grep ()
1023 __git_has_doubledash && return
1025 local cur="${COMP_WORDS[COMP_CWORD]}"
1026 case "$cur" in
1027 --*)
1028 __gitcomp "
1029 --cached
1030 --text --ignore-case --word-regexp --invert-match
1031 --full-name
1032 --extended-regexp --basic-regexp --fixed-strings
1033 --files-with-matches --name-only
1034 --files-without-match
1035 --count
1036 --and --or --not --all-match
1038 return
1040 esac
1041 COMPREPLY=()
1044 _git_help ()
1046 local cur="${COMP_WORDS[COMP_CWORD]}"
1047 case "$cur" in
1048 --*)
1049 __gitcomp "--all --info --man --web"
1050 return
1052 esac
1053 __gitcomp "$(__git_all_commands)
1054 attributes cli core-tutorial cvs-migration
1055 diffcore gitk glossary hooks ignore modules
1056 repository-layout tutorial tutorial-2
1057 workflows
1061 _git_init ()
1063 local cur="${COMP_WORDS[COMP_CWORD]}"
1064 case "$cur" in
1065 --shared=*)
1066 __gitcomp "
1067 false true umask group all world everybody
1068 " "" "${cur##--shared=}"
1069 return
1071 --*)
1072 __gitcomp "--quiet --bare --template= --shared --shared="
1073 return
1075 esac
1076 COMPREPLY=()
1079 _git_ls_files ()
1081 __git_has_doubledash && return
1083 local cur="${COMP_WORDS[COMP_CWORD]}"
1084 case "$cur" in
1085 --*)
1086 __gitcomp "--cached --deleted --modified --others --ignored
1087 --stage --directory --no-empty-directory --unmerged
1088 --killed --exclude= --exclude-from=
1089 --exclude-per-directory= --exclude-standard
1090 --error-unmatch --with-tree= --full-name
1091 --abbrev --ignored --exclude-per-directory
1093 return
1095 esac
1096 COMPREPLY=()
1099 _git_ls_remote ()
1101 __gitcomp "$(__git_remotes)"
1104 _git_ls_tree ()
1106 __git_complete_file
1109 # Options that go well for log, shortlog and gitk
1110 __git_log_common_options="
1111 --not --all
1112 --branches --tags --remotes
1113 --first-parent --no-merges
1114 --max-count=
1115 --max-age= --since= --after=
1116 --min-age= --until= --before=
1118 # Options that go well for log and gitk (not shortlog)
1119 __git_log_gitk_options="
1120 --dense --sparse --full-history
1121 --simplify-merges --simplify-by-decoration
1122 --left-right
1124 # Options that go well for log and shortlog (not gitk)
1125 __git_log_shortlog_options="
1126 --author= --committer= --grep=
1127 --all-match
1130 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1131 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1133 _git_log ()
1135 __git_has_doubledash && return
1137 local cur="${COMP_WORDS[COMP_CWORD]}"
1138 local g="$(git rev-parse --git-dir 2>/dev/null)"
1139 local merge=""
1140 if [ -f "$g/MERGE_HEAD" ]; then
1141 merge="--merge"
1143 case "$cur" in
1144 --pretty=*)
1145 __gitcomp "$__git_log_pretty_formats
1146 " "" "${cur##--pretty=}"
1147 return
1149 --format=*)
1150 __gitcomp "$__git_log_pretty_formats
1151 " "" "${cur##--format=}"
1152 return
1154 --date=*)
1155 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1156 return
1158 --*)
1159 __gitcomp "
1160 $__git_log_common_options
1161 $__git_log_shortlog_options
1162 $__git_log_gitk_options
1163 --root --topo-order --date-order --reverse
1164 --follow
1165 --abbrev-commit --abbrev=
1166 --relative-date --date=
1167 --pretty= --format= --oneline
1168 --cherry-pick
1169 --graph
1170 --decorate
1171 --walk-reflogs
1172 --parents --children
1173 $merge
1174 $__git_diff_common_options
1175 --pickaxe-all --pickaxe-regex
1177 return
1179 esac
1180 __git_complete_revlist
1183 __git_merge_options="
1184 --no-commit --no-stat --log --no-log --squash --strategy
1185 --commit --stat --no-squash --ff --no-ff
1188 _git_merge ()
1190 __git_complete_strategy && return
1192 local cur="${COMP_WORDS[COMP_CWORD]}"
1193 case "$cur" in
1194 --*)
1195 __gitcomp "$__git_merge_options"
1196 return
1197 esac
1198 __gitcomp "$(__git_refs)"
1201 _git_mergetool ()
1203 local cur="${COMP_WORDS[COMP_CWORD]}"
1204 case "$cur" in
1205 --tool=*)
1206 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1207 return
1209 --*)
1210 __gitcomp "--tool="
1211 return
1213 esac
1214 COMPREPLY=()
1217 _git_merge_base ()
1219 __gitcomp "$(__git_refs)"
1222 _git_mv ()
1224 local cur="${COMP_WORDS[COMP_CWORD]}"
1225 case "$cur" in
1226 --*)
1227 __gitcomp "--dry-run"
1228 return
1230 esac
1231 COMPREPLY=()
1234 _git_name_rev ()
1236 __gitcomp "--tags --all --stdin"
1239 _git_pull ()
1241 __git_complete_strategy && return
1243 local cur="${COMP_WORDS[COMP_CWORD]}"
1244 case "$cur" in
1245 --*)
1246 __gitcomp "
1247 --rebase --no-rebase
1248 $__git_merge_options
1249 $__git_fetch_options
1251 return
1253 esac
1254 __git_complete_remote_or_refspec
1257 _git_push ()
1259 local cur="${COMP_WORDS[COMP_CWORD]}"
1260 case "${COMP_WORDS[COMP_CWORD-1]}" in
1261 --repo)
1262 __gitcomp "$(__git_remotes)"
1263 return
1264 esac
1265 case "$cur" in
1266 --repo=*)
1267 __gitcomp "$(__git_remotes)" "" "${cur##--repo=}"
1268 return
1270 --*)
1271 __gitcomp "
1272 --all --mirror --tags --dry-run --force --verbose
1273 --receive-pack= --repo=
1275 return
1277 esac
1278 __git_complete_remote_or_refspec
1281 _git_rebase ()
1283 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1284 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1285 __gitcomp "--continue --skip --abort"
1286 return
1288 __git_complete_strategy && return
1289 case "$cur" in
1290 --*)
1291 __gitcomp "--onto --merge --strategy --interactive"
1292 return
1293 esac
1294 __gitcomp "$(__git_refs)"
1297 __git_send_email_confirm_options="always never auto cc compose"
1298 __git_send_email_suppresscc_options="author self cc ccbody sob cccmd body all"
1300 _git_send_email ()
1302 local cur="${COMP_WORDS[COMP_CWORD]}"
1303 case "$cur" in
1304 --confirm=*)
1305 __gitcomp "
1306 $__git_send_email_confirm_options
1307 " "" "${cur##--confirm=}"
1308 return
1310 --suppress-cc=*)
1311 __gitcomp "
1312 $__git_send_email_suppresscc_options
1313 " "" "${cur##--suppress-cc=}"
1315 return
1317 --smtp-encryption=*)
1318 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1319 return
1321 --*)
1322 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1323 --compose --confirm= --dry-run --envelope-sender
1324 --from --identity
1325 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1326 --no-suppress-from --no-thread --quiet
1327 --signed-off-by-cc --smtp-pass --smtp-server
1328 --smtp-server-port --smtp-encryption= --smtp-user
1329 --subject --suppress-cc= --suppress-from --thread --to
1330 --validate --no-validate"
1331 return
1333 esac
1334 COMPREPLY=()
1337 __git_config_get_set_variables ()
1339 local prevword word config_file= c=$COMP_CWORD
1340 while [ $c -gt 1 ]; do
1341 word="${COMP_WORDS[c]}"
1342 case "$word" in
1343 --global|--system|--file=*)
1344 config_file="$word"
1345 break
1347 -f|--file)
1348 config_file="$word $prevword"
1349 break
1351 esac
1352 prevword=$word
1353 c=$((--c))
1354 done
1356 for i in $(git --git-dir="$(__gitdir)" config $config_file --list \
1357 2>/dev/null); do
1358 case "$i" in
1359 *.*)
1360 echo "${i/=*/}"
1362 esac
1363 done
1366 _git_config ()
1368 local cur="${COMP_WORDS[COMP_CWORD]}"
1369 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1370 case "$prv" in
1371 branch.*.remote)
1372 __gitcomp "$(__git_remotes)"
1373 return
1375 branch.*.merge)
1376 __gitcomp "$(__git_refs)"
1377 return
1379 remote.*.fetch)
1380 local remote="${prv#remote.}"
1381 remote="${remote%.fetch}"
1382 __gitcomp "$(__git_refs_remotes "$remote")"
1383 return
1385 remote.*.push)
1386 local remote="${prv#remote.}"
1387 remote="${remote%.push}"
1388 __gitcomp "$(git --git-dir="$(__gitdir)" \
1389 for-each-ref --format='%(refname):%(refname)' \
1390 refs/heads)"
1391 return
1393 pull.twohead|pull.octopus)
1394 __gitcomp "$(__git_merge_strategies)"
1395 return
1397 color.branch|color.diff|color.interactive|\
1398 color.showbranch|color.status|color.ui)
1399 __gitcomp "always never auto"
1400 return
1402 color.pager)
1403 __gitcomp "false true"
1404 return
1406 color.*.*)
1407 __gitcomp "
1408 normal black red green yellow blue magenta cyan white
1409 bold dim ul blink reverse
1411 return
1413 help.format)
1414 __gitcomp "man info web html"
1415 return
1417 log.date)
1418 __gitcomp "$__git_log_date_formats"
1419 return
1421 sendemail.aliasesfiletype)
1422 __gitcomp "mutt mailrc pine elm gnus"
1423 return
1425 sendemail.confirm)
1426 __gitcomp "$__git_send_email_confirm_options"
1427 return
1429 sendemail.suppresscc)
1430 __gitcomp "$__git_send_email_suppresscc_options"
1431 return
1433 --get|--get-all|--unset|--unset-all)
1434 __gitcomp "$(__git_config_get_set_variables)"
1435 return
1437 *.*)
1438 COMPREPLY=()
1439 return
1441 esac
1442 case "$cur" in
1443 --*)
1444 __gitcomp "
1445 --global --system --file=
1446 --list --replace-all
1447 --get --get-all --get-regexp
1448 --add --unset --unset-all
1449 --remove-section --rename-section
1451 return
1453 branch.*.*)
1454 local pfx="${cur%.*}."
1455 cur="${cur##*.}"
1456 __gitcomp "remote merge mergeoptions" "$pfx" "$cur"
1457 return
1459 branch.*)
1460 local pfx="${cur%.*}."
1461 cur="${cur#*.}"
1462 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1463 return
1465 guitool.*.*)
1466 local pfx="${cur%.*}."
1467 cur="${cur##*.}"
1468 __gitcomp "
1469 argprompt cmd confirm needsfile noconsole norescan
1470 prompt revprompt revunmerged title
1471 " "$pfx" "$cur"
1472 return
1474 difftool.*.*)
1475 local pfx="${cur%.*}."
1476 cur="${cur##*.}"
1477 __gitcomp "cmd path" "$pfx" "$cur"
1478 return
1480 man.*.*)
1481 local pfx="${cur%.*}."
1482 cur="${cur##*.}"
1483 __gitcomp "cmd path" "$pfx" "$cur"
1484 return
1486 mergetool.*.*)
1487 local pfx="${cur%.*}."
1488 cur="${cur##*.}"
1489 __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
1490 return
1492 pager.*)
1493 local pfx="${cur%.*}."
1494 cur="${cur#*.}"
1495 __gitcomp "$(__git_all_commands)" "$pfx" "$cur"
1496 return
1498 remote.*.*)
1499 local pfx="${cur%.*}."
1500 cur="${cur##*.}"
1501 __gitcomp "
1502 url proxy fetch push mirror skipDefaultUpdate
1503 receivepack uploadpack tagopt
1504 " "$pfx" "$cur"
1505 return
1507 remote.*)
1508 local pfx="${cur%.*}."
1509 cur="${cur#*.}"
1510 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1511 return
1513 url.*.*)
1514 local pfx="${cur%.*}."
1515 cur="${cur##*.}"
1516 __gitcomp "insteadof" "$pfx" "$cur"
1517 return
1519 esac
1520 __gitcomp "
1521 alias.
1522 apply.whitespace
1523 branch.autosetupmerge
1524 branch.autosetuprebase
1525 clean.requireForce
1526 color.branch
1527 color.branch.current
1528 color.branch.local
1529 color.branch.plain
1530 color.branch.remote
1531 color.diff
1532 color.diff.commit
1533 color.diff.frag
1534 color.diff.meta
1535 color.diff.new
1536 color.diff.old
1537 color.diff.plain
1538 color.diff.whitespace
1539 color.grep
1540 color.grep.external
1541 color.grep.match
1542 color.interactive
1543 color.interactive.header
1544 color.interactive.help
1545 color.interactive.prompt
1546 color.pager
1547 color.showbranch
1548 color.status
1549 color.status.added
1550 color.status.changed
1551 color.status.header
1552 color.status.nobranch
1553 color.status.untracked
1554 color.status.updated
1555 color.ui
1556 commit.template
1557 core.autocrlf
1558 core.bare
1559 core.compression
1560 core.createObject
1561 core.deltaBaseCacheLimit
1562 core.editor
1563 core.excludesfile
1564 core.fileMode
1565 core.fsyncobjectfiles
1566 core.gitProxy
1567 core.ignoreCygwinFSTricks
1568 core.ignoreStat
1569 core.logAllRefUpdates
1570 core.loosecompression
1571 core.packedGitLimit
1572 core.packedGitWindowSize
1573 core.pager
1574 core.preferSymlinkRefs
1575 core.preloadindex
1576 core.quotepath
1577 core.repositoryFormatVersion
1578 core.safecrlf
1579 core.sharedRepository
1580 core.symlinks
1581 core.trustctime
1582 core.warnAmbiguousRefs
1583 core.whitespace
1584 core.worktree
1585 diff.autorefreshindex
1586 diff.external
1587 diff.mnemonicprefix
1588 diff.renameLimit
1589 diff.renameLimit.
1590 diff.renames
1591 diff.suppressBlankEmpty
1592 diff.tool
1593 diff.wordRegex
1594 difftool.
1595 difftool.prompt
1596 fetch.unpackLimit
1597 format.attach
1598 format.cc
1599 format.headers
1600 format.numbered
1601 format.pretty
1602 format.signoff
1603 format.subjectprefix
1604 format.suffix
1605 format.thread
1606 gc.aggressiveWindow
1607 gc.auto
1608 gc.autopacklimit
1609 gc.packrefs
1610 gc.pruneexpire
1611 gc.reflogexpire
1612 gc.reflogexpireunreachable
1613 gc.rerereresolved
1614 gc.rerereunresolved
1615 gitcvs.allbinary
1616 gitcvs.commitmsgannotation
1617 gitcvs.dbTableNamePrefix
1618 gitcvs.dbdriver
1619 gitcvs.dbname
1620 gitcvs.dbpass
1621 gitcvs.dbuser
1622 gitcvs.enabled
1623 gitcvs.logfile
1624 gitcvs.usecrlfattr
1625 guitool.
1626 gui.blamehistoryctx
1627 gui.commitmsgwidth
1628 gui.copyblamethreshold
1629 gui.diffcontext
1630 gui.encoding
1631 gui.fastcopyblame
1632 gui.matchtrackingbranch
1633 gui.newbranchtemplate
1634 gui.pruneduringfetch
1635 gui.spellingdictionary
1636 gui.trustmtime
1637 help.autocorrect
1638 help.browser
1639 help.format
1640 http.lowSpeedLimit
1641 http.lowSpeedTime
1642 http.maxRequests
1643 http.noEPSV
1644 http.proxy
1645 http.sslCAInfo
1646 http.sslCAPath
1647 http.sslCert
1648 http.sslKey
1649 http.sslVerify
1650 i18n.commitEncoding
1651 i18n.logOutputEncoding
1652 imap.folder
1653 imap.host
1654 imap.pass
1655 imap.port
1656 imap.preformattedHTML
1657 imap.sslverify
1658 imap.tunnel
1659 imap.user
1660 instaweb.browser
1661 instaweb.httpd
1662 instaweb.local
1663 instaweb.modulepath
1664 instaweb.port
1665 interactive.singlekey
1666 log.date
1667 log.showroot
1668 mailmap.file
1669 man.
1670 man.viewer
1671 merge.conflictstyle
1672 merge.log
1673 merge.renameLimit
1674 merge.stat
1675 merge.tool
1676 merge.verbosity
1677 mergetool.
1678 mergetool.keepBackup
1679 mergetool.prompt
1680 pack.compression
1681 pack.deltaCacheLimit
1682 pack.deltaCacheSize
1683 pack.depth
1684 pack.indexVersion
1685 pack.packSizeLimit
1686 pack.threads
1687 pack.window
1688 pack.windowMemory
1689 pager.
1690 pull.octopus
1691 pull.twohead
1692 push.default
1693 rebase.stat
1694 receive.denyCurrentBranch
1695 receive.denyDeletes
1696 receive.denyNonFastForwards
1697 receive.fsckObjects
1698 receive.unpackLimit
1699 repack.usedeltabaseoffset
1700 rerere.autoupdate
1701 rerere.enabled
1702 sendemail.aliasesfile
1703 sendemail.aliasesfiletype
1704 sendemail.bcc
1705 sendemail.cc
1706 sendemail.cccmd
1707 sendemail.chainreplyto
1708 sendemail.confirm
1709 sendemail.envelopesender
1710 sendemail.multiedit
1711 sendemail.signedoffbycc
1712 sendemail.smtpencryption
1713 sendemail.smtppass
1714 sendemail.smtpserver
1715 sendemail.smtpserverport
1716 sendemail.smtpuser
1717 sendemail.suppresscc
1718 sendemail.suppressfrom
1719 sendemail.thread
1720 sendemail.to
1721 sendemail.validate
1722 showbranch.default
1723 status.relativePaths
1724 status.showUntrackedFiles
1725 tar.umask
1726 transfer.unpackLimit
1727 url.
1728 user.email
1729 user.name
1730 user.signingkey
1731 web.browser
1732 branch. remote.
1736 _git_remote ()
1738 local subcommands="add rename rm show prune update set-head"
1739 local subcommand="$(__git_find_subcommand "$subcommands")"
1740 if [ -z "$subcommand" ]; then
1741 __gitcomp "$subcommands"
1742 return
1745 case "$subcommand" in
1746 rename|rm|show|prune)
1747 __gitcomp "$(__git_remotes)"
1749 update)
1750 local i c='' IFS=$'\n'
1751 for i in $(git --git-dir="$(__gitdir)" config --list); do
1752 case "$i" in
1753 remotes.*)
1754 i="${i#remotes.}"
1755 c="$c ${i/=*/}"
1757 esac
1758 done
1759 __gitcomp "$c"
1762 COMPREPLY=()
1764 esac
1767 _git_reset ()
1769 __git_has_doubledash && return
1771 local cur="${COMP_WORDS[COMP_CWORD]}"
1772 case "$cur" in
1773 --*)
1774 __gitcomp "--merge --mixed --hard --soft"
1775 return
1777 esac
1778 __gitcomp "$(__git_refs)"
1781 _git_revert ()
1783 local cur="${COMP_WORDS[COMP_CWORD]}"
1784 case "$cur" in
1785 --*)
1786 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1787 return
1789 esac
1790 __gitcomp "$(__git_refs)"
1793 _git_rm ()
1795 __git_has_doubledash && return
1797 local cur="${COMP_WORDS[COMP_CWORD]}"
1798 case "$cur" in
1799 --*)
1800 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1801 return
1803 esac
1804 COMPREPLY=()
1807 _git_shortlog ()
1809 __git_has_doubledash && return
1811 local cur="${COMP_WORDS[COMP_CWORD]}"
1812 case "$cur" in
1813 --*)
1814 __gitcomp "
1815 $__git_log_common_options
1816 $__git_log_shortlog_options
1817 --numbered --summary
1819 return
1821 esac
1822 __git_complete_revlist
1825 _git_show ()
1827 __git_has_doubledash && return
1829 local cur="${COMP_WORDS[COMP_CWORD]}"
1830 case "$cur" in
1831 --pretty=*)
1832 __gitcomp "$__git_log_pretty_formats
1833 " "" "${cur##--pretty=}"
1834 return
1836 --format=*)
1837 __gitcomp "$__git_log_pretty_formats
1838 " "" "${cur##--format=}"
1839 return
1841 --*)
1842 __gitcomp "--pretty= --format= --abbrev-commit --oneline
1843 $__git_diff_common_options
1845 return
1847 esac
1848 __git_complete_file
1851 _git_show_branch ()
1853 local cur="${COMP_WORDS[COMP_CWORD]}"
1854 case "$cur" in
1855 --*)
1856 __gitcomp "
1857 --all --remotes --topo-order --current --more=
1858 --list --independent --merge-base --no-name
1859 --color --no-color
1860 --sha1-name --sparse --topics --reflog
1862 return
1864 esac
1865 __git_complete_revlist
1868 _git_stash ()
1870 local subcommands='save list show apply clear drop pop create branch'
1871 local subcommand="$(__git_find_subcommand "$subcommands")"
1872 if [ -z "$subcommand" ]; then
1873 __gitcomp "$subcommands"
1874 else
1875 local cur="${COMP_WORDS[COMP_CWORD]}"
1876 case "$subcommand,$cur" in
1877 save,--*)
1878 __gitcomp "--keep-index"
1880 apply,--*)
1881 __gitcomp "--index"
1883 show,--*|drop,--*|pop,--*|branch,--*)
1884 COMPREPLY=()
1886 show,*|apply,*|drop,*|pop,*|branch,*)
1887 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1888 | sed -n -e 's/:.*//p')"
1891 COMPREPLY=()
1893 esac
1897 _git_submodule ()
1899 __git_has_doubledash && return
1901 local subcommands="add status init update summary foreach sync"
1902 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1903 local cur="${COMP_WORDS[COMP_CWORD]}"
1904 case "$cur" in
1905 --*)
1906 __gitcomp "--quiet --cached"
1909 __gitcomp "$subcommands"
1911 esac
1912 return
1916 _git_svn ()
1918 local subcommands="
1919 init fetch clone rebase dcommit log find-rev
1920 set-tree commit-diff info create-ignore propget
1921 proplist show-ignore show-externals branch tag blame
1922 migrate
1924 local subcommand="$(__git_find_subcommand "$subcommands")"
1925 if [ -z "$subcommand" ]; then
1926 __gitcomp "$subcommands"
1927 else
1928 local remote_opts="--username= --config-dir= --no-auth-cache"
1929 local fc_opts="
1930 --follow-parent --authors-file= --repack=
1931 --no-metadata --use-svm-props --use-svnsync-props
1932 --log-window-size= --no-checkout --quiet
1933 --repack-flags --use-log-author --localtime
1934 --ignore-paths= $remote_opts
1936 local init_opts="
1937 --template= --shared= --trunk= --tags=
1938 --branches= --stdlayout --minimize-url
1939 --no-metadata --use-svm-props --use-svnsync-props
1940 --rewrite-root= --prefix= --use-log-author
1941 --add-author-from $remote_opts
1943 local cmt_opts="
1944 --edit --rmdir --find-copies-harder --copy-similarity=
1947 local cur="${COMP_WORDS[COMP_CWORD]}"
1948 case "$subcommand,$cur" in
1949 fetch,--*)
1950 __gitcomp "--revision= --fetch-all $fc_opts"
1952 clone,--*)
1953 __gitcomp "--revision= $fc_opts $init_opts"
1955 init,--*)
1956 __gitcomp "$init_opts"
1958 dcommit,--*)
1959 __gitcomp "
1960 --merge --strategy= --verbose --dry-run
1961 --fetch-all --no-rebase --commit-url
1962 --revision $cmt_opts $fc_opts
1965 set-tree,--*)
1966 __gitcomp "--stdin $cmt_opts $fc_opts"
1968 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1969 show-externals,--*)
1970 __gitcomp "--revision="
1972 log,--*)
1973 __gitcomp "
1974 --limit= --revision= --verbose --incremental
1975 --oneline --show-commit --non-recursive
1976 --authors-file= --color
1979 rebase,--*)
1980 __gitcomp "
1981 --merge --verbose --strategy= --local
1982 --fetch-all --dry-run $fc_opts
1985 commit-diff,--*)
1986 __gitcomp "--message= --file= --revision= $cmt_opts"
1988 info,--*)
1989 __gitcomp "--url"
1991 branch,--*)
1992 __gitcomp "--dry-run --message --tag"
1994 tag,--*)
1995 __gitcomp "--dry-run --message"
1997 blame,--*)
1998 __gitcomp "--git-format"
2000 migrate,--*)
2001 __gitcomp "
2002 --config-dir= --ignore-paths= --minimize
2003 --no-auth-cache --username=
2007 COMPREPLY=()
2009 esac
2013 _git_tag ()
2015 local i c=1 f=0
2016 while [ $c -lt $COMP_CWORD ]; do
2017 i="${COMP_WORDS[c]}"
2018 case "$i" in
2019 -d|-v)
2020 __gitcomp "$(__git_tags)"
2021 return
2026 esac
2027 c=$((++c))
2028 done
2030 case "${COMP_WORDS[COMP_CWORD-1]}" in
2031 -m|-F)
2032 COMPREPLY=()
2034 -*|tag)
2035 if [ $f = 1 ]; then
2036 __gitcomp "$(__git_tags)"
2037 else
2038 COMPREPLY=()
2042 __gitcomp "$(__git_refs)"
2044 esac
2047 _git ()
2049 local i c=1 command __git_dir
2051 while [ $c -lt $COMP_CWORD ]; do
2052 i="${COMP_WORDS[c]}"
2053 case "$i" in
2054 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2055 --bare) __git_dir="." ;;
2056 --version|-p|--paginate) ;;
2057 --help) command="help"; break ;;
2058 *) command="$i"; break ;;
2059 esac
2060 c=$((++c))
2061 done
2063 if [ -z "$command" ]; then
2064 case "${COMP_WORDS[COMP_CWORD]}" in
2065 --*) __gitcomp "
2066 --paginate
2067 --no-pager
2068 --git-dir=
2069 --bare
2070 --version
2071 --exec-path
2072 --html-path
2073 --work-tree=
2074 --help
2077 *) __gitcomp "$(__git_porcelain_commands) $(__git_aliases)" ;;
2078 esac
2079 return
2082 local expansion=$(__git_aliased_command "$command")
2083 [ "$expansion" ] && command="$expansion"
2085 case "$command" in
2086 am) _git_am ;;
2087 add) _git_add ;;
2088 apply) _git_apply ;;
2089 archive) _git_archive ;;
2090 bisect) _git_bisect ;;
2091 bundle) _git_bundle ;;
2092 branch) _git_branch ;;
2093 checkout) _git_checkout ;;
2094 cherry) _git_cherry ;;
2095 cherry-pick) _git_cherry_pick ;;
2096 clean) _git_clean ;;
2097 clone) _git_clone ;;
2098 commit) _git_commit ;;
2099 config) _git_config ;;
2100 describe) _git_describe ;;
2101 diff) _git_diff ;;
2102 difftool) _git_difftool ;;
2103 fetch) _git_fetch ;;
2104 format-patch) _git_format_patch ;;
2105 fsck) _git_fsck ;;
2106 gc) _git_gc ;;
2107 grep) _git_grep ;;
2108 help) _git_help ;;
2109 init) _git_init ;;
2110 log) _git_log ;;
2111 ls-files) _git_ls_files ;;
2112 ls-remote) _git_ls_remote ;;
2113 ls-tree) _git_ls_tree ;;
2114 merge) _git_merge;;
2115 mergetool) _git_mergetool;;
2116 merge-base) _git_merge_base ;;
2117 mv) _git_mv ;;
2118 name-rev) _git_name_rev ;;
2119 pull) _git_pull ;;
2120 push) _git_push ;;
2121 rebase) _git_rebase ;;
2122 remote) _git_remote ;;
2123 reset) _git_reset ;;
2124 revert) _git_revert ;;
2125 rm) _git_rm ;;
2126 send-email) _git_send_email ;;
2127 shortlog) _git_shortlog ;;
2128 show) _git_show ;;
2129 show-branch) _git_show_branch ;;
2130 stash) _git_stash ;;
2131 stage) _git_add ;;
2132 submodule) _git_submodule ;;
2133 svn) _git_svn ;;
2134 tag) _git_tag ;;
2135 whatchanged) _git_log ;;
2136 *) COMPREPLY=() ;;
2137 esac
2140 _gitk ()
2142 __git_has_doubledash && return
2144 local cur="${COMP_WORDS[COMP_CWORD]}"
2145 local g="$(__gitdir)"
2146 local merge=""
2147 if [ -f "$g/MERGE_HEAD" ]; then
2148 merge="--merge"
2150 case "$cur" in
2151 --*)
2152 __gitcomp "
2153 $__git_log_common_options
2154 $__git_log_gitk_options
2155 $merge
2157 return
2159 esac
2160 __git_complete_revlist
2163 complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \
2164 || complete -o default -o nospace -F _git git
2165 complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \
2166 || complete -o default -o nospace -F _gitk gitk
2168 # The following are necessary only for Cygwin, and only are needed
2169 # when the user has tab-completed the executable name and consequently
2170 # included the '.exe' suffix.
2172 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2173 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
2174 || complete -o default -o nospace -F _git git.exe