bash: remove unnecessary conditions when checking for subcommands
[git/spearce.git] / contrib / completion / git-completion.bash
bloba94dc88fdc6c5f205bc423e3f7d78e755517118e
2 # bash completion support for core Git.
4 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
6 # Distributed under the GNU General Public License, version 2.0.
8 # The contained completion routines provide support for completing:
10 # *) local and remote branch names
11 # *) local and remote tag names
12 # *) .git/remotes file names
13 # *) git 'subcommands'
14 # *) tree paths within 'ref:path/to/file' expressions
15 # *) common --long-options
17 # To use these routines:
19 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
20 # 2) Added the following line to your .bashrc:
21 # source ~/.git-completion.sh
23 # 3) You may want to make sure the git executable is available
24 # in your PATH before this script is sourced, as some caching
25 # is performed while the script loads. If git isn't found
26 # at source time then all lookups will be done on demand,
27 # which may be slightly slower.
29 # 4) Consider changing your PS1 to also show the current branch:
30 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
32 # The argument to __git_ps1 will be displayed only if you
33 # are currently in a git repository. The %s token will be
34 # the name of the current branch.
36 # To submit patches:
38 # *) Read Documentation/SubmittingPatches
39 # *) Send all patches to the current maintainer:
41 # "Shawn O. Pearce" <spearce@spearce.org>
43 # *) Always CC the Git mailing list:
45 # git@vger.kernel.org
48 __gitdir ()
50 if [ -z "$1" ]; then
51 if [ -n "$__git_dir" ]; then
52 echo "$__git_dir"
53 elif [ -d .git ]; then
54 echo .git
55 else
56 git rev-parse --git-dir 2>/dev/null
58 elif [ -d "$1/.git" ]; then
59 echo "$1/.git"
60 else
61 echo "$1"
65 __git_ps1 ()
67 local g="$(git rev-parse --git-dir 2>/dev/null)"
68 if [ -n "$g" ]; then
69 local r
70 local b
71 if [ -d "$g/../.dotest" ]
72 then
73 if test -f "$g/../.dotest/rebasing"
74 then
75 r="|REBASE"
76 elif test -f "$g/../.dotest/applying"
77 then
78 r="|AM"
79 else
80 r="|AM/REBASE"
82 b="$(git symbolic-ref HEAD 2>/dev/null)"
83 elif [ -f "$g/.dotest-merge/interactive" ]
84 then
85 r="|REBASE-i"
86 b="$(cat "$g/.dotest-merge/head-name")"
87 elif [ -d "$g/.dotest-merge" ]
88 then
89 r="|REBASE-m"
90 b="$(cat "$g/.dotest-merge/head-name")"
91 elif [ -f "$g/MERGE_HEAD" ]
92 then
93 r="|MERGING"
94 b="$(git symbolic-ref HEAD 2>/dev/null)"
95 else
96 if [ -f "$g/BISECT_LOG" ]
97 then
98 r="|BISECTING"
100 if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
101 then
102 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
103 then
104 b="$(cut -c1-7 "$g/HEAD")..."
109 if [ -n "$1" ]; then
110 printf "$1" "${b##refs/heads/}$r"
111 else
112 printf " (%s)" "${b##refs/heads/}$r"
117 __gitcomp ()
119 local all c s=$'\n' IFS=' '$'\t'$'\n'
120 local cur="${COMP_WORDS[COMP_CWORD]}"
121 if [ $# -gt 2 ]; then
122 cur="$3"
124 for c in $1; do
125 case "$c$4" in
126 --*=*) all="$all$c$4$s" ;;
127 *.) all="$all$c$4$s" ;;
128 *) all="$all$c$4 $s" ;;
129 esac
130 done
131 IFS=$s
132 COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
133 return
136 __git_heads ()
138 local cmd i is_hash=y dir="$(__gitdir "$1")"
139 if [ -d "$dir" ]; then
140 for i in $(git --git-dir="$dir" \
141 for-each-ref --format='%(refname)' \
142 refs/heads ); do
143 echo "${i#refs/heads/}"
144 done
145 return
147 for i in $(git-ls-remote "$1" 2>/dev/null); do
148 case "$is_hash,$i" in
149 y,*) is_hash=n ;;
150 n,*^{}) is_hash=y ;;
151 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
152 n,*) is_hash=y; echo "$i" ;;
153 esac
154 done
157 __git_tags ()
159 local cmd i is_hash=y dir="$(__gitdir "$1")"
160 if [ -d "$dir" ]; then
161 for i in $(git --git-dir="$dir" \
162 for-each-ref --format='%(refname)' \
163 refs/tags ); do
164 echo "${i#refs/tags/}"
165 done
166 return
168 for i in $(git-ls-remote "$1" 2>/dev/null); do
169 case "$is_hash,$i" in
170 y,*) is_hash=n ;;
171 n,*^{}) is_hash=y ;;
172 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
173 n,*) is_hash=y; echo "$i" ;;
174 esac
175 done
178 __git_refs ()
180 local cmd i is_hash=y dir="$(__gitdir "$1")"
181 if [ -d "$dir" ]; then
182 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
183 for i in $(git --git-dir="$dir" \
184 for-each-ref --format='%(refname)' \
185 refs/tags refs/heads refs/remotes); do
186 case "$i" in
187 refs/tags/*) echo "${i#refs/tags/}" ;;
188 refs/heads/*) echo "${i#refs/heads/}" ;;
189 refs/remotes/*) echo "${i#refs/remotes/}" ;;
190 *) echo "$i" ;;
191 esac
192 done
193 return
195 for i in $(git-ls-remote "$dir" 2>/dev/null); do
196 case "$is_hash,$i" in
197 y,*) is_hash=n ;;
198 n,*^{}) is_hash=y ;;
199 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
200 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
201 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
202 n,*) is_hash=y; echo "$i" ;;
203 esac
204 done
207 __git_refs2 ()
209 local i
210 for i in $(__git_refs "$1"); do
211 echo "$i:$i"
212 done
215 __git_refs_remotes ()
217 local cmd i is_hash=y
218 for i in $(git-ls-remote "$1" 2>/dev/null); do
219 case "$is_hash,$i" in
220 n,refs/heads/*)
221 is_hash=y
222 echo "$i:refs/remotes/$1/${i#refs/heads/}"
224 y,*) is_hash=n ;;
225 n,*^{}) is_hash=y ;;
226 n,refs/tags/*) is_hash=y;;
227 n,*) is_hash=y; ;;
228 esac
229 done
232 __git_remotes ()
234 local i ngoff IFS=$'\n' d="$(__gitdir)"
235 shopt -q nullglob || ngoff=1
236 shopt -s nullglob
237 for i in "$d/remotes"/*; do
238 echo ${i#$d/remotes/}
239 done
240 [ "$ngoff" ] && shopt -u nullglob
241 for i in $(git --git-dir="$d" config --list); do
242 case "$i" in
243 remote.*.url=*)
244 i="${i#remote.}"
245 echo "${i/.url=*/}"
247 esac
248 done
251 __git_merge_strategies ()
253 if [ -n "$__git_merge_strategylist" ]; then
254 echo "$__git_merge_strategylist"
255 return
257 sed -n "/^all_strategies='/{
258 s/^all_strategies='//
259 s/'//
262 }" "$(git --exec-path)/git-merge"
264 __git_merge_strategylist=
265 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
267 __git_complete_file ()
269 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
270 case "$cur" in
271 ?*:*)
272 ref="${cur%%:*}"
273 cur="${cur#*:}"
274 case "$cur" in
275 ?*/*)
276 pfx="${cur%/*}"
277 cur="${cur##*/}"
278 ls="$ref:$pfx"
279 pfx="$pfx/"
282 ls="$ref"
284 esac
285 COMPREPLY=($(compgen -P "$pfx" \
286 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
287 | sed '/^100... blob /s,^.* ,,
288 /^040000 tree /{
289 s,^.* ,,
290 s,$,/,
292 s/^.* //')" \
293 -- "$cur"))
296 __gitcomp "$(__git_refs)"
298 esac
301 __git_complete_revlist ()
303 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
304 case "$cur" in
305 *...*)
306 pfx="${cur%...*}..."
307 cur="${cur#*...}"
308 __gitcomp "$(__git_refs)" "$pfx" "$cur"
310 *..*)
311 pfx="${cur%..*}.."
312 cur="${cur#*..}"
313 __gitcomp "$(__git_refs)" "$pfx" "$cur"
316 __gitcomp "$cur."
319 __gitcomp "$(__git_refs)"
321 esac
324 __git_commands ()
326 if [ -n "$__git_commandlist" ]; then
327 echo "$__git_commandlist"
328 return
330 local i IFS=" "$'\n'
331 for i in $(git help -a|egrep '^ ')
333 case $i in
334 *--*) : helper pattern;;
335 applymbox) : ask gittus;;
336 applypatch) : ask gittus;;
337 archimport) : import;;
338 cat-file) : plumbing;;
339 check-attr) : plumbing;;
340 check-ref-format) : plumbing;;
341 commit-tree) : plumbing;;
342 cvsexportcommit) : export;;
343 cvsimport) : import;;
344 cvsserver) : daemon;;
345 daemon) : daemon;;
346 diff-files) : plumbing;;
347 diff-index) : plumbing;;
348 diff-tree) : plumbing;;
349 fast-import) : import;;
350 fsck-objects) : plumbing;;
351 fetch-pack) : plumbing;;
352 fmt-merge-msg) : plumbing;;
353 for-each-ref) : plumbing;;
354 hash-object) : plumbing;;
355 http-*) : transport;;
356 index-pack) : plumbing;;
357 init-db) : deprecated;;
358 local-fetch) : plumbing;;
359 mailinfo) : plumbing;;
360 mailsplit) : plumbing;;
361 merge-*) : plumbing;;
362 mktree) : plumbing;;
363 mktag) : plumbing;;
364 pack-objects) : plumbing;;
365 pack-redundant) : plumbing;;
366 pack-refs) : plumbing;;
367 parse-remote) : plumbing;;
368 patch-id) : plumbing;;
369 peek-remote) : plumbing;;
370 prune) : plumbing;;
371 prune-packed) : plumbing;;
372 quiltimport) : import;;
373 read-tree) : plumbing;;
374 receive-pack) : plumbing;;
375 reflog) : plumbing;;
376 repo-config) : deprecated;;
377 rerere) : plumbing;;
378 rev-list) : plumbing;;
379 rev-parse) : plumbing;;
380 runstatus) : plumbing;;
381 sh-setup) : internal;;
382 shell) : daemon;;
383 send-pack) : plumbing;;
384 show-index) : plumbing;;
385 ssh-*) : transport;;
386 stripspace) : plumbing;;
387 svn) : import export;;
388 symbolic-ref) : plumbing;;
389 tar-tree) : deprecated;;
390 unpack-file) : plumbing;;
391 unpack-objects) : plumbing;;
392 update-index) : plumbing;;
393 update-ref) : plumbing;;
394 update-server-info) : daemon;;
395 upload-archive) : plumbing;;
396 upload-pack) : plumbing;;
397 write-tree) : plumbing;;
398 verify-tag) : plumbing;;
399 *) echo $i;;
400 esac
401 done
403 __git_commandlist=
404 __git_commandlist="$(__git_commands 2>/dev/null)"
406 __git_aliases ()
408 local i IFS=$'\n'
409 for i in $(git --git-dir="$(__gitdir)" config --list); do
410 case "$i" in
411 alias.*)
412 i="${i#alias.}"
413 echo "${i/=*/}"
415 esac
416 done
419 __git_aliased_command ()
421 local word cmdline=$(git --git-dir="$(__gitdir)" \
422 config --get "alias.$1")
423 for word in $cmdline; do
424 if [ "${word##-*}" ]; then
425 echo $word
426 return
428 done
431 __git_whitespacelist="nowarn warn error error-all strip"
433 _git_am ()
435 local cur="${COMP_WORDS[COMP_CWORD]}"
436 if [ -d .dotest ]; then
437 __gitcomp "--skip --resolved"
438 return
440 case "$cur" in
441 --whitespace=*)
442 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
443 return
445 --*)
446 __gitcomp "
447 --signoff --utf8 --binary --3way --interactive
448 --whitespace=
450 return
451 esac
452 COMPREPLY=()
455 _git_apply ()
457 local cur="${COMP_WORDS[COMP_CWORD]}"
458 case "$cur" in
459 --whitespace=*)
460 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
461 return
463 --*)
464 __gitcomp "
465 --stat --numstat --summary --check --index
466 --cached --index-info --reverse --reject --unidiff-zero
467 --apply --no-add --exclude=
468 --whitespace= --inaccurate-eof --verbose
470 return
471 esac
472 COMPREPLY=()
475 _git_add ()
477 local cur="${COMP_WORDS[COMP_CWORD]}"
478 case "$cur" in
479 --*)
480 __gitcomp "--interactive --refresh"
481 return
482 esac
483 COMPREPLY=()
486 _git_bisect ()
488 local i c=1 command
489 while [ $c -lt $COMP_CWORD ]; do
490 i="${COMP_WORDS[c]}"
491 case "$i" in
492 start|bad|good|reset|visualize|replay|log)
493 command="$i"
494 break
496 esac
497 c=$((++c))
498 done
500 if [ -z "$command" ]; then
501 __gitcomp "start bad good reset visualize replay log"
502 return
505 case "$command" in
506 bad|good|reset)
507 __gitcomp "$(__git_refs)"
510 COMPREPLY=()
512 esac
515 _git_branch ()
517 local i c=1 only_local_ref="n" has_r="n"
519 while [ $c -lt $COMP_CWORD ]; do
520 i="${COMP_WORDS[c]}"
521 case "$i" in
522 -d|-m) only_local_ref="y" ;;
523 -r) has_r="y" ;;
524 esac
525 c=$((++c))
526 done
528 case "${COMP_WORDS[COMP_CWORD]}" in
529 --*=*) COMPREPLY=() ;;
530 --*)
531 __gitcomp "
532 --color --no-color --verbose --abbrev= --no-abbrev
533 --track --no-track
537 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
538 __gitcomp "$(__git_heads)"
539 else
540 __gitcomp "$(__git_refs)"
543 esac
546 _git_bundle ()
548 local mycword="$COMP_CWORD"
549 case "${COMP_WORDS[0]}" in
550 git)
551 local cmd="${COMP_WORDS[2]}"
552 mycword="$((mycword-1))"
554 git-bundle*)
555 local cmd="${COMP_WORDS[1]}"
557 esac
558 case "$mycword" in
560 __gitcomp "create list-heads verify unbundle"
563 # looking for a file
566 case "$cmd" in
567 create)
568 __git_complete_revlist
570 esac
572 esac
575 _git_checkout ()
577 __gitcomp "$(__git_refs)"
580 _git_cherry ()
582 __gitcomp "$(__git_refs)"
585 _git_cherry_pick ()
587 local cur="${COMP_WORDS[COMP_CWORD]}"
588 case "$cur" in
589 --*)
590 __gitcomp "--edit --no-commit"
593 __gitcomp "$(__git_refs)"
595 esac
598 _git_commit ()
600 local cur="${COMP_WORDS[COMP_CWORD]}"
601 case "$cur" in
602 --*)
603 __gitcomp "
604 --all --author= --signoff --verify --no-verify
605 --edit --amend --include --only
607 return
608 esac
609 COMPREPLY=()
612 _git_describe ()
614 __gitcomp "$(__git_refs)"
617 _git_diff ()
619 local cur="${COMP_WORDS[COMP_CWORD]}"
620 case "$cur" in
621 --*)
622 __gitcomp "--cached --stat --numstat --shortstat --summary
623 --patch-with-stat --name-only --name-status --color
624 --no-color --color-words --no-renames --check
625 --full-index --binary --abbrev --diff-filter
626 --find-copies-harder --pickaxe-all --pickaxe-regex
627 --text --ignore-space-at-eol --ignore-space-change
628 --ignore-all-space --exit-code --quiet --ext-diff
629 --no-ext-diff"
630 return
632 esac
633 __git_complete_file
636 _git_diff_tree ()
638 __gitcomp "$(__git_refs)"
641 _git_fetch ()
643 local cur="${COMP_WORDS[COMP_CWORD]}"
645 case "${COMP_WORDS[0]},$COMP_CWORD" in
646 git-fetch*,1)
647 __gitcomp "$(__git_remotes)"
649 git,2)
650 __gitcomp "$(__git_remotes)"
653 case "$cur" in
654 *:*)
655 __gitcomp "$(__git_refs)" "" "${cur#*:}"
658 local remote
659 case "${COMP_WORDS[0]}" in
660 git-fetch) remote="${COMP_WORDS[1]}" ;;
661 git) remote="${COMP_WORDS[2]}" ;;
662 esac
663 __gitcomp "$(__git_refs2 "$remote")"
665 esac
667 esac
670 _git_format_patch ()
672 local cur="${COMP_WORDS[COMP_CWORD]}"
673 case "$cur" in
674 --*)
675 __gitcomp "
676 --stdout --attach --thread
677 --output-directory
678 --numbered --start-number
679 --numbered-files
680 --keep-subject
681 --signoff
682 --in-reply-to=
683 --full-index --binary
684 --not --all
685 --cover-letter
687 return
689 esac
690 __git_complete_revlist
693 _git_gc ()
695 local cur="${COMP_WORDS[COMP_CWORD]}"
696 case "$cur" in
697 --*)
698 __gitcomp "--prune --aggressive"
699 return
701 esac
702 COMPREPLY=()
705 _git_ls_remote ()
707 __gitcomp "$(__git_remotes)"
710 _git_ls_tree ()
712 __git_complete_file
715 _git_log ()
717 local cur="${COMP_WORDS[COMP_CWORD]}"
718 case "$cur" in
719 --pretty=*)
720 __gitcomp "
721 oneline short medium full fuller email raw
722 " "" "${cur##--pretty=}"
723 return
725 --date=*)
726 __gitcomp "
727 relative iso8601 rfc2822 short local default
728 " "" "${cur##--date=}"
729 return
731 --*)
732 __gitcomp "
733 --max-count= --max-age= --since= --after=
734 --min-age= --before= --until=
735 --root --topo-order --date-order --reverse
736 --no-merges --follow
737 --abbrev-commit --abbrev=
738 --relative-date --date=
739 --author= --committer= --grep=
740 --all-match
741 --pretty= --name-status --name-only --raw
742 --not --all
743 --left-right --cherry-pick
745 return
747 esac
748 __git_complete_revlist
751 _git_merge ()
753 local cur="${COMP_WORDS[COMP_CWORD]}"
754 case "${COMP_WORDS[COMP_CWORD-1]}" in
755 -s|--strategy)
756 __gitcomp "$(__git_merge_strategies)"
757 return
758 esac
759 case "$cur" in
760 --strategy=*)
761 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
762 return
764 --*)
765 __gitcomp "
766 --no-commit --no-summary --squash --strategy
768 return
769 esac
770 __gitcomp "$(__git_refs)"
773 _git_merge_base ()
775 __gitcomp "$(__git_refs)"
778 _git_name_rev ()
780 __gitcomp "--tags --all --stdin"
783 _git_pull ()
785 local cur="${COMP_WORDS[COMP_CWORD]}"
787 case "${COMP_WORDS[0]},$COMP_CWORD" in
788 git-pull*,1)
789 __gitcomp "$(__git_remotes)"
791 git,2)
792 __gitcomp "$(__git_remotes)"
795 local remote
796 case "${COMP_WORDS[0]}" in
797 git-pull) remote="${COMP_WORDS[1]}" ;;
798 git) remote="${COMP_WORDS[2]}" ;;
799 esac
800 __gitcomp "$(__git_refs "$remote")"
802 esac
805 _git_push ()
807 local cur="${COMP_WORDS[COMP_CWORD]}"
809 case "${COMP_WORDS[0]},$COMP_CWORD" in
810 git-push*,1)
811 __gitcomp "$(__git_remotes)"
813 git,2)
814 __gitcomp "$(__git_remotes)"
817 case "$cur" in
818 *:*)
819 local remote
820 case "${COMP_WORDS[0]}" in
821 git-push) remote="${COMP_WORDS[1]}" ;;
822 git) remote="${COMP_WORDS[2]}" ;;
823 esac
824 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
827 __gitcomp "$(__git_refs)" + "${cur#+}"
830 __gitcomp "$(__git_refs)"
832 esac
834 esac
837 _git_rebase ()
839 local cur="${COMP_WORDS[COMP_CWORD]}"
840 if [ -d .dotest ] || [ -d .git/.dotest-merge ]; then
841 __gitcomp "--continue --skip --abort"
842 return
844 case "${COMP_WORDS[COMP_CWORD-1]}" in
845 -s|--strategy)
846 __gitcomp "$(__git_merge_strategies)"
847 return
848 esac
849 case "$cur" in
850 --strategy=*)
851 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
852 return
854 --*)
855 __gitcomp "--onto --merge --strategy"
856 return
857 esac
858 __gitcomp "$(__git_refs)"
861 _git_config ()
863 local cur="${COMP_WORDS[COMP_CWORD]}"
864 local prv="${COMP_WORDS[COMP_CWORD-1]}"
865 case "$prv" in
866 branch.*.remote)
867 __gitcomp "$(__git_remotes)"
868 return
870 branch.*.merge)
871 __gitcomp "$(__git_refs)"
872 return
874 remote.*.fetch)
875 local remote="${prv#remote.}"
876 remote="${remote%.fetch}"
877 __gitcomp "$(__git_refs_remotes "$remote")"
878 return
880 remote.*.push)
881 local remote="${prv#remote.}"
882 remote="${remote%.push}"
883 __gitcomp "$(git --git-dir="$(__gitdir)" \
884 for-each-ref --format='%(refname):%(refname)' \
885 refs/heads)"
886 return
888 pull.twohead|pull.octopus)
889 __gitcomp "$(__git_merge_strategies)"
890 return
892 color.branch|color.diff|color.status)
893 __gitcomp "always never auto"
894 return
896 color.*.*)
897 __gitcomp "
898 black red green yellow blue magenta cyan white
899 bold dim ul blink reverse
901 return
903 *.*)
904 COMPREPLY=()
905 return
907 esac
908 case "$cur" in
909 --*)
910 __gitcomp "
911 --global --system --file=
912 --list --replace-all
913 --get --get-all --get-regexp
914 --add --unset --unset-all
915 --remove-section --rename-section
917 return
919 branch.*.*)
920 local pfx="${cur%.*}."
921 cur="${cur##*.}"
922 __gitcomp "remote merge" "$pfx" "$cur"
923 return
925 branch.*)
926 local pfx="${cur%.*}."
927 cur="${cur#*.}"
928 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
929 return
931 remote.*.*)
932 local pfx="${cur%.*}."
933 cur="${cur##*.}"
934 __gitcomp "
935 url fetch push skipDefaultUpdate
936 receivepack uploadpack tagopt
937 " "$pfx" "$cur"
938 return
940 remote.*)
941 local pfx="${cur%.*}."
942 cur="${cur#*.}"
943 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
944 return
946 esac
947 __gitcomp "
948 apply.whitespace
949 core.fileMode
950 core.gitProxy
951 core.ignoreStat
952 core.preferSymlinkRefs
953 core.logAllRefUpdates
954 core.loosecompression
955 core.repositoryFormatVersion
956 core.sharedRepository
957 core.warnAmbiguousRefs
958 core.compression
959 core.legacyHeaders
960 core.packedGitWindowSize
961 core.packedGitLimit
962 clean.requireForce
963 color.branch
964 color.branch.current
965 color.branch.local
966 color.branch.remote
967 color.branch.plain
968 color.diff
969 color.diff.plain
970 color.diff.meta
971 color.diff.frag
972 color.diff.old
973 color.diff.new
974 color.diff.commit
975 color.diff.whitespace
976 color.pager
977 color.status
978 color.status.header
979 color.status.added
980 color.status.changed
981 color.status.untracked
982 diff.renameLimit
983 diff.renames
984 fetch.unpackLimit
985 format.headers
986 format.subjectprefix
987 gitcvs.enabled
988 gitcvs.logfile
989 gitcvs.allbinary
990 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
991 gc.packrefs
992 gc.reflogexpire
993 gc.reflogexpireunreachable
994 gc.rerereresolved
995 gc.rerereunresolved
996 http.sslVerify
997 http.sslCert
998 http.sslKey
999 http.sslCAInfo
1000 http.sslCAPath
1001 http.maxRequests
1002 http.lowSpeedLimit
1003 http.lowSpeedTime
1004 http.noEPSV
1005 i18n.commitEncoding
1006 i18n.logOutputEncoding
1007 log.showroot
1008 merge.tool
1009 merge.summary
1010 merge.verbosity
1011 pack.window
1012 pack.depth
1013 pack.windowMemory
1014 pack.compression
1015 pack.deltaCacheSize
1016 pack.deltaCacheLimit
1017 pull.octopus
1018 pull.twohead
1019 repack.useDeltaBaseOffset
1020 show.difftree
1021 showbranch.default
1022 tar.umask
1023 transfer.unpackLimit
1024 receive.unpackLimit
1025 receive.denyNonFastForwards
1026 user.name
1027 user.email
1028 user.signingkey
1029 whatchanged.difftree
1030 branch. remote.
1034 _git_remote ()
1036 local i c=1 command
1037 while [ $c -lt $COMP_CWORD ]; do
1038 i="${COMP_WORDS[c]}"
1039 case "$i" in
1040 add|rm|show|prune|update) command="$i"; break ;;
1041 esac
1042 c=$((++c))
1043 done
1045 if [ -z "$command" ]; then
1046 __gitcomp "add rm show prune update"
1047 return
1050 case "$command" in
1051 rm|show|prune)
1052 __gitcomp "$(__git_remotes)"
1054 update)
1055 local i c='' IFS=$'\n'
1056 for i in $(git --git-dir="$(__gitdir)" config --list); do
1057 case "$i" in
1058 remotes.*)
1059 i="${i#remotes.}"
1060 c="$c ${i/=*/}"
1062 esac
1063 done
1064 __gitcomp "$c"
1067 COMPREPLY=()
1069 esac
1072 _git_reset ()
1074 local cur="${COMP_WORDS[COMP_CWORD]}"
1075 case "$cur" in
1076 --*)
1077 __gitcomp "--mixed --hard --soft"
1078 return
1080 esac
1081 __gitcomp "$(__git_refs)"
1084 _git_shortlog ()
1086 local cur="${COMP_WORDS[COMP_CWORD]}"
1087 case "$cur" in
1088 --*)
1089 __gitcomp "
1090 --max-count= --max-age= --since= --after=
1091 --min-age= --before= --until=
1092 --no-merges
1093 --author= --committer= --grep=
1094 --all-match
1095 --not --all
1096 --numbered --summary
1098 return
1100 esac
1101 __git_complete_revlist
1104 _git_show ()
1106 local cur="${COMP_WORDS[COMP_CWORD]}"
1107 case "$cur" in
1108 --pretty=*)
1109 __gitcomp "
1110 oneline short medium full fuller email raw
1111 " "" "${cur##--pretty=}"
1112 return
1114 --*)
1115 __gitcomp "--pretty="
1116 return
1118 esac
1119 __git_complete_file
1122 _git_stash ()
1124 __gitcomp 'list show apply clear'
1127 _git_submodule ()
1129 local i c=1 command
1130 while [ $c -lt $COMP_CWORD ]; do
1131 i="${COMP_WORDS[c]}"
1132 case "$i" in
1133 add|status|init|update) command="$i"; break ;;
1134 esac
1135 c=$((++c))
1136 done
1138 if [ -z "$command" ]; then
1139 local cur="${COMP_WORDS[COMP_CWORD]}"
1140 case "$cur" in
1141 --*)
1142 __gitcomp "--quiet --cached"
1145 __gitcomp "add status init update"
1147 esac
1148 return
1152 _git_tag ()
1154 local i c=1 f=0
1155 while [ $c -lt $COMP_CWORD ]; do
1156 i="${COMP_WORDS[c]}"
1157 case "$i" in
1158 -d|-v)
1159 __gitcomp "$(__git_tags)"
1160 return
1165 esac
1166 c=$((++c))
1167 done
1169 case "${COMP_WORDS[COMP_CWORD-1]}" in
1170 -m|-F)
1171 COMPREPLY=()
1173 -*|tag|git-tag)
1174 if [ $f = 1 ]; then
1175 __gitcomp "$(__git_tags)"
1176 else
1177 COMPREPLY=()
1181 __gitcomp "$(__git_refs)"
1183 esac
1186 _git ()
1188 local i c=1 command __git_dir
1190 while [ $c -lt $COMP_CWORD ]; do
1191 i="${COMP_WORDS[c]}"
1192 case "$i" in
1193 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1194 --bare) __git_dir="." ;;
1195 --version|--help|-p|--paginate) ;;
1196 *) command="$i"; break ;;
1197 esac
1198 c=$((++c))
1199 done
1201 if [ -z "$command" ]; then
1202 case "${COMP_WORDS[COMP_CWORD]}" in
1203 --*=*) COMPREPLY=() ;;
1204 --*) __gitcomp "
1205 --no-pager
1206 --git-dir=
1207 --bare
1208 --version
1209 --exec-path
1212 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1213 esac
1214 return
1217 local expansion=$(__git_aliased_command "$command")
1218 [ "$expansion" ] && command="$expansion"
1220 case "$command" in
1221 am) _git_am ;;
1222 add) _git_add ;;
1223 apply) _git_apply ;;
1224 bisect) _git_bisect ;;
1225 bundle) _git_bundle ;;
1226 branch) _git_branch ;;
1227 checkout) _git_checkout ;;
1228 cherry) _git_cherry ;;
1229 cherry-pick) _git_cherry_pick ;;
1230 commit) _git_commit ;;
1231 config) _git_config ;;
1232 describe) _git_describe ;;
1233 diff) _git_diff ;;
1234 fetch) _git_fetch ;;
1235 format-patch) _git_format_patch ;;
1236 gc) _git_gc ;;
1237 log) _git_log ;;
1238 ls-remote) _git_ls_remote ;;
1239 ls-tree) _git_ls_tree ;;
1240 merge) _git_merge;;
1241 merge-base) _git_merge_base ;;
1242 name-rev) _git_name_rev ;;
1243 pull) _git_pull ;;
1244 push) _git_push ;;
1245 rebase) _git_rebase ;;
1246 remote) _git_remote ;;
1247 reset) _git_reset ;;
1248 shortlog) _git_shortlog ;;
1249 show) _git_show ;;
1250 show-branch) _git_log ;;
1251 stash) _git_stash ;;
1252 submodule) _git_submodule ;;
1253 tag) _git_tag ;;
1254 whatchanged) _git_log ;;
1255 *) COMPREPLY=() ;;
1256 esac
1259 _gitk ()
1261 local cur="${COMP_WORDS[COMP_CWORD]}"
1262 case "$cur" in
1263 --*)
1264 __gitcomp "--not --all"
1265 return
1267 esac
1268 __git_complete_revlist
1271 complete -o default -o nospace -F _git git
1272 complete -o default -o nospace -F _gitk gitk
1273 complete -o default -o nospace -F _git_am git-am
1274 complete -o default -o nospace -F _git_apply git-apply
1275 complete -o default -o nospace -F _git_bisect git-bisect
1276 complete -o default -o nospace -F _git_branch git-branch
1277 complete -o default -o nospace -F _git_bundle git-bundle
1278 complete -o default -o nospace -F _git_checkout git-checkout
1279 complete -o default -o nospace -F _git_cherry git-cherry
1280 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1281 complete -o default -o nospace -F _git_commit git-commit
1282 complete -o default -o nospace -F _git_describe git-describe
1283 complete -o default -o nospace -F _git_diff git-diff
1284 complete -o default -o nospace -F _git_fetch git-fetch
1285 complete -o default -o nospace -F _git_format_patch git-format-patch
1286 complete -o default -o nospace -F _git_gc git-gc
1287 complete -o default -o nospace -F _git_log git-log
1288 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1289 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1290 complete -o default -o nospace -F _git_merge git-merge
1291 complete -o default -o nospace -F _git_merge_base git-merge-base
1292 complete -o default -o nospace -F _git_name_rev git-name-rev
1293 complete -o default -o nospace -F _git_pull git-pull
1294 complete -o default -o nospace -F _git_push git-push
1295 complete -o default -o nospace -F _git_rebase git-rebase
1296 complete -o default -o nospace -F _git_config git-config
1297 complete -o default -o nospace -F _git_remote git-remote
1298 complete -o default -o nospace -F _git_reset git-reset
1299 complete -o default -o nospace -F _git_shortlog git-shortlog
1300 complete -o default -o nospace -F _git_show git-show
1301 complete -o default -o nospace -F _git_stash git-stash
1302 complete -o default -o nospace -F _git_submodule git-submodule
1303 complete -o default -o nospace -F _git_log git-show-branch
1304 complete -o default -o nospace -F _git_tag git-tag
1305 complete -o default -o nospace -F _git_log git-whatchanged
1307 # The following are necessary only for Cygwin, and only are needed
1308 # when the user has tab-completed the executable name and consequently
1309 # included the '.exe' suffix.
1311 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1312 complete -o default -o nospace -F _git_add git-add.exe
1313 complete -o default -o nospace -F _git_apply git-apply.exe
1314 complete -o default -o nospace -F _git git.exe
1315 complete -o default -o nospace -F _git_branch git-branch.exe
1316 complete -o default -o nospace -F _git_bundle git-bundle.exe
1317 complete -o default -o nospace -F _git_cherry git-cherry.exe
1318 complete -o default -o nospace -F _git_describe git-describe.exe
1319 complete -o default -o nospace -F _git_diff git-diff.exe
1320 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1321 complete -o default -o nospace -F _git_log git-log.exe
1322 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1323 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1324 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1325 complete -o default -o nospace -F _git_push git-push.exe
1326 complete -o default -o nospace -F _git_config git-config
1327 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1328 complete -o default -o nospace -F _git_show git-show.exe
1329 complete -o default -o nospace -F _git_log git-show-branch.exe
1330 complete -o default -o nospace -F _git_tag git-tag.exe
1331 complete -o default -o nospace -F _git_log git-whatchanged.exe