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
1046 transfer.unpackLimit
1048 receive.denyNonFastForwards
1058 local subcommands="add rm show prune update"
1059 local subcommand="$(__git_find_subcommand "$subcommands")"
1060 if [ -z "$subcommand" ]; then
1061 __gitcomp "$subcommands"
1065 case "$subcommand" in
1067 __gitcomp "$(__git_remotes)"
1070 local i c='' IFS=$'\n'
1071 for i in $(git --git-dir="$(__gitdir)" config --list); do
1089 local cur="${COMP_WORDS[COMP_CWORD]}"
1092 __gitcomp "--mixed --hard --soft"
1096 __gitcomp "$(__git_refs)"
1101 local cur="${COMP_WORDS[COMP_CWORD]}"
1105 --max-count= --max-age= --since= --after=
1106 --min-age= --before= --until=
1108 --author= --committer= --grep=
1111 --numbered --summary
1116 __git_complete_revlist
1121 local cur="${COMP_WORDS[COMP_CWORD]}"
1125 oneline short medium full fuller email raw
1126 " "" "${cur##--pretty=}"
1130 __gitcomp "--pretty="
1139 local subcommands='save list show apply clear drop pop create'
1140 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1141 __gitcomp "$subcommands"
1147 local subcommands="add status init update"
1148 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1149 local cur="${COMP_WORDS[COMP_CWORD]}"
1152 __gitcomp "--quiet --cached"
1155 __gitcomp "$subcommands"
1165 init fetch clone rebase dcommit log find-rev
1166 set-tree commit-diff info create-ignore propget
1167 proplist show-ignore show-externals
1169 local subcommand="$(__git_find_subcommand "$subcommands")"
1170 if [ -z "$subcommand" ]; then
1171 __gitcomp "$subcommands"
1173 local remote_opts="--username= --config-dir= --no-auth-cache"
1175 --follow-parent --authors-file= --repack=
1176 --no-metadata --use-svm-props --use-svnsync-props
1177 --log-window-size= --no-checkout --quiet
1178 --repack-flags --user-log-author $remote_opts
1181 --template= --shared= --trunk= --tags=
1182 --branches= --stdlayout --minimize-url
1183 --no-metadata --use-svm-props --use-svnsync-props
1184 --rewrite-root= $remote_opts
1187 --edit --rmdir --find-copies-harder --copy-similarity=
1190 local cur="${COMP_WORDS[COMP_CWORD]}"
1191 case "$subcommand,$cur" in
1193 __gitcomp "--revision= --fetch-all $fc_opts"
1196 __gitcomp "--revision= $fc_opts $init_opts"
1199 __gitcomp "$init_opts"
1203 --merge --strategy= --verbose --dry-run
1204 --fetch-all --no-rebase $cmt_opts $fc_opts
1208 __gitcomp "--stdin $cmt_opts $fc_opts"
1210 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1212 __gitcomp "--revision="
1216 --limit= --revision= --verbose --incremental
1217 --oneline --show-commit --non-recursive
1223 --merge --verbose --strategy= --local
1224 --fetch-all $fc_opts
1228 __gitcomp "--message= --file= --revision= $cmt_opts"
1243 while [ $c -lt $COMP_CWORD ]; do
1244 i="${COMP_WORDS[c]}"
1247 __gitcomp "$(__git_tags)"
1257 case "${COMP_WORDS[COMP_CWORD-1]}" in
1263 __gitcomp "$(__git_tags)"
1269 __gitcomp "$(__git_refs)"
1276 local i c=1 command __git_dir
1278 while [ $c -lt $COMP_CWORD ]; do
1279 i="${COMP_WORDS[c]}"
1281 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1282 --bare) __git_dir="." ;;
1283 --version|--help|-p|--paginate) ;;
1284 *) command="$i"; break ;;
1289 if [ -z "$command" ]; then
1290 case "${COMP_WORDS[COMP_CWORD]}" in
1291 --*=*) COMPREPLY=() ;;
1303 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1308 local expansion=$(__git_aliased_command "$command")
1309 [ "$expansion" ] && command="$expansion"
1314 apply) _git_apply ;;
1315 bisect) _git_bisect ;;
1316 bundle) _git_bundle ;;
1317 branch) _git_branch ;;
1318 checkout) _git_checkout ;;
1319 cherry) _git_cherry ;;
1320 cherry-pick) _git_cherry_pick ;;
1321 commit) _git_commit ;;
1322 config) _git_config ;;
1323 describe) _git_describe ;;
1325 fetch) _git_fetch ;;
1326 format-patch) _git_format_patch ;;
1329 ls-remote) _git_ls_remote ;;
1330 ls-tree) _git_ls_tree ;;
1332 merge-base) _git_merge_base ;;
1333 name-rev) _git_name_rev ;;
1336 rebase) _git_rebase ;;
1337 remote) _git_remote ;;
1338 reset) _git_reset ;;
1339 shortlog) _git_shortlog ;;
1341 show-branch) _git_log ;;
1342 stash) _git_stash ;;
1343 submodule) _git_submodule ;;
1346 whatchanged) _git_log ;;
1353 local cur="${COMP_WORDS[COMP_CWORD]}"
1354 local g="$(git rev-parse --git-dir 2>/dev/null)"
1356 if [ -f $g/MERGE_HEAD ]; then
1361 __gitcomp "--not --all $merge"
1365 __git_complete_revlist
1368 complete -o default -o nospace -F _git git
1369 complete -o default -o nospace -F _gitk gitk
1370 complete -o default -o nospace -F _git_am git-am
1371 complete -o default -o nospace -F _git_apply git-apply
1372 complete -o default -o nospace -F _git_bisect git-bisect
1373 complete -o default -o nospace -F _git_branch git-branch
1374 complete -o default -o nospace -F _git_bundle git-bundle
1375 complete -o default -o nospace -F _git_checkout git-checkout
1376 complete -o default -o nospace -F _git_cherry git-cherry
1377 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1378 complete -o default -o nospace -F _git_commit git-commit
1379 complete -o default -o nospace -F _git_describe git-describe
1380 complete -o default -o nospace -F _git_diff git-diff
1381 complete -o default -o nospace -F _git_fetch git-fetch
1382 complete -o default -o nospace -F _git_format_patch git-format-patch
1383 complete -o default -o nospace -F _git_gc git-gc
1384 complete -o default -o nospace -F _git_log git-log
1385 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1386 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1387 complete -o default -o nospace -F _git_merge git-merge
1388 complete -o default -o nospace -F _git_merge_base git-merge-base
1389 complete -o default -o nospace -F _git_name_rev git-name-rev
1390 complete -o default -o nospace -F _git_pull git-pull
1391 complete -o default -o nospace -F _git_push git-push
1392 complete -o default -o nospace -F _git_rebase git-rebase
1393 complete -o default -o nospace -F _git_config git-config
1394 complete -o default -o nospace -F _git_remote git-remote
1395 complete -o default -o nospace -F _git_reset git-reset
1396 complete -o default -o nospace -F _git_shortlog git-shortlog
1397 complete -o default -o nospace -F _git_show git-show
1398 complete -o default -o nospace -F _git_stash git-stash
1399 complete -o default -o nospace -F _git_submodule git-submodule
1400 complete -o default -o nospace -F _git_svn git-svn
1401 complete -o default -o nospace -F _git_log git-show-branch
1402 complete -o default -o nospace -F _git_tag git-tag
1403 complete -o default -o nospace -F _git_log git-whatchanged
1405 # The following are necessary only for Cygwin, and only are needed
1406 # when the user has tab-completed the executable name and consequently
1407 # included the '.exe' suffix.
1409 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1410 complete -o default -o nospace -F _git_add git-add.exe
1411 complete -o default -o nospace -F _git_apply git-apply.exe
1412 complete -o default -o nospace -F _git git.exe
1413 complete -o default -o nospace -F _git_branch git-branch.exe
1414 complete -o default -o nospace -F _git_bundle git-bundle.exe
1415 complete -o default -o nospace -F _git_cherry git-cherry.exe
1416 complete -o default -o nospace -F _git_describe git-describe.exe
1417 complete -o default -o nospace -F _git_diff git-diff.exe
1418 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1419 complete -o default -o nospace -F _git_log git-log.exe
1420 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1421 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1422 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1423 complete -o default -o nospace -F _git_push git-push.exe
1424 complete -o default -o nospace -F _git_config git-config
1425 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1426 complete -o default -o nospace -F _git_show git-show.exe
1427 complete -o default -o nospace -F _git_log git-show-branch.exe
1428 complete -o default -o nospace -F _git_tag git-tag.exe
1429 complete -o default -o nospace -F _git_log git-whatchanged.exe