Teach git-describe to verify annotated tag names before output
[git/git-p4.git] / contrib / completion / git-completion.bash
blob8722a687954ec47a538eff45d41434deedf717fb
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 r="|AM/REBASE"
74 b="$(git symbolic-ref HEAD 2>/dev/null)"
75 elif [ -f "$g/.dotest-merge/interactive" ]
76 then
77 r="|REBASE-i"
78 b="$(cat $g/.dotest-merge/head-name)"
79 elif [ -d "$g/.dotest-merge" ]
80 then
81 r="|REBASE-m"
82 b="$(cat $g/.dotest-merge/head-name)"
83 elif [ -f "$g/MERGE_HEAD" ]
84 then
85 r="|MERGING"
86 b="$(git symbolic-ref HEAD 2>/dev/null)"
87 else
88 if [ -f $g/BISECT_LOG ]
89 then
90 r="|BISECTING"
92 if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
93 then
94 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
95 then
96 b="$(cut -c1-7 $g/HEAD)..."
101 if [ -n "$1" ]; then
102 printf "$1" "${b##refs/heads/}$r"
103 else
104 printf " (%s)" "${b##refs/heads/}$r"
109 __gitcomp ()
111 local all c s=$'\n' IFS=' '$'\t'$'\n'
112 local cur="${COMP_WORDS[COMP_CWORD]}"
113 if [ $# -gt 2 ]; then
114 cur="$3"
116 for c in $1; do
117 case "$c$4" in
118 --*=*) all="$all$c$4$s" ;;
119 *.) all="$all$c$4$s" ;;
120 *) all="$all$c$4 $s" ;;
121 esac
122 done
123 IFS=$s
124 COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
125 return
128 __git_heads ()
130 local cmd i is_hash=y dir="$(__gitdir "$1")"
131 if [ -d "$dir" ]; then
132 for i in $(git --git-dir="$dir" \
133 for-each-ref --format='%(refname)' \
134 refs/heads ); do
135 echo "${i#refs/heads/}"
136 done
137 return
139 for i in $(git-ls-remote "$1" 2>/dev/null); do
140 case "$is_hash,$i" in
141 y,*) is_hash=n ;;
142 n,*^{}) is_hash=y ;;
143 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
144 n,*) is_hash=y; echo "$i" ;;
145 esac
146 done
149 __git_tags ()
151 local cmd i is_hash=y dir="$(__gitdir "$1")"
152 if [ -d "$dir" ]; then
153 for i in $(git --git-dir="$dir" \
154 for-each-ref --format='%(refname)' \
155 refs/tags ); do
156 echo "${i#refs/tags/}"
157 done
158 return
160 for i in $(git-ls-remote "$1" 2>/dev/null); do
161 case "$is_hash,$i" in
162 y,*) is_hash=n ;;
163 n,*^{}) is_hash=y ;;
164 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
165 n,*) is_hash=y; echo "$i" ;;
166 esac
167 done
170 __git_refs ()
172 local cmd i is_hash=y dir="$(__gitdir "$1")"
173 if [ -d "$dir" ]; then
174 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
175 for i in $(git --git-dir="$dir" \
176 for-each-ref --format='%(refname)' \
177 refs/tags refs/heads refs/remotes); do
178 case "$i" in
179 refs/tags/*) echo "${i#refs/tags/}" ;;
180 refs/heads/*) echo "${i#refs/heads/}" ;;
181 refs/remotes/*) echo "${i#refs/remotes/}" ;;
182 *) echo "$i" ;;
183 esac
184 done
185 return
187 for i in $(git-ls-remote "$dir" 2>/dev/null); do
188 case "$is_hash,$i" in
189 y,*) is_hash=n ;;
190 n,*^{}) is_hash=y ;;
191 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
192 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
193 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
194 n,*) is_hash=y; echo "$i" ;;
195 esac
196 done
199 __git_refs2 ()
201 local i
202 for i in $(__git_refs "$1"); do
203 echo "$i:$i"
204 done
207 __git_refs_remotes ()
209 local cmd i is_hash=y
210 for i in $(git-ls-remote "$1" 2>/dev/null); do
211 case "$is_hash,$i" in
212 n,refs/heads/*)
213 is_hash=y
214 echo "$i:refs/remotes/$1/${i#refs/heads/}"
216 y,*) is_hash=n ;;
217 n,*^{}) is_hash=y ;;
218 n,refs/tags/*) is_hash=y;;
219 n,*) is_hash=y; ;;
220 esac
221 done
224 __git_remotes ()
226 local i ngoff IFS=$'\n' d="$(__gitdir)"
227 shopt -q nullglob || ngoff=1
228 shopt -s nullglob
229 for i in "$d/remotes"/*; do
230 echo ${i#$d/remotes/}
231 done
232 [ "$ngoff" ] && shopt -u nullglob
233 for i in $(git --git-dir="$d" config --list); do
234 case "$i" in
235 remote.*.url=*)
236 i="${i#remote.}"
237 echo "${i/.url=*/}"
239 esac
240 done
243 __git_merge_strategies ()
245 if [ -n "$__git_merge_strategylist" ]; then
246 echo "$__git_merge_strategylist"
247 return
249 sed -n "/^all_strategies='/{
250 s/^all_strategies='//
251 s/'//
254 }" "$(git --exec-path)/git-merge"
256 __git_merge_strategylist=
257 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
259 __git_complete_file ()
261 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
262 case "$cur" in
263 ?*:*)
264 ref="${cur%%:*}"
265 cur="${cur#*:}"
266 case "$cur" in
267 ?*/*)
268 pfx="${cur%/*}"
269 cur="${cur##*/}"
270 ls="$ref:$pfx"
271 pfx="$pfx/"
274 ls="$ref"
276 esac
277 COMPREPLY=($(compgen -P "$pfx" \
278 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
279 | sed '/^100... blob /s,^.* ,,
280 /^040000 tree /{
281 s,^.* ,,
282 s,$,/,
284 s/^.* //')" \
285 -- "$cur"))
288 __gitcomp "$(__git_refs)"
290 esac
293 __git_complete_revlist ()
295 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
296 case "$cur" in
297 *...*)
298 pfx="${cur%...*}..."
299 cur="${cur#*...}"
300 __gitcomp "$(__git_refs)" "$pfx" "$cur"
302 *..*)
303 pfx="${cur%..*}.."
304 cur="${cur#*..}"
305 __gitcomp "$(__git_refs)" "$pfx" "$cur"
308 __gitcomp "$cur."
311 __gitcomp "$(__git_refs)"
313 esac
316 __git_commands ()
318 if [ -n "$__git_commandlist" ]; then
319 echo "$__git_commandlist"
320 return
322 local i IFS=" "$'\n'
323 for i in $(git help -a|egrep '^ ')
325 case $i in
326 *--*) : helper pattern;;
327 applymbox) : ask gittus;;
328 applypatch) : ask gittus;;
329 archimport) : import;;
330 cat-file) : plumbing;;
331 check-attr) : plumbing;;
332 check-ref-format) : plumbing;;
333 commit-tree) : plumbing;;
334 cvsexportcommit) : export;;
335 cvsimport) : import;;
336 cvsserver) : daemon;;
337 daemon) : daemon;;
338 diff-files) : plumbing;;
339 diff-index) : plumbing;;
340 diff-tree) : plumbing;;
341 fast-import) : import;;
342 fsck-objects) : plumbing;;
343 fetch-pack) : plumbing;;
344 fmt-merge-msg) : plumbing;;
345 for-each-ref) : plumbing;;
346 hash-object) : plumbing;;
347 http-*) : transport;;
348 index-pack) : plumbing;;
349 init-db) : deprecated;;
350 local-fetch) : plumbing;;
351 mailinfo) : plumbing;;
352 mailsplit) : plumbing;;
353 merge-*) : plumbing;;
354 mktree) : plumbing;;
355 mktag) : plumbing;;
356 pack-objects) : plumbing;;
357 pack-redundant) : plumbing;;
358 pack-refs) : plumbing;;
359 parse-remote) : plumbing;;
360 patch-id) : plumbing;;
361 peek-remote) : plumbing;;
362 prune) : plumbing;;
363 prune-packed) : plumbing;;
364 quiltimport) : import;;
365 read-tree) : plumbing;;
366 receive-pack) : plumbing;;
367 reflog) : plumbing;;
368 repo-config) : deprecated;;
369 rerere) : plumbing;;
370 rev-list) : plumbing;;
371 rev-parse) : plumbing;;
372 runstatus) : plumbing;;
373 sh-setup) : internal;;
374 shell) : daemon;;
375 send-pack) : plumbing;;
376 show-index) : plumbing;;
377 ssh-*) : transport;;
378 stripspace) : plumbing;;
379 svn) : import export;;
380 symbolic-ref) : plumbing;;
381 tar-tree) : deprecated;;
382 unpack-file) : plumbing;;
383 unpack-objects) : plumbing;;
384 update-index) : plumbing;;
385 update-ref) : plumbing;;
386 update-server-info) : daemon;;
387 upload-archive) : plumbing;;
388 upload-pack) : plumbing;;
389 write-tree) : plumbing;;
390 verify-tag) : plumbing;;
391 *) echo $i;;
392 esac
393 done
395 __git_commandlist=
396 __git_commandlist="$(__git_commands 2>/dev/null)"
398 __git_aliases ()
400 local i IFS=$'\n'
401 for i in $(git --git-dir="$(__gitdir)" config --list); do
402 case "$i" in
403 alias.*)
404 i="${i#alias.}"
405 echo "${i/=*/}"
407 esac
408 done
411 __git_aliased_command ()
413 local word cmdline=$(git --git-dir="$(__gitdir)" \
414 config --get "alias.$1")
415 for word in $cmdline; do
416 if [ "${word##-*}" ]; then
417 echo $word
418 return
420 done
423 __git_whitespacelist="nowarn warn error error-all strip"
425 _git_am ()
427 local cur="${COMP_WORDS[COMP_CWORD]}"
428 if [ -d .dotest ]; then
429 __gitcomp "--skip --resolved"
430 return
432 case "$cur" in
433 --whitespace=*)
434 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
435 return
437 --*)
438 __gitcomp "
439 --signoff --utf8 --binary --3way --interactive
440 --whitespace=
442 return
443 esac
444 COMPREPLY=()
447 _git_apply ()
449 local cur="${COMP_WORDS[COMP_CWORD]}"
450 case "$cur" in
451 --whitespace=*)
452 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
453 return
455 --*)
456 __gitcomp "
457 --stat --numstat --summary --check --index
458 --cached --index-info --reverse --reject --unidiff-zero
459 --apply --no-add --exclude=
460 --whitespace= --inaccurate-eof --verbose
462 return
463 esac
464 COMPREPLY=()
467 _git_add ()
469 local cur="${COMP_WORDS[COMP_CWORD]}"
470 case "$cur" in
471 --*)
472 __gitcomp "--interactive --refresh"
473 return
474 esac
475 COMPREPLY=()
478 _git_bisect ()
480 local i c=1 command
481 while [ $c -lt $COMP_CWORD ]; do
482 i="${COMP_WORDS[c]}"
483 case "$i" in
484 start|bad|good|reset|visualize|replay|log)
485 command="$i"
486 break
488 esac
489 c=$((++c))
490 done
492 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
493 __gitcomp "start bad good reset visualize replay log"
494 return
497 case "$command" in
498 bad|good|reset)
499 __gitcomp "$(__git_refs)"
502 COMPREPLY=()
504 esac
507 _git_branch ()
509 __gitcomp "$(__git_refs)"
512 _git_bundle ()
514 local mycword="$COMP_CWORD"
515 case "${COMP_WORDS[0]}" in
516 git)
517 local cmd="${COMP_WORDS[2]}"
518 mycword="$((mycword-1))"
520 git-bundle*)
521 local cmd="${COMP_WORDS[1]}"
523 esac
524 case "$mycword" in
526 __gitcomp "create list-heads verify unbundle"
529 # looking for a file
532 case "$cmd" in
533 create)
534 __git_complete_revlist
536 esac
538 esac
541 _git_checkout ()
543 __gitcomp "$(__git_refs)"
546 _git_cherry ()
548 __gitcomp "$(__git_refs)"
551 _git_cherry_pick ()
553 local cur="${COMP_WORDS[COMP_CWORD]}"
554 case "$cur" in
555 --*)
556 __gitcomp "--edit --no-commit"
559 __gitcomp "$(__git_refs)"
561 esac
564 _git_commit ()
566 local cur="${COMP_WORDS[COMP_CWORD]}"
567 case "$cur" in
568 --*)
569 __gitcomp "
570 --all --author= --signoff --verify --no-verify
571 --edit --amend --include --only
573 return
574 esac
575 COMPREPLY=()
578 _git_describe ()
580 __gitcomp "$(__git_refs)"
583 _git_diff ()
585 local cur="${COMP_WORDS[COMP_CWORD]}"
586 case "$cur" in
587 --*)
588 __gitcomp "--cached --stat --numstat --shortstat --summary
589 --patch-with-stat --name-only --name-status --color
590 --no-color --color-words --no-renames --check
591 --full-index --binary --abbrev --diff-filter
592 --find-copies-harder --pickaxe-all --pickaxe-regex
593 --text --ignore-space-at-eol --ignore-space-change
594 --ignore-all-space --exit-code --quiet --ext-diff
595 --no-ext-diff"
596 return
598 esac
599 __git_complete_file
602 _git_diff_tree ()
604 __gitcomp "$(__git_refs)"
607 _git_fetch ()
609 local cur="${COMP_WORDS[COMP_CWORD]}"
611 case "${COMP_WORDS[0]},$COMP_CWORD" in
612 git-fetch*,1)
613 __gitcomp "$(__git_remotes)"
615 git,2)
616 __gitcomp "$(__git_remotes)"
619 case "$cur" in
620 *:*)
621 __gitcomp "$(__git_refs)" "" "${cur#*:}"
624 local remote
625 case "${COMP_WORDS[0]}" in
626 git-fetch) remote="${COMP_WORDS[1]}" ;;
627 git) remote="${COMP_WORDS[2]}" ;;
628 esac
629 __gitcomp "$(__git_refs2 "$remote")"
631 esac
633 esac
636 _git_format_patch ()
638 local cur="${COMP_WORDS[COMP_CWORD]}"
639 case "$cur" in
640 --*)
641 __gitcomp "
642 --stdout --attach --thread
643 --output-directory
644 --numbered --start-number
645 --numbered-files
646 --keep-subject
647 --signoff
648 --in-reply-to=
649 --full-index --binary
650 --not --all
652 return
654 esac
655 __git_complete_revlist
658 _git_gc ()
660 local cur="${COMP_WORDS[COMP_CWORD]}"
661 case "$cur" in
662 --*)
663 __gitcomp "--prune --aggressive"
664 return
666 esac
667 COMPREPLY=()
670 _git_ls_remote ()
672 __gitcomp "$(__git_remotes)"
675 _git_ls_tree ()
677 __git_complete_file
680 _git_log ()
682 local cur="${COMP_WORDS[COMP_CWORD]}"
683 case "$cur" in
684 --pretty=*)
685 __gitcomp "
686 oneline short medium full fuller email raw
687 " "" "${cur##--pretty=}"
688 return
690 --date=*)
691 __gitcomp "
692 relative iso8601 rfc2822 short local default
693 " "" "${cur##--date=}"
694 return
696 --*)
697 __gitcomp "
698 --max-count= --max-age= --since= --after=
699 --min-age= --before= --until=
700 --root --topo-order --date-order --reverse
701 --no-merges --follow
702 --abbrev-commit --abbrev=
703 --relative-date --date=
704 --author= --committer= --grep=
705 --all-match
706 --pretty= --name-status --name-only --raw
707 --not --all
708 --left-right --cherry-pick
710 return
712 esac
713 __git_complete_revlist
716 _git_merge ()
718 local cur="${COMP_WORDS[COMP_CWORD]}"
719 case "${COMP_WORDS[COMP_CWORD-1]}" in
720 -s|--strategy)
721 __gitcomp "$(__git_merge_strategies)"
722 return
723 esac
724 case "$cur" in
725 --strategy=*)
726 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
727 return
729 --*)
730 __gitcomp "
731 --no-commit --no-summary --squash --strategy
733 return
734 esac
735 __gitcomp "$(__git_refs)"
738 _git_merge_base ()
740 __gitcomp "$(__git_refs)"
743 _git_name_rev ()
745 __gitcomp "--tags --all --stdin"
748 _git_pull ()
750 local cur="${COMP_WORDS[COMP_CWORD]}"
752 case "${COMP_WORDS[0]},$COMP_CWORD" in
753 git-pull*,1)
754 __gitcomp "$(__git_remotes)"
756 git,2)
757 __gitcomp "$(__git_remotes)"
760 local remote
761 case "${COMP_WORDS[0]}" in
762 git-pull) remote="${COMP_WORDS[1]}" ;;
763 git) remote="${COMP_WORDS[2]}" ;;
764 esac
765 __gitcomp "$(__git_refs "$remote")"
767 esac
770 _git_push ()
772 local cur="${COMP_WORDS[COMP_CWORD]}"
774 case "${COMP_WORDS[0]},$COMP_CWORD" in
775 git-push*,1)
776 __gitcomp "$(__git_remotes)"
778 git,2)
779 __gitcomp "$(__git_remotes)"
782 case "$cur" in
783 *:*)
784 local remote
785 case "${COMP_WORDS[0]}" in
786 git-push) remote="${COMP_WORDS[1]}" ;;
787 git) remote="${COMP_WORDS[2]}" ;;
788 esac
789 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
792 __gitcomp "$(__git_refs)" + "${cur#+}"
795 __gitcomp "$(__git_refs)"
797 esac
799 esac
802 _git_rebase ()
804 local cur="${COMP_WORDS[COMP_CWORD]}"
805 if [ -d .dotest ] || [ -d .git/.dotest-merge ]; then
806 __gitcomp "--continue --skip --abort"
807 return
809 case "${COMP_WORDS[COMP_CWORD-1]}" in
810 -s|--strategy)
811 __gitcomp "$(__git_merge_strategies)"
812 return
813 esac
814 case "$cur" in
815 --strategy=*)
816 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
817 return
819 --*)
820 __gitcomp "--onto --merge --strategy"
821 return
822 esac
823 __gitcomp "$(__git_refs)"
826 _git_config ()
828 local cur="${COMP_WORDS[COMP_CWORD]}"
829 local prv="${COMP_WORDS[COMP_CWORD-1]}"
830 case "$prv" in
831 branch.*.remote)
832 __gitcomp "$(__git_remotes)"
833 return
835 branch.*.merge)
836 __gitcomp "$(__git_refs)"
837 return
839 remote.*.fetch)
840 local remote="${prv#remote.}"
841 remote="${remote%.fetch}"
842 __gitcomp "$(__git_refs_remotes "$remote")"
843 return
845 remote.*.push)
846 local remote="${prv#remote.}"
847 remote="${remote%.push}"
848 __gitcomp "$(git --git-dir="$(__gitdir)" \
849 for-each-ref --format='%(refname):%(refname)' \
850 refs/heads)"
851 return
853 pull.twohead|pull.octopus)
854 __gitcomp "$(__git_merge_strategies)"
855 return
857 color.branch|color.diff|color.status)
858 __gitcomp "always never auto"
859 return
861 color.*.*)
862 __gitcomp "
863 black red green yellow blue magenta cyan white
864 bold dim ul blink reverse
866 return
868 *.*)
869 COMPREPLY=()
870 return
872 esac
873 case "$cur" in
874 --*)
875 __gitcomp "
876 --global --system --file=
877 --list --replace-all
878 --get --get-all --get-regexp
879 --add --unset --unset-all
880 --remove-section --rename-section
882 return
884 branch.*.*)
885 local pfx="${cur%.*}."
886 cur="${cur##*.}"
887 __gitcomp "remote merge" "$pfx" "$cur"
888 return
890 branch.*)
891 local pfx="${cur%.*}."
892 cur="${cur#*.}"
893 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
894 return
896 remote.*.*)
897 local pfx="${cur%.*}."
898 cur="${cur##*.}"
899 __gitcomp "
900 url fetch push skipDefaultUpdate
901 receivepack uploadpack tagopt
902 " "$pfx" "$cur"
903 return
905 remote.*)
906 local pfx="${cur%.*}."
907 cur="${cur#*.}"
908 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
909 return
911 esac
912 __gitcomp "
913 apply.whitespace
914 core.fileMode
915 core.gitProxy
916 core.ignoreStat
917 core.preferSymlinkRefs
918 core.logAllRefUpdates
919 core.loosecompression
920 core.repositoryFormatVersion
921 core.sharedRepository
922 core.warnAmbiguousRefs
923 core.compression
924 core.legacyHeaders
925 core.packedGitWindowSize
926 core.packedGitLimit
927 clean.requireForce
928 color.branch
929 color.branch.current
930 color.branch.local
931 color.branch.remote
932 color.branch.plain
933 color.diff
934 color.diff.plain
935 color.diff.meta
936 color.diff.frag
937 color.diff.old
938 color.diff.new
939 color.diff.commit
940 color.diff.whitespace
941 color.pager
942 color.status
943 color.status.header
944 color.status.added
945 color.status.changed
946 color.status.untracked
947 diff.renameLimit
948 diff.renames
949 fetch.unpackLimit
950 format.headers
951 format.subjectprefix
952 gitcvs.enabled
953 gitcvs.logfile
954 gitcvs.allbinary
955 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
956 gc.packrefs
957 gc.reflogexpire
958 gc.reflogexpireunreachable
959 gc.rerereresolved
960 gc.rerereunresolved
961 http.sslVerify
962 http.sslCert
963 http.sslKey
964 http.sslCAInfo
965 http.sslCAPath
966 http.maxRequests
967 http.lowSpeedLimit
968 http.lowSpeedTime
969 http.noEPSV
970 i18n.commitEncoding
971 i18n.logOutputEncoding
972 log.showroot
973 merge.tool
974 merge.summary
975 merge.verbosity
976 pack.window
977 pack.depth
978 pack.windowMemory
979 pack.compression
980 pack.deltaCacheSize
981 pack.deltaCacheLimit
982 pull.octopus
983 pull.twohead
984 repack.useDeltaBaseOffset
985 show.difftree
986 showbranch.default
987 tar.umask
988 transfer.unpackLimit
989 receive.unpackLimit
990 receive.denyNonFastForwards
991 user.name
992 user.email
993 user.signingkey
994 whatchanged.difftree
995 branch. remote.
999 _git_remote ()
1001 local i c=1 command
1002 while [ $c -lt $COMP_CWORD ]; do
1003 i="${COMP_WORDS[c]}"
1004 case "$i" in
1005 add|rm|show|prune|update) command="$i"; break ;;
1006 esac
1007 c=$((++c))
1008 done
1010 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1011 __gitcomp "add rm show prune update"
1012 return
1015 case "$command" in
1016 rm|show|prune)
1017 __gitcomp "$(__git_remotes)"
1019 update)
1020 local i c='' IFS=$'\n'
1021 for i in $(git --git-dir="$(__gitdir)" config --list); do
1022 case "$i" in
1023 remotes.*)
1024 i="${i#remotes.}"
1025 c="$c ${i/=*/}"
1027 esac
1028 done
1029 __gitcomp "$c"
1032 COMPREPLY=()
1034 esac
1037 _git_reset ()
1039 local cur="${COMP_WORDS[COMP_CWORD]}"
1040 case "$cur" in
1041 --*)
1042 __gitcomp "--mixed --hard --soft"
1043 return
1045 esac
1046 __gitcomp "$(__git_refs)"
1049 _git_shortlog ()
1051 local cur="${COMP_WORDS[COMP_CWORD]}"
1052 case "$cur" in
1053 --*)
1054 __gitcomp "
1055 --max-count= --max-age= --since= --after=
1056 --min-age= --before= --until=
1057 --no-merges
1058 --author= --committer= --grep=
1059 --all-match
1060 --not --all
1061 --numbered --summary
1063 return
1065 esac
1066 __git_complete_revlist
1069 _git_show ()
1071 local cur="${COMP_WORDS[COMP_CWORD]}"
1072 case "$cur" in
1073 --pretty=*)
1074 __gitcomp "
1075 oneline short medium full fuller email raw
1076 " "" "${cur##--pretty=}"
1077 return
1079 --*)
1080 __gitcomp "--pretty="
1081 return
1083 esac
1084 __git_complete_file
1087 _git_stash ()
1089 __gitcomp 'list show apply clear'
1092 _git_submodule ()
1094 local i c=1 command
1095 while [ $c -lt $COMP_CWORD ]; do
1096 i="${COMP_WORDS[c]}"
1097 case "$i" in
1098 add|status|init|update) command="$i"; break ;;
1099 esac
1100 c=$((++c))
1101 done
1103 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1104 local cur="${COMP_WORDS[COMP_CWORD]}"
1105 case "$cur" in
1106 --*)
1107 __gitcomp "--quiet --cached"
1110 __gitcomp "add status init update"
1112 esac
1113 return
1117 _git_tag ()
1119 local i c=1 f=0
1120 while [ $c -lt $COMP_CWORD ]; do
1121 i="${COMP_WORDS[c]}"
1122 case "$i" in
1123 -d|-v)
1124 __gitcomp "$(__git_tags)"
1125 return
1130 esac
1131 c=$((++c))
1132 done
1134 case "${COMP_WORDS[COMP_CWORD-1]}" in
1135 -m|-F)
1136 COMPREPLY=()
1138 -*|tag|git-tag)
1139 if [ $f = 1 ]; then
1140 __gitcomp "$(__git_tags)"
1141 else
1142 COMPREPLY=()
1146 __gitcomp "$(__git_refs)"
1148 esac
1151 _git ()
1153 local i c=1 command __git_dir
1155 while [ $c -lt $COMP_CWORD ]; do
1156 i="${COMP_WORDS[c]}"
1157 case "$i" in
1158 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1159 --bare) __git_dir="." ;;
1160 --version|--help|-p|--paginate) ;;
1161 *) command="$i"; break ;;
1162 esac
1163 c=$((++c))
1164 done
1166 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1167 case "${COMP_WORDS[COMP_CWORD]}" in
1168 --*=*) COMPREPLY=() ;;
1169 --*) __gitcomp "
1170 --no-pager
1171 --git-dir=
1172 --bare
1173 --version
1174 --exec-path
1177 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1178 esac
1179 return
1182 local expansion=$(__git_aliased_command "$command")
1183 [ "$expansion" ] && command="$expansion"
1185 case "$command" in
1186 am) _git_am ;;
1187 add) _git_add ;;
1188 apply) _git_apply ;;
1189 bisect) _git_bisect ;;
1190 bundle) _git_bundle ;;
1191 branch) _git_branch ;;
1192 checkout) _git_checkout ;;
1193 cherry) _git_cherry ;;
1194 cherry-pick) _git_cherry_pick ;;
1195 commit) _git_commit ;;
1196 config) _git_config ;;
1197 describe) _git_describe ;;
1198 diff) _git_diff ;;
1199 fetch) _git_fetch ;;
1200 format-patch) _git_format_patch ;;
1201 gc) _git_gc ;;
1202 log) _git_log ;;
1203 ls-remote) _git_ls_remote ;;
1204 ls-tree) _git_ls_tree ;;
1205 merge) _git_merge;;
1206 merge-base) _git_merge_base ;;
1207 name-rev) _git_name_rev ;;
1208 pull) _git_pull ;;
1209 push) _git_push ;;
1210 rebase) _git_rebase ;;
1211 remote) _git_remote ;;
1212 reset) _git_reset ;;
1213 shortlog) _git_shortlog ;;
1214 show) _git_show ;;
1215 show-branch) _git_log ;;
1216 stash) _git_stash ;;
1217 submodule) _git_submodule ;;
1218 tag) _git_tag ;;
1219 whatchanged) _git_log ;;
1220 *) COMPREPLY=() ;;
1221 esac
1224 _gitk ()
1226 local cur="${COMP_WORDS[COMP_CWORD]}"
1227 case "$cur" in
1228 --*)
1229 __gitcomp "--not --all"
1230 return
1232 esac
1233 __git_complete_revlist
1236 complete -o default -o nospace -F _git git
1237 complete -o default -o nospace -F _gitk gitk
1238 complete -o default -o nospace -F _git_am git-am
1239 complete -o default -o nospace -F _git_apply git-apply
1240 complete -o default -o nospace -F _git_bisect git-bisect
1241 complete -o default -o nospace -F _git_branch git-branch
1242 complete -o default -o nospace -F _git_bundle git-bundle
1243 complete -o default -o nospace -F _git_checkout git-checkout
1244 complete -o default -o nospace -F _git_cherry git-cherry
1245 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1246 complete -o default -o nospace -F _git_commit git-commit
1247 complete -o default -o nospace -F _git_describe git-describe
1248 complete -o default -o nospace -F _git_diff git-diff
1249 complete -o default -o nospace -F _git_fetch git-fetch
1250 complete -o default -o nospace -F _git_format_patch git-format-patch
1251 complete -o default -o nospace -F _git_gc git-gc
1252 complete -o default -o nospace -F _git_log git-log
1253 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1254 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1255 complete -o default -o nospace -F _git_merge git-merge
1256 complete -o default -o nospace -F _git_merge_base git-merge-base
1257 complete -o default -o nospace -F _git_name_rev git-name-rev
1258 complete -o default -o nospace -F _git_pull git-pull
1259 complete -o default -o nospace -F _git_push git-push
1260 complete -o default -o nospace -F _git_rebase git-rebase
1261 complete -o default -o nospace -F _git_config git-config
1262 complete -o default -o nospace -F _git_remote git-remote
1263 complete -o default -o nospace -F _git_reset git-reset
1264 complete -o default -o nospace -F _git_shortlog git-shortlog
1265 complete -o default -o nospace -F _git_show git-show
1266 complete -o default -o nospace -F _git_stash git-stash
1267 complete -o default -o nospace -F _git_submodule git-submodule
1268 complete -o default -o nospace -F _git_log git-show-branch
1269 complete -o default -o nospace -F _git_tag git-tag
1270 complete -o default -o nospace -F _git_log git-whatchanged
1272 # The following are necessary only for Cygwin, and only are needed
1273 # when the user has tab-completed the executable name and consequently
1274 # included the '.exe' suffix.
1276 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1277 complete -o default -o nospace -F _git_add git-add.exe
1278 complete -o default -o nospace -F _git_apply git-apply.exe
1279 complete -o default -o nospace -F _git git.exe
1280 complete -o default -o nospace -F _git_branch git-branch.exe
1281 complete -o default -o nospace -F _git_bundle git-bundle.exe
1282 complete -o default -o nospace -F _git_cherry git-cherry.exe
1283 complete -o default -o nospace -F _git_describe git-describe.exe
1284 complete -o default -o nospace -F _git_diff git-diff.exe
1285 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1286 complete -o default -o nospace -F _git_log git-log.exe
1287 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1288 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1289 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1290 complete -o default -o nospace -F _git_push git-push.exe
1291 complete -o default -o nospace -F _git_config git-config
1292 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1293 complete -o default -o nospace -F _git_show git-show.exe
1294 complete -o default -o nospace -F _git_log git-show-branch.exe
1295 complete -o default -o nospace -F _git_tag git-tag.exe
1296 complete -o default -o nospace -F _git_log git-whatchanged.exe