bash: Add space after unique command name is completed.
[git/jnareb-git.git] / contrib / completion / git-completion.bash
blob1cf576e1e57820ed13bfa9fe583b77779b315502
2 # bash completion support for core Git.
4 # Copyright (C) 2006,2007 Shawn Pearce
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
7 # The contained completion routines provide support for completing:
9 # *) local and remote branch names
10 # *) local and remote tag names
11 # *) .git/remotes file names
12 # *) git 'subcommands'
13 # *) tree paths within 'ref:path/to/file' expressions
15 # To use these routines:
17 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
18 # 2) Added the following line to your .bashrc:
19 # source ~/.git-completion.sh
21 # 3) You may want to make sure the git executable is available
22 # in your PATH before this script is sourced, as some caching
23 # is performed while the script loads. If git isn't found
24 # at source time then all lookups will be done on demand,
25 # which may be slightly slower.
27 # 4) Consider changing your PS1 to also show the current branch:
28 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
30 # The argument to __git_ps1 will be displayed only if you
31 # are currently in a git repository. The %s token will be
32 # the name of the current branch.
35 __gitdir ()
37 if [ -z "$1" ]; then
38 if [ -n "$__git_dir" ]; then
39 echo "$__git_dir"
40 elif [ -d .git ]; then
41 echo .git
42 else
43 git rev-parse --git-dir 2>/dev/null
45 elif [ -d "$1/.git" ]; then
46 echo "$1/.git"
47 else
48 echo "$1"
52 __git_ps1 ()
54 local b="$(git symbolic-ref HEAD 2>/dev/null)"
55 if [ -n "$b" ]; then
56 if [ -n "$1" ]; then
57 printf "$1" "${b##refs/heads/}"
58 else
59 printf " (%s)" "${b##refs/heads/}"
64 __gitcomp ()
66 local all c s=$'\n' IFS=' '$'\t'$'\n'
67 for c in $1; do
68 case "$c" in
69 --*=*) all="$all$c$s" ;;
70 *) all="$all$c $s" ;;
71 esac
72 done
73 IFS=$s
74 COMPREPLY=($(compgen -W "$all" -- "${COMP_WORDS[COMP_CWORD]}"))
75 return
78 __git_heads ()
80 local cmd i is_hash=y dir="$(__gitdir "$1")"
81 if [ -d "$dir" ]; then
82 for i in $(git --git-dir="$dir" \
83 for-each-ref --format='%(refname)' \
84 refs/heads ); do
85 echo "${i#refs/heads/}"
86 done
87 return
89 for i in $(git-ls-remote "$1" 2>/dev/null); do
90 case "$is_hash,$i" in
91 y,*) is_hash=n ;;
92 n,*^{}) is_hash=y ;;
93 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
94 n,*) is_hash=y; echo "$i" ;;
95 esac
96 done
99 __git_refs ()
101 local cmd i is_hash=y dir="$(__gitdir "$1")"
102 if [ -d "$dir" ]; then
103 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
104 for i in $(git --git-dir="$dir" \
105 for-each-ref --format='%(refname)' \
106 refs/tags refs/heads refs/remotes); do
107 case "$i" in
108 refs/tags/*) echo "${i#refs/tags/}" ;;
109 refs/heads/*) echo "${i#refs/heads/}" ;;
110 refs/remotes/*) echo "${i#refs/remotes/}" ;;
111 *) echo "$i" ;;
112 esac
113 done
114 return
116 for i in $(git-ls-remote "$dir" 2>/dev/null); do
117 case "$is_hash,$i" in
118 y,*) is_hash=n ;;
119 n,*^{}) is_hash=y ;;
120 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
121 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
122 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
123 n,*) is_hash=y; echo "$i" ;;
124 esac
125 done
128 __git_refs2 ()
130 local i
131 for i in $(__git_refs "$1"); do
132 echo "$i:$i"
133 done
136 __git_refs_remotes ()
138 local cmd i is_hash=y
139 for i in $(git-ls-remote "$1" 2>/dev/null); do
140 case "$is_hash,$i" in
141 n,refs/heads/*)
142 is_hash=y
143 echo "$i:refs/remotes/$1/${i#refs/heads/}"
145 y,*) is_hash=n ;;
146 n,*^{}) is_hash=y ;;
147 n,refs/tags/*) is_hash=y;;
148 n,*) is_hash=y; ;;
149 esac
150 done
153 __git_remotes ()
155 local i ngoff IFS=$'\n' d="$(__gitdir)"
156 shopt -q nullglob || ngoff=1
157 shopt -s nullglob
158 for i in "$d/remotes"/*; do
159 echo ${i#$d/remotes/}
160 done
161 [ "$ngoff" ] && shopt -u nullglob
162 for i in $(git --git-dir="$d" config --list); do
163 case "$i" in
164 remote.*.url=*)
165 i="${i#remote.}"
166 echo "${i/.url=*/}"
168 esac
169 done
172 __git_merge_strategies ()
174 if [ -n "$__git_merge_strategylist" ]; then
175 echo "$__git_merge_strategylist"
176 return
178 sed -n "/^all_strategies='/{
179 s/^all_strategies='//
180 s/'//
183 }" "$(git --exec-path)/git-merge"
185 __git_merge_strategylist=
186 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
188 __git_complete_file ()
190 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
191 case "$cur" in
192 ?*:*)
193 ref="${cur%%:*}"
194 cur="${cur#*:}"
195 case "$cur" in
196 ?*/*)
197 pfx="${cur%/*}"
198 cur="${cur##*/}"
199 ls="$ref:$pfx"
200 pfx="$pfx/"
203 ls="$ref"
205 esac
206 COMPREPLY=($(compgen -P "$pfx" \
207 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
208 | sed '/^100... blob /s,^.* ,,
209 /^040000 tree /{
210 s,^.* ,,
211 s,$,/,
213 s/^.* //')" \
214 -- "$cur"))
217 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
219 esac
222 __git_complete_revlist ()
224 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
225 case "$cur" in
226 *...*)
227 pfx="${cur%...*}..."
228 cur="${cur#*...}"
229 COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs)" -- "$cur"))
231 *..*)
232 pfx="${cur%..*}.."
233 cur="${cur#*..}"
234 COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs)" -- "$cur"))
237 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
239 esac
242 __git_commands ()
244 if [ -n "$__git_commandlist" ]; then
245 echo "$__git_commandlist"
246 return
248 local i IFS=" "$'\n'
249 for i in $(git help -a|egrep '^ ')
251 case $i in
252 add--interactive) : plumbing;;
253 cat-file) : plumbing;;
254 check-ref-format) : plumbing;;
255 commit-tree) : plumbing;;
256 convert-objects) : plumbing;;
257 cvsserver) : daemon;;
258 daemon) : daemon;;
259 fetch-pack) : plumbing;;
260 hash-object) : plumbing;;
261 http-*) : transport;;
262 index-pack) : plumbing;;
263 local-fetch) : plumbing;;
264 mailinfo) : plumbing;;
265 mailsplit) : plumbing;;
266 merge-*) : plumbing;;
267 mktree) : plumbing;;
268 mktag) : plumbing;;
269 pack-objects) : plumbing;;
270 pack-redundant) : plumbing;;
271 pack-refs) : plumbing;;
272 parse-remote) : plumbing;;
273 patch-id) : plumbing;;
274 peek-remote) : plumbing;;
275 read-tree) : plumbing;;
276 receive-pack) : plumbing;;
277 reflog) : plumbing;;
278 rerere) : plumbing;;
279 rev-list) : plumbing;;
280 rev-parse) : plumbing;;
281 runstatus) : plumbing;;
282 sh-setup) : internal;;
283 shell) : daemon;;
284 send-pack) : plumbing;;
285 show-index) : plumbing;;
286 ssh-*) : transport;;
287 stripspace) : plumbing;;
288 symbolic-ref) : plumbing;;
289 unpack-file) : plumbing;;
290 unpack-objects) : plumbing;;
291 update-ref) : plumbing;;
292 update-server-info) : daemon;;
293 upload-archive) : plumbing;;
294 upload-pack) : plumbing;;
295 write-tree) : plumbing;;
296 *) echo $i;;
297 esac
298 done
300 __git_commandlist=
301 __git_commandlist="$(__git_commands 2>/dev/null)"
303 __git_aliases ()
305 local i IFS=$'\n'
306 for i in $(git --git-dir="$(__gitdir)" config --list); do
307 case "$i" in
308 alias.*)
309 i="${i#alias.}"
310 echo "${i/=*/}"
312 esac
313 done
316 __git_aliased_command ()
318 local word cmdline=$(git --git-dir="$(__gitdir)" \
319 config --get "alias.$1")
320 for word in $cmdline; do
321 if [ "${word##-*}" ]; then
322 echo $word
323 return
325 done
328 __git_whitespacelist="nowarn warn error error-all strip"
330 _git_am ()
332 local cur="${COMP_WORDS[COMP_CWORD]}"
333 if [ -d .dotest ]; then
334 COMPREPLY=($(compgen -W "
335 --skip --resolved
336 " -- "$cur"))
337 return
339 case "$cur" in
340 --whitespace=*)
341 COMPREPLY=($(compgen -W "$__git_whitespacelist" \
342 -- "${cur##--whitespace=}"))
343 return
345 --*)
346 COMPREPLY=($(compgen -W "
347 --signoff --utf8 --binary --3way --interactive
348 --whitespace=
349 " -- "$cur"))
350 return
351 esac
352 COMPREPLY=()
355 _git_apply ()
357 local cur="${COMP_WORDS[COMP_CWORD]}"
358 case "$cur" in
359 --whitespace=*)
360 COMPREPLY=($(compgen -W "$__git_whitespacelist" \
361 -- "${cur##--whitespace=}"))
362 return
364 --*)
365 COMPREPLY=($(compgen -W "
366 --stat --numstat --summary --check --index
367 --cached --index-info --reverse --reject --unidiff-zero
368 --apply --no-add --exclude=
369 --whitespace= --inaccurate-eof --verbose
370 " -- "$cur"))
371 return
372 esac
373 COMPREPLY=()
376 _git_add ()
378 local cur="${COMP_WORDS[COMP_CWORD]}"
379 case "$cur" in
380 --*)
381 COMPREPLY=($(compgen -W "
382 --interactive
383 " -- "$cur"))
384 return
385 esac
386 COMPREPLY=()
389 _git_branch ()
391 local cur="${COMP_WORDS[COMP_CWORD]}"
392 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
395 _git_checkout ()
397 local cur="${COMP_WORDS[COMP_CWORD]}"
398 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
401 _git_cherry_pick ()
403 local cur="${COMP_WORDS[COMP_CWORD]}"
404 case "$cur" in
405 --*)
406 COMPREPLY=($(compgen -W "
407 --edit --no-commit
408 " -- "$cur"))
411 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
413 esac
416 _git_commit ()
418 local cur="${COMP_WORDS[COMP_CWORD]}"
419 case "$cur" in
420 --*)
421 COMPREPLY=($(compgen -W "
422 --all --author= --signoff --verify --no-verify
423 --edit --amend --include --only
424 " -- "$cur"))
425 return
426 esac
427 COMPREPLY=()
430 _git_diff ()
432 __git_complete_file
435 _git_diff_tree ()
437 local cur="${COMP_WORDS[COMP_CWORD]}"
438 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
441 _git_fetch ()
443 local cur="${COMP_WORDS[COMP_CWORD]}"
445 case "${COMP_WORDS[0]},$COMP_CWORD" in
446 git-fetch*,1)
447 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
449 git,2)
450 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
453 case "$cur" in
454 *:*)
455 cur="${cur#*:}"
456 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
459 local remote
460 case "${COMP_WORDS[0]}" in
461 git-fetch) remote="${COMP_WORDS[1]}" ;;
462 git) remote="${COMP_WORDS[2]}" ;;
463 esac
464 COMPREPLY=($(compgen -W "$(__git_refs2 "$remote")" -- "$cur"))
466 esac
468 esac
471 _git_format_patch ()
473 local cur="${COMP_WORDS[COMP_CWORD]}"
474 case "$cur" in
475 --*)
476 COMPREPLY=($(compgen -W "
477 --stdout --attach --thread
478 --output-directory
479 --numbered --start-number
480 --keep-subject
481 --signoff
482 --in-reply-to=
483 --full-index --binary
484 " -- "$cur"))
485 return
487 esac
488 __git_complete_revlist
491 _git_ls_remote ()
493 local cur="${COMP_WORDS[COMP_CWORD]}"
494 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
497 _git_ls_tree ()
499 __git_complete_file
502 _git_log ()
504 local cur="${COMP_WORDS[COMP_CWORD]}"
505 case "$cur" in
506 --pretty=*)
507 COMPREPLY=($(compgen -W "
508 oneline short medium full fuller email raw
509 " -- "${cur##--pretty=}"))
510 return
512 --*)
513 COMPREPLY=($(compgen -W "
514 --max-count= --max-age= --since= --after=
515 --min-age= --before= --until=
516 --root --not --topo-order --date-order
517 --no-merges
518 --abbrev-commit --abbrev=
519 --relative-date
520 --author= --committer= --grep=
521 --all-match
522 --pretty= --name-status --name-only
523 " -- "$cur"))
524 return
526 esac
527 __git_complete_revlist
530 _git_merge ()
532 local cur="${COMP_WORDS[COMP_CWORD]}"
533 case "${COMP_WORDS[COMP_CWORD-1]}" in
534 -s|--strategy)
535 COMPREPLY=($(compgen -W "$(__git_merge_strategies)" -- "$cur"))
536 return
537 esac
538 case "$cur" in
539 --strategy=*)
540 COMPREPLY=($(compgen -W "$(__git_merge_strategies)" \
541 -- "${cur##--strategy=}"))
542 return
544 --*)
545 COMPREPLY=($(compgen -W "
546 --no-commit --no-summary --squash --strategy
547 " -- "$cur"))
548 return
549 esac
550 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
553 _git_merge_base ()
555 local cur="${COMP_WORDS[COMP_CWORD]}"
556 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
559 _git_name_rev ()
561 local cur="${COMP_WORDS[COMP_CWORD]}"
562 COMPREPLY=($(compgen -W "--tags --all --stdin" -- "$cur"))
565 _git_pull ()
567 local cur="${COMP_WORDS[COMP_CWORD]}"
569 case "${COMP_WORDS[0]},$COMP_CWORD" in
570 git-pull*,1)
571 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
573 git,2)
574 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
577 local remote
578 case "${COMP_WORDS[0]}" in
579 git-pull) remote="${COMP_WORDS[1]}" ;;
580 git) remote="${COMP_WORDS[2]}" ;;
581 esac
582 COMPREPLY=($(compgen -W "$(__git_refs "$remote")" -- "$cur"))
584 esac
587 _git_push ()
589 local cur="${COMP_WORDS[COMP_CWORD]}"
591 case "${COMP_WORDS[0]},$COMP_CWORD" in
592 git-push*,1)
593 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
595 git,2)
596 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
599 case "$cur" in
600 *:*)
601 local remote
602 case "${COMP_WORDS[0]}" in
603 git-push) remote="${COMP_WORDS[1]}" ;;
604 git) remote="${COMP_WORDS[2]}" ;;
605 esac
606 cur="${cur#*:}"
607 COMPREPLY=($(compgen -W "$(__git_refs "$remote")" -- "$cur"))
610 COMPREPLY=($(compgen -W "$(__git_refs2)" -- "$cur"))
612 esac
614 esac
617 _git_rebase ()
619 local cur="${COMP_WORDS[COMP_CWORD]}"
620 if [ -d .dotest ]; then
621 COMPREPLY=($(compgen -W "
622 --continue --skip --abort
623 " -- "$cur"))
624 return
626 case "${COMP_WORDS[COMP_CWORD-1]}" in
627 -s|--strategy)
628 COMPREPLY=($(compgen -W "$(__git_merge_strategies)" -- "$cur"))
629 return
630 esac
631 case "$cur" in
632 --strategy=*)
633 COMPREPLY=($(compgen -W "$(__git_merge_strategies)" \
634 -- "${cur##--strategy=}"))
635 return
637 --*)
638 COMPREPLY=($(compgen -W "
639 --onto --merge --strategy
640 " -- "$cur"))
641 return
642 esac
643 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
646 _git_config ()
648 local cur="${COMP_WORDS[COMP_CWORD]}"
649 local prv="${COMP_WORDS[COMP_CWORD-1]}"
650 case "$prv" in
651 branch.*.remote)
652 COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
653 return
655 branch.*.merge)
656 COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
657 return
659 remote.*.fetch)
660 local remote="${prv#remote.}"
661 remote="${remote%.fetch}"
662 COMPREPLY=($(compgen -W "$(__git_refs_remotes "$remote")" \
663 -- "$cur"))
664 return
666 remote.*.push)
667 local remote="${prv#remote.}"
668 remote="${remote%.push}"
669 COMPREPLY=($(compgen -W "$(git --git-dir="$(__gitdir)" \
670 for-each-ref --format='%(refname):%(refname)' \
671 refs/heads)" -- "$cur"))
672 return
674 *.*)
675 COMPREPLY=()
676 return
678 esac
679 case "$cur" in
680 --*)
681 COMPREPLY=($(compgen -W "
682 --global --list --replace-all
683 --get --get-all --get-regexp
684 --unset --unset-all
685 " -- "$cur"))
686 return
688 branch.*.*)
689 local pfx="${cur%.*}."
690 cur="${cur##*.}"
691 COMPREPLY=($(compgen -P "$pfx" -W "remote merge" -- "$cur"))
692 return
694 branch.*)
695 local pfx="${cur%.*}."
696 cur="${cur#*.}"
697 COMPREPLY=($(compgen -P "$pfx" -S . \
698 -W "$(__git_heads)" -- "$cur"))
699 return
701 remote.*.*)
702 local pfx="${cur%.*}."
703 cur="${cur##*.}"
704 COMPREPLY=($(compgen -P "$pfx" -W "url fetch push" -- "$cur"))
705 return
707 remote.*)
708 local pfx="${cur%.*}."
709 cur="${cur#*.}"
710 COMPREPLY=($(compgen -P "$pfx" -S . \
711 -W "$(__git_remotes)" -- "$cur"))
712 return
714 esac
715 COMPREPLY=($(compgen -W "
716 apply.whitespace
717 core.fileMode
718 core.gitProxy
719 core.ignoreStat
720 core.preferSymlinkRefs
721 core.logAllRefUpdates
722 core.repositoryFormatVersion
723 core.sharedRepository
724 core.warnAmbiguousRefs
725 core.compression
726 core.legacyHeaders
727 i18n.commitEncoding
728 i18n.logOutputEncoding
729 diff.color
730 color.diff
731 diff.renameLimit
732 diff.renames
733 pager.color
734 color.pager
735 status.color
736 color.status
737 log.showroot
738 show.difftree
739 showbranch.default
740 whatchanged.difftree
741 http.sslVerify
742 http.sslCert
743 http.sslKey
744 http.sslCAInfo
745 http.sslCAPath
746 http.maxRequests
747 http.lowSpeedLimit http.lowSpeedTime
748 http.noEPSV
749 pack.window
750 repack.useDeltaBaseOffset
751 pull.octopus pull.twohead
752 merge.summary
753 receive.unpackLimit
754 receive.denyNonFastForwards
755 user.name user.email
756 tar.umask
757 gitcvs.enabled
758 gitcvs.logfile
759 branch. remote.
760 " -- "$cur"))
763 _git_reset ()
765 local cur="${COMP_WORDS[COMP_CWORD]}"
766 local opt="--mixed --hard --soft"
767 COMPREPLY=($(compgen -W "$opt $(__git_refs)" -- "$cur"))
770 _git_show ()
772 local cur="${COMP_WORDS[COMP_CWORD]}"
773 case "$cur" in
774 --pretty=*)
775 COMPREPLY=($(compgen -W "
776 oneline short medium full fuller email raw
777 " -- "${cur##--pretty=}"))
778 return
780 --*)
781 COMPREPLY=($(compgen -W "--pretty=" -- "$cur"))
782 return
784 esac
785 __git_complete_file
788 _git ()
790 local i c=1 command __git_dir
792 while [ $c -lt $COMP_CWORD ]; do
793 i="${COMP_WORDS[c]}"
794 case "$i" in
795 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
796 --bare) __git_dir="." ;;
797 --version|--help|-p|--paginate) ;;
798 *) command="$i"; break ;;
799 esac
800 c=$((++c))
801 done
803 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
804 case "${COMP_WORDS[COMP_CWORD]}" in
805 --*=*) COMPREPLY=() ;;
806 --*) __gitcomp "--git-dir= --bare --version --exec-path" ;;
807 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
808 esac
809 return
812 local expansion=$(__git_aliased_command "$command")
813 [ "$expansion" ] && command="$expansion"
815 case "$command" in
816 am) _git_am ;;
817 add) _git_add ;;
818 apply) _git_apply ;;
819 branch) _git_branch ;;
820 checkout) _git_checkout ;;
821 cherry-pick) _git_cherry_pick ;;
822 commit) _git_commit ;;
823 config) _git_config ;;
824 diff) _git_diff ;;
825 diff-tree) _git_diff_tree ;;
826 fetch) _git_fetch ;;
827 format-patch) _git_format_patch ;;
828 log) _git_log ;;
829 ls-remote) _git_ls_remote ;;
830 ls-tree) _git_ls_tree ;;
831 merge) _git_merge;;
832 merge-base) _git_merge_base ;;
833 name-rev) _git_name_rev ;;
834 pull) _git_pull ;;
835 push) _git_push ;;
836 rebase) _git_rebase ;;
837 repo-config) _git_config ;;
838 reset) _git_reset ;;
839 show) _git_show ;;
840 show-branch) _git_log ;;
841 whatchanged) _git_log ;;
842 *) COMPREPLY=() ;;
843 esac
846 _gitk ()
848 local cur="${COMP_WORDS[COMP_CWORD]}"
849 COMPREPLY=($(compgen -W "--all $(__git_refs)" -- "$cur"))
852 complete -o default -o nospace -F _git git
853 complete -o default -F _gitk gitk
854 complete -o default -F _git_am git-am
855 complete -o default -F _git_apply git-apply
856 complete -o default -F _git_branch git-branch
857 complete -o default -F _git_checkout git-checkout
858 complete -o default -F _git_cherry_pick git-cherry-pick
859 complete -o default -F _git_commit git-commit
860 complete -o default -o nospace -F _git_diff git-diff
861 complete -o default -F _git_diff_tree git-diff-tree
862 complete -o default -o nospace -F _git_fetch git-fetch
863 complete -o default -o nospace -F _git_format_patch git-format-patch
864 complete -o default -o nospace -F _git_log git-log
865 complete -o default -F _git_ls_remote git-ls-remote
866 complete -o default -o nospace -F _git_ls_tree git-ls-tree
867 complete -o default -F _git_merge git-merge
868 complete -o default -F _git_merge_base git-merge-base
869 complete -o default -F _git_name_rev git-name-rev
870 complete -o default -o nospace -F _git_pull git-pull
871 complete -o default -o nospace -F _git_push git-push
872 complete -o default -F _git_rebase git-rebase
873 complete -o default -F _git_config git-config
874 complete -o default -F _git_reset git-reset
875 complete -o default -o nospace -F _git_show git-show
876 complete -o default -o nospace -F _git_log git-show-branch
877 complete -o default -o nospace -F _git_log git-whatchanged
879 # The following are necessary only for Cygwin, and only are needed
880 # when the user has tab-completed the executable name and consequently
881 # included the '.exe' suffix.
883 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
884 complete -o default -F _git_add git-add.exe
885 complete -o default -F _git_apply git-apply.exe
886 complete -o default -o nospace -F _git git.exe
887 complete -o default -F _git_branch git-branch.exe
888 complete -o default -o nospace -F _git_diff git-diff.exe
889 complete -o default -o nospace -F _git_diff_tree git-diff-tree.exe
890 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
891 complete -o default -o nospace -F _git_log git-log.exe
892 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
893 complete -o default -F _git_merge_base git-merge-base.exe
894 complete -o default -F _git_name_rev git-name-rev.exe
895 complete -o default -o nospace -F _git_push git-push.exe
896 complete -o default -F _git_config git-config
897 complete -o default -o nospace -F _git_show git-show.exe
898 complete -o default -o nospace -F _git_log git-show-branch.exe
899 complete -o default -o nospace -F _git_log git-whatchanged.exe