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.
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:
51 if [ -n "$__git_dir" ]; then
53 elif [ -d .git ]; then
56 git rev-parse --git-dir 2>/dev/null
58 elif [ -d "$1/.git" ]; then
67 local g="$(git rev-parse --git-dir 2>/dev/null)"
71 if [ -d "$g/../.dotest" ]
73 if test -f "$g/../.dotest/rebasing"
76 elif test -f "$g/../.dotest/applying"
82 b="$(git symbolic-ref HEAD 2>/dev/null)"
83 elif [ -f "$g/.dotest-merge/interactive" ]
86 b="$(cat "$g/.dotest-merge/head-name")"
87 elif [ -d "$g/.dotest-merge" ]
90 b="$(cat "$g/.dotest-merge/head-name")"
91 elif [ -f "$g/MERGE_HEAD" ]
94 b="$(git symbolic-ref HEAD 2>/dev/null)"
96 if [ -f "$g/BISECT_LOG" ]
100 if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
102 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
104 b="$(cut -c1-7 "$g/HEAD")..."
110 printf "$1" "${b##refs/heads/}$r"
112 printf " (%s)" "${b##refs/heads/}$r"
119 local all c s=$'\n' IFS=' '$'\t'$'\n'
120 local cur="${COMP_WORDS[COMP_CWORD]}"
121 if [ $# -gt 2 ]; then
132 --*=*) all="$all$c$4$s" ;;
133 *.) all="$all$c$4$s" ;;
134 *) all="$all$c$4 $s" ;;
140 COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
146 local cmd i is_hash=y dir="$(__gitdir "$1")"
147 if [ -d "$dir" ]; then
148 for i in $(git --git-dir="$dir" \
149 for-each-ref --format='%(refname)' \
151 echo "${i#refs/heads/}"
155 for i in $(git ls-remote "$1" 2>/dev/null); do
156 case "$is_hash,$i" in
159 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
160 n,*) is_hash=y; echo "$i" ;;
167 local cmd i is_hash=y dir="$(__gitdir "$1")"
168 if [ -d "$dir" ]; then
169 for i in $(git --git-dir="$dir" \
170 for-each-ref --format='%(refname)' \
172 echo "${i#refs/tags/}"
176 for i in $(git ls-remote "$1" 2>/dev/null); do
177 case "$is_hash,$i" in
180 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
181 n,*) is_hash=y; echo "$i" ;;
188 local cmd i is_hash=y dir="$(__gitdir "$1")"
189 if [ -d "$dir" ]; then
190 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
191 for i in $(git --git-dir="$dir" \
192 for-each-ref --format='%(refname)' \
193 refs/tags refs/heads refs/remotes); do
195 refs/tags/*) echo "${i#refs/tags/}" ;;
196 refs/heads/*) echo "${i#refs/heads/}" ;;
197 refs/remotes/*) echo "${i#refs/remotes/}" ;;
203 for i in $(git ls-remote "$dir" 2>/dev/null); do
204 case "$is_hash,$i" in
207 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
208 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
209 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
210 n,*) is_hash=y; echo "$i" ;;
218 for i in $(__git_refs "$1"); do
223 __git_refs_remotes ()
225 local cmd i is_hash=y
226 for i in $(git ls-remote "$1" 2>/dev/null); do
227 case "$is_hash,$i" in
230 echo "$i:refs/remotes/$1/${i#refs/heads/}"
234 n,refs/tags/*) is_hash=y;;
242 local i ngoff IFS=$'\n' d="$(__gitdir)"
243 shopt -q nullglob || ngoff=1
245 for i in "$d/remotes"/*; do
246 echo ${i#$d/remotes/}
248 [ "$ngoff" ] && shopt -u nullglob
249 for i in $(git --git-dir="$d" config --list); do
259 __git_merge_strategies ()
261 if [ -n "$__git_merge_strategylist" ]; then
262 echo "$__git_merge_strategylist"
265 sed -n "/^all_strategies='/{
266 s/^all_strategies='//
270 }" "$(git --exec-path)/git-merge"
272 __git_merge_strategylist=
273 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
275 __git_complete_file ()
277 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
293 COMPREPLY=($(compgen -P "$pfx" \
294 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
295 | sed '/^100... blob /s,^.* ,,
304 __gitcomp "$(__git_refs)"
309 __git_complete_revlist ()
311 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
316 __gitcomp "$(__git_refs)" "$pfx" "$cur"
321 __gitcomp "$(__git_refs)" "$pfx" "$cur"
327 __gitcomp "$(__git_refs)"
334 if [ -n "$__git_commandlist" ]; then
335 echo "$__git_commandlist"
339 for i in $(git help -a|egrep '^ ')
342 *--*) : helper pattern;;
343 applymbox) : ask gittus;;
344 applypatch) : ask gittus;;
345 archimport) : import;;
346 cat-file) : plumbing;;
347 check-attr) : plumbing;;
348 check-ref-format) : plumbing;;
349 commit-tree) : plumbing;;
350 cvsexportcommit) : export;;
351 cvsimport) : import;;
352 cvsserver) : daemon;;
354 diff-files) : plumbing;;
355 diff-index) : plumbing;;
356 diff-tree) : plumbing;;
357 fast-import) : import;;
358 fsck-objects) : plumbing;;
359 fetch-pack) : plumbing;;
360 fmt-merge-msg) : plumbing;;
361 for-each-ref) : plumbing;;
362 hash-object) : plumbing;;
363 http-*) : transport;;
364 index-pack) : plumbing;;
365 init-db) : deprecated;;
366 local-fetch) : plumbing;;
367 mailinfo) : plumbing;;
368 mailsplit) : plumbing;;
369 merge-*) : plumbing;;
372 pack-objects) : plumbing;;
373 pack-redundant) : plumbing;;
374 pack-refs) : plumbing;;
375 parse-remote) : plumbing;;
376 patch-id) : plumbing;;
377 peek-remote) : plumbing;;
379 prune-packed) : plumbing;;
380 quiltimport) : import;;
381 read-tree) : plumbing;;
382 receive-pack) : plumbing;;
384 repo-config) : deprecated;;
386 rev-list) : plumbing;;
387 rev-parse) : plumbing;;
388 runstatus) : plumbing;;
389 sh-setup) : internal;;
391 send-pack) : plumbing;;
392 show-index) : plumbing;;
394 stripspace) : plumbing;;
395 symbolic-ref) : plumbing;;
396 tar-tree) : deprecated;;
397 unpack-file) : plumbing;;
398 unpack-objects) : plumbing;;
399 update-index) : plumbing;;
400 update-ref) : plumbing;;
401 update-server-info) : daemon;;
402 upload-archive) : plumbing;;
403 upload-pack) : plumbing;;
404 write-tree) : plumbing;;
405 verify-tag) : plumbing;;
411 __git_commandlist="$(__git_commands 2>/dev/null)"
416 for i in $(git --git-dir="$(__gitdir)" config --list); do
426 __git_aliased_command ()
428 local word cmdline=$(git --git-dir="$(__gitdir)" \
429 config --get "alias.$1")
430 for word in $cmdline; do
431 if [ "${word##-*}" ]; then
438 __git_find_subcommand ()
440 local word subcommand c=1
442 while [ $c -lt $COMP_CWORD ]; do
443 word="${COMP_WORDS[c]}"
444 for subcommand in $1; do
445 if [ "$subcommand" = "$word" ]; then
454 __git_whitespacelist="nowarn warn error error-all strip"
458 local cur="${COMP_WORDS[COMP_CWORD]}"
459 if [ -d .dotest ]; then
460 __gitcomp "--skip --resolved"
465 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
470 --signoff --utf8 --binary --3way --interactive
480 local cur="${COMP_WORDS[COMP_CWORD]}"
483 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
488 --stat --numstat --summary --check --index
489 --cached --index-info --reverse --reject --unidiff-zero
490 --apply --no-add --exclude=
491 --whitespace= --inaccurate-eof --verbose
500 local cur="${COMP_WORDS[COMP_CWORD]}"
504 --interactive --refresh --patch --update --dry-run
514 local subcommands="start bad good reset visualize replay log"
515 local subcommand="$(__git_find_subcommand "$subcommands")"
516 if [ -z "$subcommand" ]; then
517 __gitcomp "$subcommands"
521 case "$subcommand" in
523 __gitcomp "$(__git_refs)"
533 local i c=1 only_local_ref="n" has_r="n"
535 while [ $c -lt $COMP_CWORD ]; do
538 -d|-m) only_local_ref="y" ;;
544 case "${COMP_WORDS[COMP_CWORD]}" in
545 --*=*) COMPREPLY=() ;;
548 --color --no-color --verbose --abbrev= --no-abbrev
553 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
554 __gitcomp "$(__git_heads)"
556 __gitcomp "$(__git_refs)"
564 local mycword="$COMP_CWORD"
565 case "${COMP_WORDS[0]}" in
567 local cmd="${COMP_WORDS[2]}"
568 mycword="$((mycword-1))"
571 local cmd="${COMP_WORDS[1]}"
576 __gitcomp "create list-heads verify unbundle"
584 __git_complete_revlist
593 __gitcomp "$(__git_refs)"
598 __gitcomp "$(__git_refs)"
603 local cur="${COMP_WORDS[COMP_CWORD]}"
606 __gitcomp "--edit --no-commit"
609 __gitcomp "$(__git_refs)"
616 local cur="${COMP_WORDS[COMP_CWORD]}"
620 --all --author= --signoff --verify --no-verify
621 --edit --amend --include --only
630 __gitcomp "$(__git_refs)"
635 local cur="${COMP_WORDS[COMP_CWORD]}"
638 __gitcomp "--cached --stat --numstat --shortstat --summary
639 --patch-with-stat --name-only --name-status --color
640 --no-color --color-words --no-renames --check
641 --full-index --binary --abbrev --diff-filter
642 --find-copies-harder --pickaxe-all --pickaxe-regex
643 --text --ignore-space-at-eol --ignore-space-change
644 --ignore-all-space --exit-code --quiet --ext-diff
646 --no-prefix --src-prefix= --dst-prefix=
647 --base --ours --theirs
657 __gitcomp "$(__git_refs)"
662 local cur="${COMP_WORDS[COMP_CWORD]}"
664 case "${COMP_WORDS[0]},$COMP_CWORD" in
666 __gitcomp "$(__git_remotes)"
669 __gitcomp "$(__git_remotes)"
674 __gitcomp "$(__git_refs)" "" "${cur#*:}"
678 case "${COMP_WORDS[0]}" in
679 git-fetch) remote="${COMP_WORDS[1]}" ;;
680 git) remote="${COMP_WORDS[2]}" ;;
682 __gitcomp "$(__git_refs2 "$remote")"
691 local cur="${COMP_WORDS[COMP_CWORD]}"
695 --stdout --attach --thread
697 --numbered --start-number
702 --full-index --binary
705 --no-prefix --src-prefix= --dst-prefix=
710 __git_complete_revlist
715 local cur="${COMP_WORDS[COMP_CWORD]}"
718 __gitcomp "--prune --aggressive"
727 __gitcomp "$(__git_remotes)"
737 local cur="${COMP_WORDS[COMP_CWORD]}"
741 oneline short medium full fuller email raw
742 " "" "${cur##--pretty=}"
747 relative iso8601 rfc2822 short local default
748 " "" "${cur##--date=}"
753 --max-count= --max-age= --since= --after=
754 --min-age= --before= --until=
755 --root --topo-order --date-order --reverse
757 --abbrev-commit --abbrev=
758 --relative-date --date=
759 --author= --committer= --grep=
761 --pretty= --name-status --name-only --raw
763 --left-right --cherry-pick
765 --stat --numstat --shortstat
766 --decorate --diff-filter=
767 --color-words --walk-reflogs
772 __git_complete_revlist
777 local cur="${COMP_WORDS[COMP_CWORD]}"
778 case "${COMP_WORDS[COMP_CWORD-1]}" in
780 __gitcomp "$(__git_merge_strategies)"
785 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
790 --no-commit --no-stat --log --no-log --squash --strategy
794 __gitcomp "$(__git_refs)"
799 __gitcomp "$(__git_refs)"
804 __gitcomp "--tags --all --stdin"
809 local cur="${COMP_WORDS[COMP_CWORD]}"
811 case "${COMP_WORDS[0]},$COMP_CWORD" in
813 __gitcomp "$(__git_remotes)"
816 __gitcomp "$(__git_remotes)"
820 case "${COMP_WORDS[0]}" in
821 git-pull) remote="${COMP_WORDS[1]}" ;;
822 git) remote="${COMP_WORDS[2]}" ;;
824 __gitcomp "$(__git_refs "$remote")"
831 local cur="${COMP_WORDS[COMP_CWORD]}"
833 case "${COMP_WORDS[0]},$COMP_CWORD" in
835 __gitcomp "$(__git_remotes)"
838 __gitcomp "$(__git_remotes)"
844 case "${COMP_WORDS[0]}" in
845 git-push) remote="${COMP_WORDS[1]}" ;;
846 git) remote="${COMP_WORDS[2]}" ;;
848 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
851 __gitcomp "$(__git_refs)" + "${cur#+}"
854 __gitcomp "$(__git_refs)"
863 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
864 if [ -d .dotest ] || [ -d "$dir"/.dotest-merge ]; then
865 __gitcomp "--continue --skip --abort"
868 case "${COMP_WORDS[COMP_CWORD-1]}" in
870 __gitcomp "$(__git_merge_strategies)"
875 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
879 __gitcomp "--onto --merge --strategy --interactive"
882 __gitcomp "$(__git_refs)"
887 local cur="${COMP_WORDS[COMP_CWORD]}"
888 local prv="${COMP_WORDS[COMP_CWORD-1]}"
891 __gitcomp "$(__git_remotes)"
895 __gitcomp "$(__git_refs)"
899 local remote="${prv#remote.}"
900 remote="${remote%.fetch}"
901 __gitcomp "$(__git_refs_remotes "$remote")"
905 local remote="${prv#remote.}"
906 remote="${remote%.push}"
907 __gitcomp "$(git --git-dir="$(__gitdir)" \
908 for-each-ref --format='%(refname):%(refname)' \
912 pull.twohead|pull.octopus)
913 __gitcomp "$(__git_merge_strategies)"
916 color.branch|color.diff|color.status)
917 __gitcomp "always never auto"
922 black red green yellow blue magenta cyan white
923 bold dim ul blink reverse
935 --global --system --file=
937 --get --get-all --get-regexp
938 --add --unset --unset-all
939 --remove-section --rename-section
944 local pfx="${cur%.*}."
946 __gitcomp "remote merge" "$pfx" "$cur"
950 local pfx="${cur%.*}."
952 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
956 local pfx="${cur%.*}."
959 url fetch push skipDefaultUpdate
960 receivepack uploadpack tagopt
965 local pfx="${cur%.*}."
967 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
976 core.preferSymlinkRefs
977 core.logAllRefUpdates
978 core.loosecompression
979 core.repositoryFormatVersion
980 core.sharedRepository
981 core.warnAmbiguousRefs
983 core.packedGitWindowSize
998 color.diff.whitespace
1003 color.status.changed
1004 color.status.untracked
1009 format.subjectprefix
1013 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1014 gitcvs.dbtablenameprefix
1017 gc.reflogexpireunreachable
1030 i18n.logOutputEncoding
1040 pack.deltaCacheLimit
1043 repack.useDeltaBaseOffset
1047 transfer.unpackLimit
1049 receive.denyNonFastForwards
1053 whatchanged.difftree
1060 local subcommands="add rm show prune update"
1061 local subcommand="$(__git_find_subcommand "$subcommands")"
1062 if [ -z "$subcommand" ]; then
1063 __gitcomp "$subcommands"
1067 case "$subcommand" in
1069 __gitcomp "$(__git_remotes)"
1072 local i c='' IFS=$'\n'
1073 for i in $(git --git-dir="$(__gitdir)" config --list); do
1091 local cur="${COMP_WORDS[COMP_CWORD]}"
1094 __gitcomp "--mixed --hard --soft"
1098 __gitcomp "$(__git_refs)"
1103 local cur="${COMP_WORDS[COMP_CWORD]}"
1107 --max-count= --max-age= --since= --after=
1108 --min-age= --before= --until=
1110 --author= --committer= --grep=
1113 --numbered --summary
1118 __git_complete_revlist
1123 local cur="${COMP_WORDS[COMP_CWORD]}"
1127 oneline short medium full fuller email raw
1128 " "" "${cur##--pretty=}"
1132 __gitcomp "--pretty="
1141 local subcommands='save list show apply clear drop pop create'
1142 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1143 __gitcomp "$subcommands"
1149 local subcommands="add status init update"
1150 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1151 local cur="${COMP_WORDS[COMP_CWORD]}"
1154 __gitcomp "--quiet --cached"
1157 __gitcomp "$subcommands"
1167 init fetch clone rebase dcommit log find-rev
1168 set-tree commit-diff info create-ignore propget
1169 proplist show-ignore show-externals
1171 local subcommand="$(__git_find_subcommand "$subcommands")"
1172 if [ -z "$subcommand" ]; then
1173 __gitcomp "$subcommands"
1175 local remote_opts="--username= --config-dir= --no-auth-cache"
1177 --follow-parent --authors-file= --repack=
1178 --no-metadata --use-svm-props --use-svnsync-props
1179 --log-window-size= --no-checkout --quiet
1180 --repack-flags --user-log-author $remote_opts
1183 --template= --shared= --trunk= --tags=
1184 --branches= --stdlayout --minimize-url
1185 --no-metadata --use-svm-props --use-svnsync-props
1186 --rewrite-root= $remote_opts
1189 --edit --rmdir --find-copies-harder --copy-similarity=
1192 local cur="${COMP_WORDS[COMP_CWORD]}"
1193 case "$subcommand,$cur" in
1195 __gitcomp "--revision= --fetch-all $fc_opts"
1198 __gitcomp "--revision= $fc_opts $init_opts"
1201 __gitcomp "$init_opts"
1205 --merge --strategy= --verbose --dry-run
1206 --fetch-all --no-rebase $cmt_opts $fc_opts
1210 __gitcomp "--stdin $cmt_opts $fc_opts"
1212 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1214 __gitcomp "--revision="
1218 --limit= --revision= --verbose --incremental
1219 --oneline --show-commit --non-recursive
1225 --merge --verbose --strategy= --local
1226 --fetch-all $fc_opts
1230 __gitcomp "--message= --file= --revision= $cmt_opts"
1245 while [ $c -lt $COMP_CWORD ]; do
1246 i="${COMP_WORDS[c]}"
1249 __gitcomp "$(__git_tags)"
1259 case "${COMP_WORDS[COMP_CWORD-1]}" in
1265 __gitcomp "$(__git_tags)"
1271 __gitcomp "$(__git_refs)"
1278 local i c=1 command __git_dir
1280 while [ $c -lt $COMP_CWORD ]; do
1281 i="${COMP_WORDS[c]}"
1283 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1284 --bare) __git_dir="." ;;
1285 --version|--help|-p|--paginate) ;;
1286 *) command="$i"; break ;;
1291 if [ -z "$command" ]; then
1292 case "${COMP_WORDS[COMP_CWORD]}" in
1293 --*=*) COMPREPLY=() ;;
1305 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1310 local expansion=$(__git_aliased_command "$command")
1311 [ "$expansion" ] && command="$expansion"
1316 apply) _git_apply ;;
1317 bisect) _git_bisect ;;
1318 bundle) _git_bundle ;;
1319 branch) _git_branch ;;
1320 checkout) _git_checkout ;;
1321 cherry) _git_cherry ;;
1322 cherry-pick) _git_cherry_pick ;;
1323 commit) _git_commit ;;
1324 config) _git_config ;;
1325 describe) _git_describe ;;
1327 fetch) _git_fetch ;;
1328 format-patch) _git_format_patch ;;
1331 ls-remote) _git_ls_remote ;;
1332 ls-tree) _git_ls_tree ;;
1334 merge-base) _git_merge_base ;;
1335 name-rev) _git_name_rev ;;
1338 rebase) _git_rebase ;;
1339 remote) _git_remote ;;
1340 reset) _git_reset ;;
1341 shortlog) _git_shortlog ;;
1343 show-branch) _git_log ;;
1344 stash) _git_stash ;;
1345 submodule) _git_submodule ;;
1348 whatchanged) _git_log ;;
1355 local cur="${COMP_WORDS[COMP_CWORD]}"
1356 local g="$(git rev-parse --git-dir 2>/dev/null)"
1358 if [ -f $g/MERGE_HEAD ]; then
1363 __gitcomp "--not --all $merge"
1367 __git_complete_revlist
1370 complete -o default -o nospace -F _git git
1371 complete -o default -o nospace -F _gitk gitk
1372 complete -o default -o nospace -F _git_am git-am
1373 complete -o default -o nospace -F _git_apply git-apply
1374 complete -o default -o nospace -F _git_bisect git-bisect
1375 complete -o default -o nospace -F _git_branch git-branch
1376 complete -o default -o nospace -F _git_bundle git-bundle
1377 complete -o default -o nospace -F _git_checkout git-checkout
1378 complete -o default -o nospace -F _git_cherry git-cherry
1379 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1380 complete -o default -o nospace -F _git_commit git-commit
1381 complete -o default -o nospace -F _git_describe git-describe
1382 complete -o default -o nospace -F _git_diff git-diff
1383 complete -o default -o nospace -F _git_fetch git-fetch
1384 complete -o default -o nospace -F _git_format_patch git-format-patch
1385 complete -o default -o nospace -F _git_gc git-gc
1386 complete -o default -o nospace -F _git_log git-log
1387 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1388 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1389 complete -o default -o nospace -F _git_merge git-merge
1390 complete -o default -o nospace -F _git_merge_base git-merge-base
1391 complete -o default -o nospace -F _git_name_rev git-name-rev
1392 complete -o default -o nospace -F _git_pull git-pull
1393 complete -o default -o nospace -F _git_push git-push
1394 complete -o default -o nospace -F _git_rebase git-rebase
1395 complete -o default -o nospace -F _git_config git-config
1396 complete -o default -o nospace -F _git_remote git-remote
1397 complete -o default -o nospace -F _git_reset git-reset
1398 complete -o default -o nospace -F _git_shortlog git-shortlog
1399 complete -o default -o nospace -F _git_show git-show
1400 complete -o default -o nospace -F _git_stash git-stash
1401 complete -o default -o nospace -F _git_submodule git-submodule
1402 complete -o default -o nospace -F _git_svn git-svn
1403 complete -o default -o nospace -F _git_log git-show-branch
1404 complete -o default -o nospace -F _git_tag git-tag
1405 complete -o default -o nospace -F _git_log git-whatchanged
1407 # The following are necessary only for Cygwin, and only are needed
1408 # when the user has tab-completed the executable name and consequently
1409 # included the '.exe' suffix.
1411 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1412 complete -o default -o nospace -F _git_add git-add.exe
1413 complete -o default -o nospace -F _git_apply git-apply.exe
1414 complete -o default -o nospace -F _git git.exe
1415 complete -o default -o nospace -F _git_branch git-branch.exe
1416 complete -o default -o nospace -F _git_bundle git-bundle.exe
1417 complete -o default -o nospace -F _git_cherry git-cherry.exe
1418 complete -o default -o nospace -F _git_describe git-describe.exe
1419 complete -o default -o nospace -F _git_diff git-diff.exe
1420 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1421 complete -o default -o nospace -F _git_log git-log.exe
1422 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1423 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1424 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1425 complete -o default -o nospace -F _git_push git-push.exe
1426 complete -o default -o nospace -F _git_config git-config
1427 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1428 complete -o default -o nospace -F _git_show git-show.exe
1429 complete -o default -o nospace -F _git_log git-show-branch.exe
1430 complete -o default -o nospace -F _git_tag git-tag.exe
1431 complete -o default -o nospace -F _git_log git-whatchanged.exe