teach bash completion to treat commands with "--" as a helper
[git/dscho.git] / contrib / completion / git-completion.bash
blob343364de04d223c2843c651919803b97de616ba2
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 b="$(git symbolic-ref HEAD 2>/dev/null)"
68 if [ -n "$b" ]; then
69 if [ -n "$1" ]; then
70 printf "$1" "${b##refs/heads/}"
71 else
72 printf " (%s)" "${b##refs/heads/}"
77 __gitcomp ()
79 local all c s=$'\n' IFS=' '$'\t'$'\n'
80 local cur="${COMP_WORDS[COMP_CWORD]}"
81 if [ $# -gt 2 ]; then
82 cur="$3"
84 for c in $1; do
85 case "$c$4" in
86 --*=*) all="$all$c$4$s" ;;
87 *.) all="$all$c$4$s" ;;
88 *) all="$all$c$4 $s" ;;
89 esac
90 done
91 IFS=$s
92 COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
93 return
96 __git_heads ()
98 local cmd i is_hash=y dir="$(__gitdir "$1")"
99 if [ -d "$dir" ]; then
100 for i in $(git --git-dir="$dir" \
101 for-each-ref --format='%(refname)' \
102 refs/heads ); do
103 echo "${i#refs/heads/}"
104 done
105 return
107 for i in $(git-ls-remote "$1" 2>/dev/null); do
108 case "$is_hash,$i" in
109 y,*) is_hash=n ;;
110 n,*^{}) is_hash=y ;;
111 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
112 n,*) is_hash=y; echo "$i" ;;
113 esac
114 done
117 __git_tags ()
119 local cmd i is_hash=y dir="$(__gitdir "$1")"
120 if [ -d "$dir" ]; then
121 for i in $(git --git-dir="$dir" \
122 for-each-ref --format='%(refname)' \
123 refs/tags ); do
124 echo "${i#refs/tags/}"
125 done
126 return
128 for i in $(git-ls-remote "$1" 2>/dev/null); do
129 case "$is_hash,$i" in
130 y,*) is_hash=n ;;
131 n,*^{}) is_hash=y ;;
132 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
133 n,*) is_hash=y; echo "$i" ;;
134 esac
135 done
138 __git_refs ()
140 local cmd i is_hash=y dir="$(__gitdir "$1")"
141 if [ -d "$dir" ]; then
142 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
143 for i in $(git --git-dir="$dir" \
144 for-each-ref --format='%(refname)' \
145 refs/tags refs/heads refs/remotes); do
146 case "$i" in
147 refs/tags/*) echo "${i#refs/tags/}" ;;
148 refs/heads/*) echo "${i#refs/heads/}" ;;
149 refs/remotes/*) echo "${i#refs/remotes/}" ;;
150 *) echo "$i" ;;
151 esac
152 done
153 return
155 for i in $(git-ls-remote "$dir" 2>/dev/null); do
156 case "$is_hash,$i" in
157 y,*) is_hash=n ;;
158 n,*^{}) is_hash=y ;;
159 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
160 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
161 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
162 n,*) is_hash=y; echo "$i" ;;
163 esac
164 done
167 __git_refs2 ()
169 local i
170 for i in $(__git_refs "$1"); do
171 echo "$i:$i"
172 done
175 __git_refs_remotes ()
177 local cmd i is_hash=y
178 for i in $(git-ls-remote "$1" 2>/dev/null); do
179 case "$is_hash,$i" in
180 n,refs/heads/*)
181 is_hash=y
182 echo "$i:refs/remotes/$1/${i#refs/heads/}"
184 y,*) is_hash=n ;;
185 n,*^{}) is_hash=y ;;
186 n,refs/tags/*) is_hash=y;;
187 n,*) is_hash=y; ;;
188 esac
189 done
192 __git_remotes ()
194 local i ngoff IFS=$'\n' d="$(__gitdir)"
195 shopt -q nullglob || ngoff=1
196 shopt -s nullglob
197 for i in "$d/remotes"/*; do
198 echo ${i#$d/remotes/}
199 done
200 [ "$ngoff" ] && shopt -u nullglob
201 for i in $(git --git-dir="$d" config --list); do
202 case "$i" in
203 remote.*.url=*)
204 i="${i#remote.}"
205 echo "${i/.url=*/}"
207 esac
208 done
211 __git_merge_strategies ()
213 if [ -n "$__git_merge_strategylist" ]; then
214 echo "$__git_merge_strategylist"
215 return
217 sed -n "/^all_strategies='/{
218 s/^all_strategies='//
219 s/'//
222 }" "$(git --exec-path)/git-merge"
224 __git_merge_strategylist=
225 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
227 __git_complete_file ()
229 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
230 case "$cur" in
231 ?*:*)
232 ref="${cur%%:*}"
233 cur="${cur#*:}"
234 case "$cur" in
235 ?*/*)
236 pfx="${cur%/*}"
237 cur="${cur##*/}"
238 ls="$ref:$pfx"
239 pfx="$pfx/"
242 ls="$ref"
244 esac
245 COMPREPLY=($(compgen -P "$pfx" \
246 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
247 | sed '/^100... blob /s,^.* ,,
248 /^040000 tree /{
249 s,^.* ,,
250 s,$,/,
252 s/^.* //')" \
253 -- "$cur"))
256 __gitcomp "$(__git_refs)"
258 esac
261 __git_complete_revlist ()
263 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
264 case "$cur" in
265 *...*)
266 pfx="${cur%...*}..."
267 cur="${cur#*...}"
268 __gitcomp "$(__git_refs)" "$pfx" "$cur"
270 *..*)
271 pfx="${cur%..*}.."
272 cur="${cur#*..}"
273 __gitcomp "$(__git_refs)" "$pfx" "$cur"
276 __gitcomp "$cur."
279 __gitcomp "$(__git_refs)"
281 esac
284 __git_commands ()
286 if [ -n "$__git_commandlist" ]; then
287 echo "$__git_commandlist"
288 return
290 local i IFS=" "$'\n'
291 for i in $(git help -a|egrep '^ ')
293 case $i in
294 *--*) : helper pattern;;
295 applymbox) : ask gittus;;
296 applypatch) : ask gittus;;
297 archimport) : import;;
298 cat-file) : plumbing;;
299 check-attr) : plumbing;;
300 check-ref-format) : plumbing;;
301 commit-tree) : plumbing;;
302 cvsexportcommit) : export;;
303 cvsimport) : import;;
304 cvsserver) : daemon;;
305 daemon) : daemon;;
306 diff-files) : plumbing;;
307 diff-index) : plumbing;;
308 diff-tree) : plumbing;;
309 fast-import) : import;;
310 fsck-objects) : plumbing;;
311 fetch-pack) : plumbing;;
312 fmt-merge-msg) : plumbing;;
313 for-each-ref) : plumbing;;
314 hash-object) : plumbing;;
315 http-*) : transport;;
316 index-pack) : plumbing;;
317 init-db) : deprecated;;
318 local-fetch) : plumbing;;
319 mailinfo) : plumbing;;
320 mailsplit) : plumbing;;
321 merge-*) : plumbing;;
322 mktree) : plumbing;;
323 mktag) : plumbing;;
324 pack-objects) : plumbing;;
325 pack-redundant) : plumbing;;
326 pack-refs) : plumbing;;
327 parse-remote) : plumbing;;
328 patch-id) : plumbing;;
329 peek-remote) : plumbing;;
330 prune) : plumbing;;
331 prune-packed) : plumbing;;
332 quiltimport) : import;;
333 read-tree) : plumbing;;
334 receive-pack) : plumbing;;
335 reflog) : plumbing;;
336 repo-config) : plumbing;;
337 rerere) : plumbing;;
338 rev-list) : plumbing;;
339 rev-parse) : plumbing;;
340 runstatus) : plumbing;;
341 sh-setup) : internal;;
342 shell) : daemon;;
343 send-pack) : plumbing;;
344 show-index) : plumbing;;
345 ssh-*) : transport;;
346 stripspace) : plumbing;;
347 svn) : import export;;
348 symbolic-ref) : plumbing;;
349 tar-tree) : deprecated;;
350 unpack-file) : plumbing;;
351 unpack-objects) : plumbing;;
352 update-index) : plumbing;;
353 update-ref) : plumbing;;
354 update-server-info) : daemon;;
355 upload-archive) : plumbing;;
356 upload-pack) : plumbing;;
357 write-tree) : plumbing;;
358 verify-tag) : plumbing;;
359 *) echo $i;;
360 esac
361 done
363 __git_commandlist=
364 __git_commandlist="$(__git_commands 2>/dev/null)"
366 __git_aliases ()
368 local i IFS=$'\n'
369 for i in $(git --git-dir="$(__gitdir)" config --list); do
370 case "$i" in
371 alias.*)
372 i="${i#alias.}"
373 echo "${i/=*/}"
375 esac
376 done
379 __git_aliased_command ()
381 local word cmdline=$(git --git-dir="$(__gitdir)" \
382 config --get "alias.$1")
383 for word in $cmdline; do
384 if [ "${word##-*}" ]; then
385 echo $word
386 return
388 done
391 __git_whitespacelist="nowarn warn error error-all strip"
393 _git_am ()
395 local cur="${COMP_WORDS[COMP_CWORD]}"
396 if [ -d .dotest ]; then
397 __gitcomp "--skip --resolved"
398 return
400 case "$cur" in
401 --whitespace=*)
402 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
403 return
405 --*)
406 __gitcomp "
407 --signoff --utf8 --binary --3way --interactive
408 --whitespace=
410 return
411 esac
412 COMPREPLY=()
415 _git_apply ()
417 local cur="${COMP_WORDS[COMP_CWORD]}"
418 case "$cur" in
419 --whitespace=*)
420 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
421 return
423 --*)
424 __gitcomp "
425 --stat --numstat --summary --check --index
426 --cached --index-info --reverse --reject --unidiff-zero
427 --apply --no-add --exclude=
428 --whitespace= --inaccurate-eof --verbose
430 return
431 esac
432 COMPREPLY=()
435 _git_add ()
437 local cur="${COMP_WORDS[COMP_CWORD]}"
438 case "$cur" in
439 --*)
440 __gitcomp "--interactive --refresh"
441 return
442 esac
443 COMPREPLY=()
446 _git_bisect ()
448 local i c=1 command
449 while [ $c -lt $COMP_CWORD ]; do
450 i="${COMP_WORDS[c]}"
451 case "$i" in
452 start|bad|good|reset|visualize|replay|log)
453 command="$i"
454 break
456 esac
457 c=$((++c))
458 done
460 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
461 __gitcomp "start bad good reset visualize replay log"
462 return
465 case "$command" in
466 bad|good|reset)
467 __gitcomp "$(__git_refs)"
470 COMPREPLY=()
472 esac
475 _git_branch ()
477 __gitcomp "$(__git_refs)"
480 _git_bundle ()
482 local mycword="$COMP_CWORD"
483 case "${COMP_WORDS[0]}" in
484 git)
485 local cmd="${COMP_WORDS[2]}"
486 mycword="$((mycword-1))"
488 git-bundle*)
489 local cmd="${COMP_WORDS[1]}"
491 esac
492 case "$mycword" in
494 __gitcomp "create list-heads verify unbundle"
497 # looking for a file
500 case "$cmd" in
501 create)
502 __git_complete_revlist
504 esac
506 esac
509 _git_checkout ()
511 __gitcomp "$(__git_refs)"
514 _git_cherry ()
516 __gitcomp "$(__git_refs)"
519 _git_cherry_pick ()
521 local cur="${COMP_WORDS[COMP_CWORD]}"
522 case "$cur" in
523 --*)
524 __gitcomp "--edit --no-commit"
527 __gitcomp "$(__git_refs)"
529 esac
532 _git_commit ()
534 local cur="${COMP_WORDS[COMP_CWORD]}"
535 case "$cur" in
536 --*)
537 __gitcomp "
538 --all --author= --signoff --verify --no-verify
539 --edit --amend --include --only
541 return
542 esac
543 COMPREPLY=()
546 _git_describe ()
548 __gitcomp "$(__git_refs)"
551 _git_diff ()
553 local cur="${COMP_WORDS[COMP_CWORD]}"
554 case "$cur" in
555 --*)
556 __gitcomp "--cached --stat --numstat --shortstat --summary
557 --patch-with-stat --name-only --name-status --color
558 --no-color --color-words --no-renames --check
559 --full-index --binary --abbrev --diff-filter
560 --find-copies-harder --pickaxe-all --pickaxe-regex
561 --text --ignore-space-at-eol --ignore-space-change
562 --ignore-all-space --exit-code --quiet --ext-diff
563 --no-ext-diff"
564 return
566 esac
567 __git_complete_file
570 _git_diff_tree ()
572 __gitcomp "$(__git_refs)"
575 _git_fetch ()
577 local cur="${COMP_WORDS[COMP_CWORD]}"
579 case "${COMP_WORDS[0]},$COMP_CWORD" in
580 git-fetch*,1)
581 __gitcomp "$(__git_remotes)"
583 git,2)
584 __gitcomp "$(__git_remotes)"
587 case "$cur" in
588 *:*)
589 __gitcomp "$(__git_refs)" "" "${cur#*:}"
592 local remote
593 case "${COMP_WORDS[0]}" in
594 git-fetch) remote="${COMP_WORDS[1]}" ;;
595 git) remote="${COMP_WORDS[2]}" ;;
596 esac
597 __gitcomp "$(__git_refs2 "$remote")"
599 esac
601 esac
604 _git_format_patch ()
606 local cur="${COMP_WORDS[COMP_CWORD]}"
607 case "$cur" in
608 --*)
609 __gitcomp "
610 --stdout --attach --thread
611 --output-directory
612 --numbered --start-number
613 --numbered-files
614 --keep-subject
615 --signoff
616 --in-reply-to=
617 --full-index --binary
618 --not --all
620 return
622 esac
623 __git_complete_revlist
626 _git_gc ()
628 local cur="${COMP_WORDS[COMP_CWORD]}"
629 case "$cur" in
630 --*)
631 __gitcomp "--prune --aggressive"
632 return
634 esac
635 COMPREPLY=()
638 _git_ls_remote ()
640 __gitcomp "$(__git_remotes)"
643 _git_ls_tree ()
645 __git_complete_file
648 _git_log ()
650 local cur="${COMP_WORDS[COMP_CWORD]}"
651 case "$cur" in
652 --pretty=*)
653 __gitcomp "
654 oneline short medium full fuller email raw
655 " "" "${cur##--pretty=}"
656 return
658 --date=*)
659 __gitcomp "
660 relative iso8601 rfc2822 short local default
661 " "" "${cur##--date=}"
662 return
664 --*)
665 __gitcomp "
666 --max-count= --max-age= --since= --after=
667 --min-age= --before= --until=
668 --root --topo-order --date-order --reverse
669 --no-merges --follow
670 --abbrev-commit --abbrev=
671 --relative-date --date=
672 --author= --committer= --grep=
673 --all-match
674 --pretty= --name-status --name-only --raw
675 --not --all
676 --left-right --cherry-pick
678 return
680 esac
681 __git_complete_revlist
684 _git_merge ()
686 local cur="${COMP_WORDS[COMP_CWORD]}"
687 case "${COMP_WORDS[COMP_CWORD-1]}" in
688 -s|--strategy)
689 __gitcomp "$(__git_merge_strategies)"
690 return
691 esac
692 case "$cur" in
693 --strategy=*)
694 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
695 return
697 --*)
698 __gitcomp "
699 --no-commit --no-summary --squash --strategy
701 return
702 esac
703 __gitcomp "$(__git_refs)"
706 _git_merge_base ()
708 __gitcomp "$(__git_refs)"
711 _git_name_rev ()
713 __gitcomp "--tags --all --stdin"
716 _git_pull ()
718 local cur="${COMP_WORDS[COMP_CWORD]}"
720 case "${COMP_WORDS[0]},$COMP_CWORD" in
721 git-pull*,1)
722 __gitcomp "$(__git_remotes)"
724 git,2)
725 __gitcomp "$(__git_remotes)"
728 local remote
729 case "${COMP_WORDS[0]}" in
730 git-pull) remote="${COMP_WORDS[1]}" ;;
731 git) remote="${COMP_WORDS[2]}" ;;
732 esac
733 __gitcomp "$(__git_refs "$remote")"
735 esac
738 _git_push ()
740 local cur="${COMP_WORDS[COMP_CWORD]}"
742 case "${COMP_WORDS[0]},$COMP_CWORD" in
743 git-push*,1)
744 __gitcomp "$(__git_remotes)"
746 git,2)
747 __gitcomp "$(__git_remotes)"
750 case "$cur" in
751 *:*)
752 local remote
753 case "${COMP_WORDS[0]}" in
754 git-push) remote="${COMP_WORDS[1]}" ;;
755 git) remote="${COMP_WORDS[2]}" ;;
756 esac
757 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
760 __gitcomp "$(__git_refs)" + "${cur#+}"
763 __gitcomp "$(__git_refs)"
765 esac
767 esac
770 _git_rebase ()
772 local cur="${COMP_WORDS[COMP_CWORD]}"
773 if [ -d .dotest ] || [ -d .git/.dotest-merge ]; then
774 __gitcomp "--continue --skip --abort"
775 return
777 case "${COMP_WORDS[COMP_CWORD-1]}" in
778 -s|--strategy)
779 __gitcomp "$(__git_merge_strategies)"
780 return
781 esac
782 case "$cur" in
783 --strategy=*)
784 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
785 return
787 --*)
788 __gitcomp "--onto --merge --strategy"
789 return
790 esac
791 __gitcomp "$(__git_refs)"
794 _git_config ()
796 local cur="${COMP_WORDS[COMP_CWORD]}"
797 local prv="${COMP_WORDS[COMP_CWORD-1]}"
798 case "$prv" in
799 branch.*.remote)
800 __gitcomp "$(__git_remotes)"
801 return
803 branch.*.merge)
804 __gitcomp "$(__git_refs)"
805 return
807 remote.*.fetch)
808 local remote="${prv#remote.}"
809 remote="${remote%.fetch}"
810 __gitcomp "$(__git_refs_remotes "$remote")"
811 return
813 remote.*.push)
814 local remote="${prv#remote.}"
815 remote="${remote%.push}"
816 __gitcomp "$(git --git-dir="$(__gitdir)" \
817 for-each-ref --format='%(refname):%(refname)' \
818 refs/heads)"
819 return
821 pull.twohead|pull.octopus)
822 __gitcomp "$(__git_merge_strategies)"
823 return
825 color.branch|color.diff|color.status)
826 __gitcomp "always never auto"
827 return
829 color.*.*)
830 __gitcomp "
831 black red green yellow blue magenta cyan white
832 bold dim ul blink reverse
834 return
836 *.*)
837 COMPREPLY=()
838 return
840 esac
841 case "$cur" in
842 --*)
843 __gitcomp "
844 --global --system --file=
845 --list --replace-all
846 --get --get-all --get-regexp
847 --add --unset --unset-all
848 --remove-section --rename-section
850 return
852 branch.*.*)
853 local pfx="${cur%.*}."
854 cur="${cur##*.}"
855 __gitcomp "remote merge" "$pfx" "$cur"
856 return
858 branch.*)
859 local pfx="${cur%.*}."
860 cur="${cur#*.}"
861 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
862 return
864 remote.*.*)
865 local pfx="${cur%.*}."
866 cur="${cur##*.}"
867 __gitcomp "
868 url fetch push skipDefaultUpdate
869 receivepack uploadpack tagopt
870 " "$pfx" "$cur"
871 return
873 remote.*)
874 local pfx="${cur%.*}."
875 cur="${cur#*.}"
876 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
877 return
879 esac
880 __gitcomp "
881 apply.whitespace
882 core.fileMode
883 core.gitProxy
884 core.ignoreStat
885 core.preferSymlinkRefs
886 core.logAllRefUpdates
887 core.loosecompression
888 core.repositoryFormatVersion
889 core.sharedRepository
890 core.warnAmbiguousRefs
891 core.compression
892 core.legacyHeaders
893 core.packedGitWindowSize
894 core.packedGitLimit
895 clean.requireForce
896 color.branch
897 color.branch.current
898 color.branch.local
899 color.branch.remote
900 color.branch.plain
901 color.diff
902 color.diff.plain
903 color.diff.meta
904 color.diff.frag
905 color.diff.old
906 color.diff.new
907 color.diff.commit
908 color.diff.whitespace
909 color.pager
910 color.status
911 color.status.header
912 color.status.added
913 color.status.changed
914 color.status.untracked
915 diff.renameLimit
916 diff.renames
917 fetch.unpackLimit
918 format.headers
919 format.subjectprefix
920 gitcvs.enabled
921 gitcvs.logfile
922 gitcvs.allbinary
923 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
924 gc.packrefs
925 gc.reflogexpire
926 gc.reflogexpireunreachable
927 gc.rerereresolved
928 gc.rerereunresolved
929 http.sslVerify
930 http.sslCert
931 http.sslKey
932 http.sslCAInfo
933 http.sslCAPath
934 http.maxRequests
935 http.lowSpeedLimit
936 http.lowSpeedTime
937 http.noEPSV
938 i18n.commitEncoding
939 i18n.logOutputEncoding
940 log.showroot
941 merge.tool
942 merge.summary
943 merge.verbosity
944 pack.window
945 pack.depth
946 pack.windowMemory
947 pack.compression
948 pack.deltaCacheSize
949 pack.deltaCacheLimit
950 pull.octopus
951 pull.twohead
952 repack.useDeltaBaseOffset
953 show.difftree
954 showbranch.default
955 tar.umask
956 transfer.unpackLimit
957 receive.unpackLimit
958 receive.denyNonFastForwards
959 user.name
960 user.email
961 user.signingkey
962 whatchanged.difftree
963 branch. remote.
967 _git_remote ()
969 local i c=1 command
970 while [ $c -lt $COMP_CWORD ]; do
971 i="${COMP_WORDS[c]}"
972 case "$i" in
973 add|show|prune|update) command="$i"; break ;;
974 esac
975 c=$((++c))
976 done
978 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
979 __gitcomp "add show prune update"
980 return
983 case "$command" in
984 show|prune)
985 __gitcomp "$(__git_remotes)"
987 update)
988 local i c='' IFS=$'\n'
989 for i in $(git --git-dir="$(__gitdir)" config --list); do
990 case "$i" in
991 remotes.*)
992 i="${i#remotes.}"
993 c="$c ${i/=*/}"
995 esac
996 done
997 __gitcomp "$c"
1000 COMPREPLY=()
1002 esac
1005 _git_reset ()
1007 local cur="${COMP_WORDS[COMP_CWORD]}"
1008 case "$cur" in
1009 --*)
1010 __gitcomp "--mixed --hard --soft"
1011 return
1013 esac
1014 __gitcomp "$(__git_refs)"
1017 _git_shortlog ()
1019 local cur="${COMP_WORDS[COMP_CWORD]}"
1020 case "$cur" in
1021 --*)
1022 __gitcomp "
1023 --max-count= --max-age= --since= --after=
1024 --min-age= --before= --until=
1025 --no-merges
1026 --author= --committer= --grep=
1027 --all-match
1028 --not --all
1029 --numbered --summary
1031 return
1033 esac
1034 __git_complete_revlist
1037 _git_show ()
1039 local cur="${COMP_WORDS[COMP_CWORD]}"
1040 case "$cur" in
1041 --pretty=*)
1042 __gitcomp "
1043 oneline short medium full fuller email raw
1044 " "" "${cur##--pretty=}"
1045 return
1047 --*)
1048 __gitcomp "--pretty="
1049 return
1051 esac
1052 __git_complete_file
1055 _git_stash ()
1057 __gitcomp 'list show apply clear'
1060 _git_submodule ()
1062 local i c=1 command
1063 while [ $c -lt $COMP_CWORD ]; do
1064 i="${COMP_WORDS[c]}"
1065 case "$i" in
1066 add|status|init|update) command="$i"; break ;;
1067 esac
1068 c=$((++c))
1069 done
1071 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1072 local cur="${COMP_WORDS[COMP_CWORD]}"
1073 case "$cur" in
1074 --*)
1075 __gitcomp "--quiet --cached"
1078 __gitcomp "add status init update"
1080 esac
1081 return
1085 _git_tag ()
1087 local i c=1 f=0
1088 while [ $c -lt $COMP_CWORD ]; do
1089 i="${COMP_WORDS[c]}"
1090 case "$i" in
1091 -d|-v)
1092 __gitcomp "$(__git_tags)"
1093 return
1098 esac
1099 c=$((++c))
1100 done
1102 case "${COMP_WORDS[COMP_CWORD-1]}" in
1103 -m|-F)
1104 COMPREPLY=()
1106 -*|tag|git-tag)
1107 if [ $f = 1 ]; then
1108 __gitcomp "$(__git_tags)"
1109 else
1110 COMPREPLY=()
1114 __gitcomp "$(__git_refs)"
1116 esac
1119 _git ()
1121 local i c=1 command __git_dir
1123 while [ $c -lt $COMP_CWORD ]; do
1124 i="${COMP_WORDS[c]}"
1125 case "$i" in
1126 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1127 --bare) __git_dir="." ;;
1128 --version|--help|-p|--paginate) ;;
1129 *) command="$i"; break ;;
1130 esac
1131 c=$((++c))
1132 done
1134 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1135 case "${COMP_WORDS[COMP_CWORD]}" in
1136 --*=*) COMPREPLY=() ;;
1137 --*) __gitcomp "
1138 --no-pager
1139 --git-dir=
1140 --bare
1141 --version
1142 --exec-path
1145 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1146 esac
1147 return
1150 local expansion=$(__git_aliased_command "$command")
1151 [ "$expansion" ] && command="$expansion"
1153 case "$command" in
1154 am) _git_am ;;
1155 add) _git_add ;;
1156 apply) _git_apply ;;
1157 bisect) _git_bisect ;;
1158 bundle) _git_bundle ;;
1159 branch) _git_branch ;;
1160 checkout) _git_checkout ;;
1161 cherry) _git_cherry ;;
1162 cherry-pick) _git_cherry_pick ;;
1163 commit) _git_commit ;;
1164 config) _git_config ;;
1165 describe) _git_describe ;;
1166 diff) _git_diff ;;
1167 fetch) _git_fetch ;;
1168 format-patch) _git_format_patch ;;
1169 gc) _git_gc ;;
1170 log) _git_log ;;
1171 ls-remote) _git_ls_remote ;;
1172 ls-tree) _git_ls_tree ;;
1173 merge) _git_merge;;
1174 merge-base) _git_merge_base ;;
1175 name-rev) _git_name_rev ;;
1176 pull) _git_pull ;;
1177 push) _git_push ;;
1178 rebase) _git_rebase ;;
1179 remote) _git_remote ;;
1180 reset) _git_reset ;;
1181 shortlog) _git_shortlog ;;
1182 show) _git_show ;;
1183 show-branch) _git_log ;;
1184 stash) _git_stash ;;
1185 submodule) _git_submodule ;;
1186 tag) _git_tag ;;
1187 whatchanged) _git_log ;;
1188 *) COMPREPLY=() ;;
1189 esac
1192 _gitk ()
1194 local cur="${COMP_WORDS[COMP_CWORD]}"
1195 case "$cur" in
1196 --*)
1197 __gitcomp "--not --all"
1198 return
1200 esac
1201 __git_complete_revlist
1204 complete -o default -o nospace -F _git git
1205 complete -o default -o nospace -F _gitk gitk
1206 complete -o default -o nospace -F _git_am git-am
1207 complete -o default -o nospace -F _git_apply git-apply
1208 complete -o default -o nospace -F _git_bisect git-bisect
1209 complete -o default -o nospace -F _git_branch git-branch
1210 complete -o default -o nospace -F _git_bundle git-bundle
1211 complete -o default -o nospace -F _git_checkout git-checkout
1212 complete -o default -o nospace -F _git_cherry git-cherry
1213 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1214 complete -o default -o nospace -F _git_commit git-commit
1215 complete -o default -o nospace -F _git_describe git-describe
1216 complete -o default -o nospace -F _git_diff git-diff
1217 complete -o default -o nospace -F _git_fetch git-fetch
1218 complete -o default -o nospace -F _git_format_patch git-format-patch
1219 complete -o default -o nospace -F _git_gc git-gc
1220 complete -o default -o nospace -F _git_log git-log
1221 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1222 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1223 complete -o default -o nospace -F _git_merge git-merge
1224 complete -o default -o nospace -F _git_merge_base git-merge-base
1225 complete -o default -o nospace -F _git_name_rev git-name-rev
1226 complete -o default -o nospace -F _git_pull git-pull
1227 complete -o default -o nospace -F _git_push git-push
1228 complete -o default -o nospace -F _git_rebase git-rebase
1229 complete -o default -o nospace -F _git_config git-config
1230 complete -o default -o nospace -F _git_remote git-remote
1231 complete -o default -o nospace -F _git_reset git-reset
1232 complete -o default -o nospace -F _git_shortlog git-shortlog
1233 complete -o default -o nospace -F _git_show git-show
1234 complete -o default -o nospace -F _git_stash git-stash
1235 complete -o default -o nospace -F _git_submodule git-submodule
1236 complete -o default -o nospace -F _git_log git-show-branch
1237 complete -o default -o nospace -F _git_tag git-tag
1238 complete -o default -o nospace -F _git_log git-whatchanged
1240 # The following are necessary only for Cygwin, and only are needed
1241 # when the user has tab-completed the executable name and consequently
1242 # included the '.exe' suffix.
1244 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1245 complete -o default -o nospace -F _git_add git-add.exe
1246 complete -o default -o nospace -F _git_apply git-apply.exe
1247 complete -o default -o nospace -F _git git.exe
1248 complete -o default -o nospace -F _git_branch git-branch.exe
1249 complete -o default -o nospace -F _git_bundle git-bundle.exe
1250 complete -o default -o nospace -F _git_cherry git-cherry.exe
1251 complete -o default -o nospace -F _git_describe git-describe.exe
1252 complete -o default -o nospace -F _git_diff git-diff.exe
1253 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1254 complete -o default -o nospace -F _git_log git-log.exe
1255 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1256 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1257 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1258 complete -o default -o nospace -F _git_push git-push.exe
1259 complete -o default -o nospace -F _git_config git-config
1260 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1261 complete -o default -o nospace -F _git_show git-show.exe
1262 complete -o default -o nospace -F _git_log git-show-branch.exe
1263 complete -o default -o nospace -F _git_tag git-tag.exe
1264 complete -o default -o nospace -F _git_log git-whatchanged.exe