]> git.ipfire.org Git - thirdparty/git.git/blame - contrib/completion/git-completion.bash
bash completion: Don't offer "a.." as a completion for "a."
[thirdparty/git.git] / contrib / completion / git-completion.bash
CommitLineData
690d8824
JH
1#
2# bash completion support for core Git.
3#
c70680ce 4# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
690d8824 5# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
c70680ce 6# Distributed under the GNU General Public License, version 2.0.
690d8824
JH
7#
8# The contained completion routines provide support for completing:
9#
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
c70680ce 15# *) common --long-options
690d8824
JH
16#
17# To use these routines:
18#
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
22#
b51ec6bd
SP
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.
28#
29# 4) Consider changing your PS1 to also show the current branch:
d3d717a4
SP
30# PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
31#
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.
35#
c70680ce
SP
36# To submit patches:
37#
38# *) Read Documentation/SubmittingPatches
39# *) Send all patches to the current maintainer:
40#
41# "Shawn O. Pearce" <spearce@spearce.org>
42#
43# *) Always CC the Git mailing list:
44#
45# git@vger.kernel.org
46#
690d8824 47
873537fa
SP
48__gitdir ()
49{
67ffa114
SP
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
57 fi
58 elif [ -d "$1/.git" ]; then
59 echo "$1/.git"
60 else
61 echo "$1"
62 fi
873537fa
SP
63}
64
d3d717a4
SP
65__git_ps1 ()
66{
e7520196
RR
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
3041c324
JH
73 if test -f "$g/../.dotest/rebasing"
74 then
75 r="|REBASE"
76 elif test -f "$g/../.dotest/applying"
77 then
78 r="|AM"
79 else
80 r="|AM/REBASE"
81 fi
e7520196
RR
82 b="$(git symbolic-ref HEAD 2>/dev/null)"
83 elif [ -f "$g/.dotest-merge/interactive" ]
84 then
85 r="|REBASE-i"
a5c4f85b 86 b="$(cat "$g/.dotest-merge/head-name")"
e7520196
RR
87 elif [ -d "$g/.dotest-merge" ]
88 then
89 r="|REBASE-m"
a5c4f85b 90 b="$(cat "$g/.dotest-merge/head-name")"
e7520196
RR
91 elif [ -f "$g/MERGE_HEAD" ]
92 then
93 r="|MERGING"
94 b="$(git symbolic-ref HEAD 2>/dev/null)"
95 else
a5c4f85b 96 if [ -f "$g/BISECT_LOG" ]
e7520196
RR
97 then
98 r="|BISECTING"
99 fi
100 if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
101 then
27c57888
SP
102 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
103 then
a5c4f85b 104 b="$(cut -c1-7 "$g/HEAD")..."
27c57888 105 fi
e7520196
RR
106 fi
107 fi
108
d3d717a4 109 if [ -n "$1" ]; then
e7520196 110 printf "$1" "${b##refs/heads/}$r"
d3d717a4 111 else
e7520196 112 printf " (%s)" "${b##refs/heads/}$r"
d3d717a4
SP
113 fi
114 fi
115}
116
ab02dfe5
SP
117__gitcomp_1 ()
118{
119 local c IFS=' '$'\t'$'\n'
120 for c in $1; do
121 case "$c$2" in
122 --*=*) printf %s$'\n' "$c$2" ;;
123 *.) printf %s$'\n' "$c$2" ;;
124 *) printf %s$'\n' "$c$2 " ;;
125 esac
126 done
127}
128
72e5e989
SP
129__gitcomp ()
130{
78d4d6a2 131 local cur="${COMP_WORDS[COMP_CWORD]}"
b3391775 132 if [ $# -gt 2 ]; then
78d4d6a2
SP
133 cur="$3"
134 fi
5447aac7
SG
135 case "$cur" in
136 --*=)
137 COMPREPLY=()
5447aac7
SG
138 ;;
139 *)
ab02dfe5
SP
140 local IFS=$'\n'
141 COMPREPLY=($(compgen -P "$2" \
142 -W "$(__gitcomp_1 "$1" "$4")" \
143 -- "$cur"))
5447aac7
SG
144 ;;
145 esac
72e5e989
SP
146}
147
5de40f59
SP
148__git_heads ()
149{
67ffa114 150 local cmd i is_hash=y dir="$(__gitdir "$1")"
5de40f59
SP
151 if [ -d "$dir" ]; then
152 for i in $(git --git-dir="$dir" \
153 for-each-ref --format='%(refname)' \
154 refs/heads ); do
155 echo "${i#refs/heads/}"
156 done
157 return
158 fi
799596a5 159 for i in $(git ls-remote "$1" 2>/dev/null); do
5de40f59
SP
160 case "$is_hash,$i" in
161 y,*) is_hash=n ;;
162 n,*^{}) is_hash=y ;;
163 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
164 n,*) is_hash=y; echo "$i" ;;
165 esac
166 done
167}
168
88e21dc7
SP
169__git_tags ()
170{
171 local cmd i is_hash=y dir="$(__gitdir "$1")"
172 if [ -d "$dir" ]; then
173 for i in $(git --git-dir="$dir" \
174 for-each-ref --format='%(refname)' \
175 refs/tags ); do
176 echo "${i#refs/tags/}"
177 done
178 return
179 fi
799596a5 180 for i in $(git ls-remote "$1" 2>/dev/null); do
88e21dc7
SP
181 case "$is_hash,$i" in
182 y,*) is_hash=n ;;
183 n,*^{}) is_hash=y ;;
184 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
185 n,*) is_hash=y; echo "$i" ;;
186 esac
187 done
188}
189
690d8824
JH
190__git_refs ()
191{
67ffa114 192 local cmd i is_hash=y dir="$(__gitdir "$1")"
873537fa 193 if [ -d "$dir" ]; then
35e65ecc
SP
194 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
195 for i in $(git --git-dir="$dir" \
196 for-each-ref --format='%(refname)' \
197 refs/tags refs/heads refs/remotes); do
198 case "$i" in
199 refs/tags/*) echo "${i#refs/tags/}" ;;
200 refs/heads/*) echo "${i#refs/heads/}" ;;
201 refs/remotes/*) echo "${i#refs/remotes/}" ;;
202 *) echo "$i" ;;
203 esac
204 done
205 return
690d8824 206 fi
799596a5 207 for i in $(git ls-remote "$dir" 2>/dev/null); do
690d8824
JH
208 case "$is_hash,$i" in
209 y,*) is_hash=n ;;
210 n,*^{}) is_hash=y ;;
211 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
212 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
35e65ecc 213 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
690d8824
JH
214 n,*) is_hash=y; echo "$i" ;;
215 esac
216 done
217}
218
219__git_refs2 ()
220{
67ffa114
SP
221 local i
222 for i in $(__git_refs "$1"); do
223 echo "$i:$i"
690d8824
JH
224 done
225}
226
5de40f59
SP
227__git_refs_remotes ()
228{
229 local cmd i is_hash=y
799596a5 230 for i in $(git ls-remote "$1" 2>/dev/null); do
5de40f59
SP
231 case "$is_hash,$i" in
232 n,refs/heads/*)
233 is_hash=y
234 echo "$i:refs/remotes/$1/${i#refs/heads/}"
235 ;;
236 y,*) is_hash=n ;;
237 n,*^{}) is_hash=y ;;
238 n,refs/tags/*) is_hash=y;;
239 n,*) is_hash=y; ;;
240 esac
241 done
242}
243
690d8824
JH
244__git_remotes ()
245{
873537fa 246 local i ngoff IFS=$'\n' d="$(__gitdir)"
56fc25f2 247 shopt -q nullglob || ngoff=1
690d8824 248 shopt -s nullglob
873537fa
SP
249 for i in "$d/remotes"/*; do
250 echo ${i#$d/remotes/}
690d8824 251 done
56fc25f2 252 [ "$ngoff" ] && shopt -u nullglob
e0d10e1c 253 for i in $(git --git-dir="$d" config --list); do
56fc25f2
SP
254 case "$i" in
255 remote.*.url=*)
256 i="${i#remote.}"
257 echo "${i/.url=*/}"
258 ;;
259 esac
260 done
690d8824
JH
261}
262
4ad91321
SP
263__git_merge_strategies ()
264{
b51ec6bd
SP
265 if [ -n "$__git_merge_strategylist" ]; then
266 echo "$__git_merge_strategylist"
267 return
268 fi
4ad91321
SP
269 sed -n "/^all_strategies='/{
270 s/^all_strategies='//
271 s/'//
272 p
273 q
274 }" "$(git --exec-path)/git-merge"
275}
b51ec6bd
SP
276__git_merge_strategylist=
277__git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
4ad91321 278
690d8824
JH
279__git_complete_file ()
280{
a79c6551 281 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
690d8824
JH
282 case "$cur" in
283 ?*:*)
a79c6551
SP
284 ref="${cur%%:*}"
285 cur="${cur#*:}"
690d8824
JH
286 case "$cur" in
287 ?*/*)
a79c6551
SP
288 pfx="${cur%/*}"
289 cur="${cur##*/}"
690d8824
JH
290 ls="$ref:$pfx"
291 pfx="$pfx/"
292 ;;
293 *)
294 ls="$ref"
295 ;;
296 esac
297 COMPREPLY=($(compgen -P "$pfx" \
873537fa 298 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
690d8824
JH
299 | sed '/^100... blob /s,^.* ,,
300 /^040000 tree /{
301 s,^.* ,,
302 s,$,/,
303 }
304 s/^.* //')" \
305 -- "$cur"))
306 ;;
307 *)
b3391775 308 __gitcomp "$(__git_refs)"
690d8824
JH
309 ;;
310 esac
311}
312
f53352fb
SP
313__git_complete_revlist ()
314{
315 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
316 case "$cur" in
317 *...*)
318 pfx="${cur%...*}..."
319 cur="${cur#*...}"
b3391775 320 __gitcomp "$(__git_refs)" "$pfx" "$cur"
f53352fb
SP
321 ;;
322 *..*)
323 pfx="${cur%..*}.."
324 cur="${cur#*..}"
b3391775
SP
325 __gitcomp "$(__git_refs)" "$pfx" "$cur"
326 ;;
f53352fb 327 *)
b3391775 328 __gitcomp "$(__git_refs)"
f53352fb
SP
329 ;;
330 esac
331}
332
f2bb9f88
SP
333__git_commands ()
334{
b51ec6bd
SP
335 if [ -n "$__git_commandlist" ]; then
336 echo "$__git_commandlist"
337 return
338 fi
f2bb9f88
SP
339 local i IFS=" "$'\n'
340 for i in $(git help -a|egrep '^ ')
341 do
342 case $i in
718a087a 343 *--*) : helper pattern;;
a925c6f1
SP
344 applymbox) : ask gittus;;
345 applypatch) : ask gittus;;
346 archimport) : import;;
2e3a430a 347 cat-file) : plumbing;;
56d99c67 348 check-attr) : plumbing;;
f2bb9f88
SP
349 check-ref-format) : plumbing;;
350 commit-tree) : plumbing;;
a925c6f1
SP
351 cvsexportcommit) : export;;
352 cvsimport) : import;;
f2bb9f88
SP
353 cvsserver) : daemon;;
354 daemon) : daemon;;
5cfb4fe5
SP
355 diff-files) : plumbing;;
356 diff-index) : plumbing;;
357 diff-tree) : plumbing;;
c6ec3b13 358 fast-import) : import;;
a925c6f1 359 fsck-objects) : plumbing;;
f2bb9f88 360 fetch-pack) : plumbing;;
a925c6f1 361 fmt-merge-msg) : plumbing;;
56d99c67 362 for-each-ref) : plumbing;;
f2bb9f88
SP
363 hash-object) : plumbing;;
364 http-*) : transport;;
365 index-pack) : plumbing;;
a925c6f1 366 init-db) : deprecated;;
f2bb9f88
SP
367 local-fetch) : plumbing;;
368 mailinfo) : plumbing;;
369 mailsplit) : plumbing;;
370 merge-*) : plumbing;;
371 mktree) : plumbing;;
372 mktag) : plumbing;;
373 pack-objects) : plumbing;;
374 pack-redundant) : plumbing;;
375 pack-refs) : plumbing;;
376 parse-remote) : plumbing;;
377 patch-id) : plumbing;;
378 peek-remote) : plumbing;;
a925c6f1
SP
379 prune) : plumbing;;
380 prune-packed) : plumbing;;
381 quiltimport) : import;;
f2bb9f88
SP
382 read-tree) : plumbing;;
383 receive-pack) : plumbing;;
2e3a430a 384 reflog) : plumbing;;
5c66d0d4 385 repo-config) : deprecated;;
f2bb9f88
SP
386 rerere) : plumbing;;
387 rev-list) : plumbing;;
388 rev-parse) : plumbing;;
389 runstatus) : plumbing;;
390 sh-setup) : internal;;
391 shell) : daemon;;
392 send-pack) : plumbing;;
393 show-index) : plumbing;;
394 ssh-*) : transport;;
395 stripspace) : plumbing;;
396 symbolic-ref) : plumbing;;
a925c6f1 397 tar-tree) : deprecated;;
f2bb9f88
SP
398 unpack-file) : plumbing;;
399 unpack-objects) : plumbing;;
a925c6f1 400 update-index) : plumbing;;
f2bb9f88
SP
401 update-ref) : plumbing;;
402 update-server-info) : daemon;;
403 upload-archive) : plumbing;;
404 upload-pack) : plumbing;;
405 write-tree) : plumbing;;
a925c6f1 406 verify-tag) : plumbing;;
f2bb9f88
SP
407 *) echo $i;;
408 esac
409 done
410}
b51ec6bd
SP
411__git_commandlist=
412__git_commandlist="$(__git_commands 2>/dev/null)"
f2bb9f88 413
367dce2a
DS
414__git_aliases ()
415{
56fc25f2 416 local i IFS=$'\n'
e0d10e1c 417 for i in $(git --git-dir="$(__gitdir)" config --list); do
56fc25f2
SP
418 case "$i" in
419 alias.*)
420 i="${i#alias.}"
421 echo "${i/=*/}"
422 ;;
423 esac
424 done
367dce2a
DS
425}
426
427__git_aliased_command ()
428{
873537fa 429 local word cmdline=$(git --git-dir="$(__gitdir)" \
e0d10e1c 430 config --get "alias.$1")
367dce2a
DS
431 for word in $cmdline; do
432 if [ "${word##-*}" ]; then
433 echo $word
434 return
435 fi
436 done
437}
438
3ff1320d
SG
439__git_find_subcommand ()
440{
441 local word subcommand c=1
442
443 while [ $c -lt $COMP_CWORD ]; do
444 word="${COMP_WORDS[c]}"
445 for subcommand in $1; do
446 if [ "$subcommand" = "$word" ]; then
447 echo "$subcommand"
448 return
449 fi
450 done
451 c=$((++c))
452 done
453}
454
d773c631
SG
455__git_has_doubledash ()
456{
457 local c=1
458 while [ $c -lt $COMP_CWORD ]; do
459 if [ "--" = "${COMP_WORDS[c]}" ]; then
460 return 0
461 fi
462 c=$((++c))
463 done
464 return 1
465}
466
88329195
SP
467__git_whitespacelist="nowarn warn error error-all strip"
468
469_git_am ()
470{
471 local cur="${COMP_WORDS[COMP_CWORD]}"
472 if [ -d .dotest ]; then
b3391775 473 __gitcomp "--skip --resolved"
88329195
SP
474 return
475 fi
476 case "$cur" in
477 --whitespace=*)
b3391775 478 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
88329195
SP
479 return
480 ;;
481 --*)
b3391775 482 __gitcomp "
88329195
SP
483 --signoff --utf8 --binary --3way --interactive
484 --whitespace=
b3391775 485 "
88329195
SP
486 return
487 esac
488 COMPREPLY=()
489}
490
491_git_apply ()
492{
493 local cur="${COMP_WORDS[COMP_CWORD]}"
494 case "$cur" in
495 --whitespace=*)
b3391775 496 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
88329195
SP
497 return
498 ;;
499 --*)
b3391775 500 __gitcomp "
88329195
SP
501 --stat --numstat --summary --check --index
502 --cached --index-info --reverse --reject --unidiff-zero
503 --apply --no-add --exclude=
504 --whitespace= --inaccurate-eof --verbose
b3391775 505 "
88329195
SP
506 return
507 esac
508 COMPREPLY=()
509}
510
8435b548
SP
511_git_add ()
512{
d773c631
SG
513 __git_has_doubledash && return
514
8435b548
SP
515 local cur="${COMP_WORDS[COMP_CWORD]}"
516 case "$cur" in
517 --*)
1d284cba
SG
518 __gitcomp "
519 --interactive --refresh --patch --update --dry-run
520 --ignore-errors
521 "
8435b548
SP
522 return
523 esac
524 COMPREPLY=()
525}
526
b2e69f62
SP
527_git_bisect ()
528{
d773c631
SG
529 __git_has_doubledash && return
530
3ff1320d
SG
531 local subcommands="start bad good reset visualize replay log"
532 local subcommand="$(__git_find_subcommand "$subcommands")"
533 if [ -z "$subcommand" ]; then
534 __gitcomp "$subcommands"
b2e69f62
SP
535 return
536 fi
537
3ff1320d 538 case "$subcommand" in
b2e69f62
SP
539 bad|good|reset)
540 __gitcomp "$(__git_refs)"
541 ;;
542 *)
543 COMPREPLY=()
544 ;;
545 esac
546}
547
690d8824
JH
548_git_branch ()
549{
b9217642
SG
550 local i c=1 only_local_ref="n" has_r="n"
551
552 while [ $c -lt $COMP_CWORD ]; do
553 i="${COMP_WORDS[c]}"
554 case "$i" in
555 -d|-m) only_local_ref="y" ;;
556 -r) has_r="y" ;;
557 esac
558 c=$((++c))
559 done
560
3b376b0c
SG
561 case "${COMP_WORDS[COMP_CWORD]}" in
562 --*=*) COMPREPLY=() ;;
563 --*)
564 __gitcomp "
565 --color --no-color --verbose --abbrev= --no-abbrev
566 --track --no-track
567 "
568 ;;
b9217642
SG
569 *)
570 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
571 __gitcomp "$(__git_heads)"
572 else
573 __gitcomp "$(__git_refs)"
574 fi
575 ;;
3b376b0c 576 esac
690d8824
JH
577}
578
374a58c9
ML
579_git_bundle ()
580{
581 local mycword="$COMP_CWORD"
582 case "${COMP_WORDS[0]}" in
583 git)
584 local cmd="${COMP_WORDS[2]}"
585 mycword="$((mycword-1))"
586 ;;
587 git-bundle*)
588 local cmd="${COMP_WORDS[1]}"
589 ;;
590 esac
591 case "$mycword" in
592 1)
593 __gitcomp "create list-heads verify unbundle"
594 ;;
595 2)
596 # looking for a file
597 ;;
598 *)
599 case "$cmd" in
600 create)
601 __git_complete_revlist
602 ;;
603 esac
604 ;;
605 esac
606}
607
690d8824
JH
608_git_checkout ()
609{
b3391775 610 __gitcomp "$(__git_refs)"
690d8824
JH
611}
612
d8a9fea5
SP
613_git_cherry ()
614{
615 __gitcomp "$(__git_refs)"
616}
617
1273231e
SP
618_git_cherry_pick ()
619{
620 local cur="${COMP_WORDS[COMP_CWORD]}"
621 case "$cur" in
622 --*)
b3391775 623 __gitcomp "--edit --no-commit"
1273231e
SP
624 ;;
625 *)
b3391775 626 __gitcomp "$(__git_refs)"
1273231e
SP
627 ;;
628 esac
629}
630
4548e855
SP
631_git_commit ()
632{
d773c631
SG
633 __git_has_doubledash && return
634
4548e855
SP
635 local cur="${COMP_WORDS[COMP_CWORD]}"
636 case "$cur" in
637 --*)
b3391775 638 __gitcomp "
4548e855
SP
639 --all --author= --signoff --verify --no-verify
640 --edit --amend --include --only
b3391775 641 "
4548e855
SP
642 return
643 esac
644 COMPREPLY=()
645}
646
217926c0
SP
647_git_describe ()
648{
649 __gitcomp "$(__git_refs)"
650}
651
690d8824
JH
652_git_diff ()
653{
d773c631
SG
654 __git_has_doubledash && return
655
b3a4f858
JS
656 local cur="${COMP_WORDS[COMP_CWORD]}"
657 case "$cur" in
658 --*)
659 __gitcomp "--cached --stat --numstat --shortstat --summary
660 --patch-with-stat --name-only --name-status --color
661 --no-color --color-words --no-renames --check
662 --full-index --binary --abbrev --diff-filter
663 --find-copies-harder --pickaxe-all --pickaxe-regex
664 --text --ignore-space-at-eol --ignore-space-change
665 --ignore-all-space --exit-code --quiet --ext-diff
aba201c6
PO
666 --no-ext-diff
667 --no-prefix --src-prefix= --dst-prefix=
f4574139 668 --base --ours --theirs
aba201c6 669 "
b3a4f858
JS
670 return
671 ;;
672 esac
690d8824
JH
673 __git_complete_file
674}
675
676_git_diff_tree ()
677{
b3391775 678 __gitcomp "$(__git_refs)"
690d8824
JH
679}
680
681_git_fetch ()
682{
683 local cur="${COMP_WORDS[COMP_CWORD]}"
684
685 case "${COMP_WORDS[0]},$COMP_CWORD" in
686 git-fetch*,1)
b3391775 687 __gitcomp "$(__git_remotes)"
690d8824
JH
688 ;;
689 git,2)
b3391775 690 __gitcomp "$(__git_remotes)"
690d8824
JH
691 ;;
692 *)
693 case "$cur" in
694 *:*)
b3391775 695 __gitcomp "$(__git_refs)" "" "${cur#*:}"
690d8824
JH
696 ;;
697 *)
698 local remote
699 case "${COMP_WORDS[0]}" in
700 git-fetch) remote="${COMP_WORDS[1]}" ;;
701 git) remote="${COMP_WORDS[2]}" ;;
702 esac
b3391775 703 __gitcomp "$(__git_refs2 "$remote")"
690d8824
JH
704 ;;
705 esac
706 ;;
707 esac
708}
709
f53352fb
SP
710_git_format_patch ()
711{
712 local cur="${COMP_WORDS[COMP_CWORD]}"
713 case "$cur" in
714 --*)
b3391775 715 __gitcomp "
f53352fb
SP
716 --stdout --attach --thread
717 --output-directory
718 --numbered --start-number
47e98eec 719 --numbered-files
f53352fb
SP
720 --keep-subject
721 --signoff
722 --in-reply-to=
723 --full-index --binary
ec804891 724 --not --all
be5f5bf0 725 --cover-letter
aba201c6 726 --no-prefix --src-prefix= --dst-prefix=
b3391775 727 "
f53352fb
SP
728 return
729 ;;
730 esac
731 __git_complete_revlist
732}
733
b26c8748
SP
734_git_gc ()
735{
736 local cur="${COMP_WORDS[COMP_CWORD]}"
737 case "$cur" in
738 --*)
47e98eec 739 __gitcomp "--prune --aggressive"
b26c8748
SP
740 return
741 ;;
742 esac
743 COMPREPLY=()
744}
745
690d8824
JH
746_git_ls_remote ()
747{
b3391775 748 __gitcomp "$(__git_remotes)"
690d8824
JH
749}
750
751_git_ls_tree ()
752{
753 __git_complete_file
754}
755
756_git_log ()
757{
d773c631
SG
758 __git_has_doubledash && return
759
6e31b866
SP
760 local cur="${COMP_WORDS[COMP_CWORD]}"
761 case "$cur" in
762 --pretty=*)
b3391775 763 __gitcomp "
6e31b866 764 oneline short medium full fuller email raw
b3391775 765 " "" "${cur##--pretty=}"
6e31b866
SP
766 return
767 ;;
47e98eec
SP
768 --date=*)
769 __gitcomp "
770 relative iso8601 rfc2822 short local default
771 " "" "${cur##--date=}"
772 return
773 ;;
6e31b866 774 --*)
b3391775 775 __gitcomp "
6e31b866
SP
776 --max-count= --max-age= --since= --after=
777 --min-age= --before= --until=
8f87fae6 778 --root --topo-order --date-order --reverse
47e98eec 779 --no-merges --follow
6e31b866 780 --abbrev-commit --abbrev=
47e98eec 781 --relative-date --date=
6e31b866
SP
782 --author= --committer= --grep=
783 --all-match
8f87fae6 784 --pretty= --name-status --name-only --raw
ec804891 785 --not --all
7d37b5bf 786 --left-right --cherry-pick
20827d99 787 --graph
b3391775 788 "
6e31b866
SP
789 return
790 ;;
791 esac
f53352fb 792 __git_complete_revlist
690d8824
JH
793}
794
4ad91321
SP
795_git_merge ()
796{
797 local cur="${COMP_WORDS[COMP_CWORD]}"
ce1e39d2
SP
798 case "${COMP_WORDS[COMP_CWORD-1]}" in
799 -s|--strategy)
b3391775 800 __gitcomp "$(__git_merge_strategies)"
ce1e39d2
SP
801 return
802 esac
4ad91321 803 case "$cur" in
ce1e39d2 804 --strategy=*)
b3391775 805 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
ce1e39d2
SP
806 return
807 ;;
4ad91321 808 --*)
b3391775 809 __gitcomp "
efb779f8 810 --no-commit --no-stat --log --no-log --squash --strategy
b3391775 811 "
4ad91321
SP
812 return
813 esac
b3391775 814 __gitcomp "$(__git_refs)"
4ad91321
SP
815}
816
690d8824
JH
817_git_merge_base ()
818{
b3391775 819 __gitcomp "$(__git_refs)"
690d8824
JH
820}
821
d33909bf
SP
822_git_name_rev ()
823{
b3391775 824 __gitcomp "--tags --all --stdin"
d33909bf
SP
825}
826
690d8824
JH
827_git_pull ()
828{
829 local cur="${COMP_WORDS[COMP_CWORD]}"
830
831 case "${COMP_WORDS[0]},$COMP_CWORD" in
832 git-pull*,1)
b3391775 833 __gitcomp "$(__git_remotes)"
690d8824
JH
834 ;;
835 git,2)
b3391775 836 __gitcomp "$(__git_remotes)"
690d8824
JH
837 ;;
838 *)
839 local remote
840 case "${COMP_WORDS[0]}" in
841 git-pull) remote="${COMP_WORDS[1]}" ;;
842 git) remote="${COMP_WORDS[2]}" ;;
843 esac
b3391775 844 __gitcomp "$(__git_refs "$remote")"
690d8824
JH
845 ;;
846 esac
847}
848
849_git_push ()
850{
851 local cur="${COMP_WORDS[COMP_CWORD]}"
852
853 case "${COMP_WORDS[0]},$COMP_CWORD" in
854 git-push*,1)
b3391775 855 __gitcomp "$(__git_remotes)"
690d8824
JH
856 ;;
857 git,2)
b3391775 858 __gitcomp "$(__git_remotes)"
690d8824
JH
859 ;;
860 *)
861 case "$cur" in
862 *:*)
863 local remote
864 case "${COMP_WORDS[0]}" in
865 git-push) remote="${COMP_WORDS[1]}" ;;
866 git) remote="${COMP_WORDS[2]}" ;;
867 esac
b3391775 868 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
690d8824 869 ;;
161fea83
SP
870 +*)
871 __gitcomp "$(__git_refs)" + "${cur#+}"
872 ;;
690d8824 873 *)
92d7c8e3 874 __gitcomp "$(__git_refs)"
690d8824
JH
875 ;;
876 esac
877 ;;
878 esac
879}
880
61d926a3
SP
881_git_rebase ()
882{
51fe1209
SG
883 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
884 if [ -d .dotest ] || [ -d "$dir"/.dotest-merge ]; then
b3391775 885 __gitcomp "--continue --skip --abort"
61d926a3
SP
886 return
887 fi
ce1e39d2
SP
888 case "${COMP_WORDS[COMP_CWORD-1]}" in
889 -s|--strategy)
b3391775 890 __gitcomp "$(__git_merge_strategies)"
ce1e39d2
SP
891 return
892 esac
61d926a3 893 case "$cur" in
ce1e39d2 894 --strategy=*)
b3391775 895 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
ce1e39d2
SP
896 return
897 ;;
61d926a3 898 --*)
d9e3b702 899 __gitcomp "--onto --merge --strategy --interactive"
61d926a3
SP
900 return
901 esac
b3391775 902 __gitcomp "$(__git_refs)"
61d926a3
SP
903}
904
e0d10e1c 905_git_config ()
5de40f59
SP
906{
907 local cur="${COMP_WORDS[COMP_CWORD]}"
908 local prv="${COMP_WORDS[COMP_CWORD-1]}"
909 case "$prv" in
910 branch.*.remote)
78d4d6a2 911 __gitcomp "$(__git_remotes)"
5de40f59
SP
912 return
913 ;;
914 branch.*.merge)
78d4d6a2 915 __gitcomp "$(__git_refs)"
5de40f59
SP
916 return
917 ;;
918 remote.*.fetch)
919 local remote="${prv#remote.}"
920 remote="${remote%.fetch}"
78d4d6a2 921 __gitcomp "$(__git_refs_remotes "$remote")"
5de40f59
SP
922 return
923 ;;
924 remote.*.push)
925 local remote="${prv#remote.}"
926 remote="${remote%.push}"
78d4d6a2 927 __gitcomp "$(git --git-dir="$(__gitdir)" \
5de40f59 928 for-each-ref --format='%(refname):%(refname)' \
78d4d6a2
SP
929 refs/heads)"
930 return
931 ;;
932 pull.twohead|pull.octopus)
933 __gitcomp "$(__git_merge_strategies)"
934 return
935 ;;
936 color.branch|color.diff|color.status)
937 __gitcomp "always never auto"
938 return
939 ;;
940 color.*.*)
941 __gitcomp "
942 black red green yellow blue magenta cyan white
943 bold dim ul blink reverse
944 "
5de40f59
SP
945 return
946 ;;
947 *.*)
948 COMPREPLY=()
949 return
950 ;;
951 esac
952 case "$cur" in
953 --*)
78d4d6a2 954 __gitcomp "
47e98eec 955 --global --system --file=
12977705 956 --list --replace-all
5de40f59 957 --get --get-all --get-regexp
1b71eb35 958 --add --unset --unset-all
12977705 959 --remove-section --rename-section
78d4d6a2 960 "
5de40f59
SP
961 return
962 ;;
963 branch.*.*)
964 local pfx="${cur%.*}."
965 cur="${cur##*.}"
78d4d6a2 966 __gitcomp "remote merge" "$pfx" "$cur"
5de40f59
SP
967 return
968 ;;
969 branch.*)
970 local pfx="${cur%.*}."
971 cur="${cur#*.}"
78d4d6a2 972 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
5de40f59
SP
973 return
974 ;;
975 remote.*.*)
976 local pfx="${cur%.*}."
977 cur="${cur##*.}"
12977705
SP
978 __gitcomp "
979 url fetch push skipDefaultUpdate
980 receivepack uploadpack tagopt
981 " "$pfx" "$cur"
5de40f59
SP
982 return
983 ;;
984 remote.*)
985 local pfx="${cur%.*}."
986 cur="${cur#*.}"
78d4d6a2 987 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
5de40f59
SP
988 return
989 ;;
990 esac
78d4d6a2 991 __gitcomp "
5de40f59
SP
992 apply.whitespace
993 core.fileMode
994 core.gitProxy
995 core.ignoreStat
996 core.preferSymlinkRefs
997 core.logAllRefUpdates
47e98eec 998 core.loosecompression
5de40f59
SP
999 core.repositoryFormatVersion
1000 core.sharedRepository
1001 core.warnAmbiguousRefs
1002 core.compression
78d4d6a2
SP
1003 core.packedGitWindowSize
1004 core.packedGitLimit
2122591b 1005 clean.requireForce
78d4d6a2
SP
1006 color.branch
1007 color.branch.current
1008 color.branch.local
1009 color.branch.remote
1010 color.branch.plain
a159ca0c 1011 color.diff
78d4d6a2
SP
1012 color.diff.plain
1013 color.diff.meta
1014 color.diff.frag
1015 color.diff.old
1016 color.diff.new
1017 color.diff.commit
1018 color.diff.whitespace
a159ca0c 1019 color.pager
a159ca0c 1020 color.status
78d4d6a2
SP
1021 color.status.header
1022 color.status.added
1023 color.status.changed
1024 color.status.untracked
1025 diff.renameLimit
1026 diff.renames
1027 fetch.unpackLimit
1028 format.headers
47e98eec 1029 format.subjectprefix
78d4d6a2
SP
1030 gitcvs.enabled
1031 gitcvs.logfile
12977705 1032 gitcvs.allbinary
6aeeffd1
JE
1033 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1034 gitcvs.dbtablenameprefix
12977705 1035 gc.packrefs
78d4d6a2
SP
1036 gc.reflogexpire
1037 gc.reflogexpireunreachable
1038 gc.rerereresolved
1039 gc.rerereunresolved
5de40f59
SP
1040 http.sslVerify
1041 http.sslCert
1042 http.sslKey
1043 http.sslCAInfo
1044 http.sslCAPath
1045 http.maxRequests
78d4d6a2
SP
1046 http.lowSpeedLimit
1047 http.lowSpeedTime
5de40f59 1048 http.noEPSV
78d4d6a2
SP
1049 i18n.commitEncoding
1050 i18n.logOutputEncoding
1051 log.showroot
12977705 1052 merge.tool
78d4d6a2
SP
1053 merge.summary
1054 merge.verbosity
5de40f59 1055 pack.window
12977705 1056 pack.depth
47e98eec
SP
1057 pack.windowMemory
1058 pack.compression
1059 pack.deltaCacheSize
1060 pack.deltaCacheLimit
78d4d6a2
SP
1061 pull.octopus
1062 pull.twohead
5de40f59 1063 repack.useDeltaBaseOffset
78d4d6a2
SP
1064 show.difftree
1065 showbranch.default
1066 tar.umask
1067 transfer.unpackLimit
5de40f59
SP
1068 receive.unpackLimit
1069 receive.denyNonFastForwards
78d4d6a2
SP
1070 user.name
1071 user.email
1072 user.signingkey
1073 whatchanged.difftree
5de40f59 1074 branch. remote.
78d4d6a2 1075 "
5de40f59
SP
1076}
1077
88293c67
SP
1078_git_remote ()
1079{
3ff1320d
SG
1080 local subcommands="add rm show prune update"
1081 local subcommand="$(__git_find_subcommand "$subcommands")"
1082 if [ -z "$subcommand" ]; then
3903c618 1083 __gitcomp "$subcommands"
88293c67
SP
1084 return
1085 fi
1086
3ff1320d 1087 case "$subcommand" in
a3b811a4 1088 rm|show|prune)
88293c67
SP
1089 __gitcomp "$(__git_remotes)"
1090 ;;
fb72759b
SP
1091 update)
1092 local i c='' IFS=$'\n'
1093 for i in $(git --git-dir="$(__gitdir)" config --list); do
1094 case "$i" in
1095 remotes.*)
1096 i="${i#remotes.}"
1097 c="$c ${i/=*/}"
1098 ;;
1099 esac
1100 done
1101 __gitcomp "$c"
1102 ;;
88293c67
SP
1103 *)
1104 COMPREPLY=()
1105 ;;
1106 esac
1107}
1108
67e78c3b
SP
1109_git_reset ()
1110{
d773c631
SG
1111 __git_has_doubledash && return
1112
67e78c3b 1113 local cur="${COMP_WORDS[COMP_CWORD]}"
b3391775
SP
1114 case "$cur" in
1115 --*)
1116 __gitcomp "--mixed --hard --soft"
1117 return
1118 ;;
1119 esac
1120 __gitcomp "$(__git_refs)"
67e78c3b
SP
1121}
1122
1fd6bec9
SP
1123_git_shortlog ()
1124{
d773c631
SG
1125 __git_has_doubledash && return
1126
1fd6bec9
SP
1127 local cur="${COMP_WORDS[COMP_CWORD]}"
1128 case "$cur" in
1129 --*)
1130 __gitcomp "
1131 --max-count= --max-age= --since= --after=
1132 --min-age= --before= --until=
1133 --no-merges
1134 --author= --committer= --grep=
1135 --all-match
1136 --not --all
1137 --numbered --summary
1138 "
1139 return
1140 ;;
1141 esac
1142 __git_complete_revlist
1143}
1144
90131924
SP
1145_git_show ()
1146{
1147 local cur="${COMP_WORDS[COMP_CWORD]}"
1148 case "$cur" in
1149 --pretty=*)
b3391775 1150 __gitcomp "
90131924 1151 oneline short medium full fuller email raw
b3391775 1152 " "" "${cur##--pretty=}"
90131924
SP
1153 return
1154 ;;
1155 --*)
b3391775 1156 __gitcomp "--pretty="
90131924
SP
1157 return
1158 ;;
1159 esac
1160 __git_complete_file
1161}
1162
7fd53fce
JH
1163_git_stash ()
1164{
88b302f5 1165 local subcommands='save list show apply clear drop pop create'
3ff1320d
SG
1166 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1167 __gitcomp "$subcommands"
1168 fi
7fd53fce
JH
1169}
1170
be86f7a0
SP
1171_git_submodule ()
1172{
d773c631
SG
1173 __git_has_doubledash && return
1174
3ff1320d
SG
1175 local subcommands="add status init update"
1176 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
be86f7a0
SP
1177 local cur="${COMP_WORDS[COMP_CWORD]}"
1178 case "$cur" in
1179 --*)
1180 __gitcomp "--quiet --cached"
1181 ;;
1182 *)
3ff1320d 1183 __gitcomp "$subcommands"
be86f7a0
SP
1184 ;;
1185 esac
1186 return
1187 fi
1188}
1189
47f6ee28
SG
1190_git_svn ()
1191{
1192 local subcommands="
1193 init fetch clone rebase dcommit log find-rev
1194 set-tree commit-diff info create-ignore propget
1195 proplist show-ignore show-externals
1196 "
1197 local subcommand="$(__git_find_subcommand "$subcommands")"
1198 if [ -z "$subcommand" ]; then
1199 __gitcomp "$subcommands"
1200 else
1201 local remote_opts="--username= --config-dir= --no-auth-cache"
1202 local fc_opts="
1203 --follow-parent --authors-file= --repack=
1204 --no-metadata --use-svm-props --use-svnsync-props
1205 --log-window-size= --no-checkout --quiet
1206 --repack-flags --user-log-author $remote_opts
1207 "
1208 local init_opts="
1209 --template= --shared= --trunk= --tags=
1210 --branches= --stdlayout --minimize-url
1211 --no-metadata --use-svm-props --use-svnsync-props
1212 --rewrite-root= $remote_opts
1213 "
1214 local cmt_opts="
1215 --edit --rmdir --find-copies-harder --copy-similarity=
1216 "
1217
1218 local cur="${COMP_WORDS[COMP_CWORD]}"
1219 case "$subcommand,$cur" in
1220 fetch,--*)
1221 __gitcomp "--revision= --fetch-all $fc_opts"
1222 ;;
1223 clone,--*)
1224 __gitcomp "--revision= $fc_opts $init_opts"
1225 ;;
1226 init,--*)
1227 __gitcomp "$init_opts"
1228 ;;
1229 dcommit,--*)
1230 __gitcomp "
1231 --merge --strategy= --verbose --dry-run
1232 --fetch-all --no-rebase $cmt_opts $fc_opts
1233 "
1234 ;;
1235 set-tree,--*)
1236 __gitcomp "--stdin $cmt_opts $fc_opts"
1237 ;;
1238 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1239 show-externals,--*)
1240 __gitcomp "--revision="
1241 ;;
1242 log,--*)
1243 __gitcomp "
1244 --limit= --revision= --verbose --incremental
1245 --oneline --show-commit --non-recursive
1246 --authors-file=
1247 "
1248 ;;
1249 rebase,--*)
1250 __gitcomp "
1251 --merge --verbose --strategy= --local
1252 --fetch-all $fc_opts
1253 "
1254 ;;
1255 commit-diff,--*)
1256 __gitcomp "--message= --file= --revision= $cmt_opts"
1257 ;;
1258 info,--*)
1259 __gitcomp "--url"
1260 ;;
1261 *)
1262 COMPREPLY=()
1263 ;;
1264 esac
1265 fi
1266}
1267
88e21dc7
SP
1268_git_tag ()
1269{
1270 local i c=1 f=0
1271 while [ $c -lt $COMP_CWORD ]; do
1272 i="${COMP_WORDS[c]}"
1273 case "$i" in
1274 -d|-v)
1275 __gitcomp "$(__git_tags)"
1276 return
1277 ;;
1278 -f)
1279 f=1
1280 ;;
1281 esac
1282 c=$((++c))
1283 done
1284
1285 case "${COMP_WORDS[COMP_CWORD-1]}" in
1286 -m|-F)
1287 COMPREPLY=()
1288 ;;
1289 -*|tag|git-tag)
1290 if [ $f = 1 ]; then
1291 __gitcomp "$(__git_tags)"
1292 else
1293 COMPREPLY=()
1294 fi
1295 ;;
1296 *)
1297 __gitcomp "$(__git_refs)"
1298 ;;
1299 esac
1300}
1301
690d8824
JH
1302_git ()
1303{
873537fa
SP
1304 local i c=1 command __git_dir
1305
1306 while [ $c -lt $COMP_CWORD ]; do
1307 i="${COMP_WORDS[c]}"
1308 case "$i" in
1309 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1310 --bare) __git_dir="." ;;
1311 --version|--help|-p|--paginate) ;;
1312 *) command="$i"; break ;;
1313 esac
1314 c=$((++c))
1315 done
1316
1d17b22e 1317 if [ -z "$command" ]; then
72e5e989
SP
1318 case "${COMP_WORDS[COMP_CWORD]}" in
1319 --*=*) COMPREPLY=() ;;
47e98eec 1320 --*) __gitcomp "
ce5a2c95 1321 --paginate
47e98eec
SP
1322 --no-pager
1323 --git-dir=
1324 --bare
1325 --version
1326 --exec-path
ce5a2c95
TL
1327 --work-tree=
1328 --help
47e98eec
SP
1329 "
1330 ;;
72e5e989
SP
1331 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1332 esac
1333 return
873537fa 1334 fi
367dce2a 1335
873537fa
SP
1336 local expansion=$(__git_aliased_command "$command")
1337 [ "$expansion" ] && command="$expansion"
367dce2a 1338
873537fa 1339 case "$command" in
88329195 1340 am) _git_am ;;
8435b548 1341 add) _git_add ;;
88329195 1342 apply) _git_apply ;;
b2e69f62 1343 bisect) _git_bisect ;;
374a58c9 1344 bundle) _git_bundle ;;
873537fa 1345 branch) _git_branch ;;
873537fa 1346 checkout) _git_checkout ;;
d8a9fea5 1347 cherry) _git_cherry ;;
1273231e 1348 cherry-pick) _git_cherry_pick ;;
4548e855 1349 commit) _git_commit ;;
e0d10e1c 1350 config) _git_config ;;
217926c0 1351 describe) _git_describe ;;
873537fa 1352 diff) _git_diff ;;
873537fa 1353 fetch) _git_fetch ;;
f53352fb 1354 format-patch) _git_format_patch ;;
b26c8748 1355 gc) _git_gc ;;
873537fa
SP
1356 log) _git_log ;;
1357 ls-remote) _git_ls_remote ;;
1358 ls-tree) _git_ls_tree ;;
4ad91321 1359 merge) _git_merge;;
873537fa 1360 merge-base) _git_merge_base ;;
d33909bf 1361 name-rev) _git_name_rev ;;
873537fa
SP
1362 pull) _git_pull ;;
1363 push) _git_push ;;
61d926a3 1364 rebase) _git_rebase ;;
88293c67 1365 remote) _git_remote ;;
873537fa 1366 reset) _git_reset ;;
1fd6bec9 1367 shortlog) _git_shortlog ;;
90131924 1368 show) _git_show ;;
873537fa 1369 show-branch) _git_log ;;
7fd53fce 1370 stash) _git_stash ;;
be86f7a0 1371 submodule) _git_submodule ;;
47f6ee28 1372 svn) _git_svn ;;
88e21dc7 1373 tag) _git_tag ;;
873537fa
SP
1374 whatchanged) _git_log ;;
1375 *) COMPREPLY=() ;;
1376 esac
690d8824
JH
1377}
1378
1379_gitk ()
1380{
d773c631
SG
1381 __git_has_doubledash && return
1382
690d8824 1383 local cur="${COMP_WORDS[COMP_CWORD]}"
07ba53f7
RQ
1384 local g="$(git rev-parse --git-dir 2>/dev/null)"
1385 local merge=""
1386 if [ -f $g/MERGE_HEAD ]; then
1387 merge="--merge"
1388 fi
b3391775
SP
1389 case "$cur" in
1390 --*)
07ba53f7 1391 __gitcomp "--not --all $merge"
b3391775
SP
1392 return
1393 ;;
1394 esac
ec804891 1395 __git_complete_revlist
690d8824
JH
1396}
1397
1398complete -o default -o nospace -F _git git
b3391775
SP
1399complete -o default -o nospace -F _gitk gitk
1400complete -o default -o nospace -F _git_am git-am
1401complete -o default -o nospace -F _git_apply git-apply
b2e69f62 1402complete -o default -o nospace -F _git_bisect git-bisect
b3391775 1403complete -o default -o nospace -F _git_branch git-branch
374a58c9 1404complete -o default -o nospace -F _git_bundle git-bundle
b3391775 1405complete -o default -o nospace -F _git_checkout git-checkout
d8a9fea5 1406complete -o default -o nospace -F _git_cherry git-cherry
b3391775
SP
1407complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1408complete -o default -o nospace -F _git_commit git-commit
217926c0 1409complete -o default -o nospace -F _git_describe git-describe
690d8824 1410complete -o default -o nospace -F _git_diff git-diff
690d8824 1411complete -o default -o nospace -F _git_fetch git-fetch
f53352fb 1412complete -o default -o nospace -F _git_format_patch git-format-patch
b26c8748 1413complete -o default -o nospace -F _git_gc git-gc
690d8824 1414complete -o default -o nospace -F _git_log git-log
b3391775 1415complete -o default -o nospace -F _git_ls_remote git-ls-remote
690d8824 1416complete -o default -o nospace -F _git_ls_tree git-ls-tree
b3391775
SP
1417complete -o default -o nospace -F _git_merge git-merge
1418complete -o default -o nospace -F _git_merge_base git-merge-base
1419complete -o default -o nospace -F _git_name_rev git-name-rev
690d8824
JH
1420complete -o default -o nospace -F _git_pull git-pull
1421complete -o default -o nospace -F _git_push git-push
b3391775
SP
1422complete -o default -o nospace -F _git_rebase git-rebase
1423complete -o default -o nospace -F _git_config git-config
88293c67 1424complete -o default -o nospace -F _git_remote git-remote
b3391775 1425complete -o default -o nospace -F _git_reset git-reset
1fd6bec9 1426complete -o default -o nospace -F _git_shortlog git-shortlog
90131924 1427complete -o default -o nospace -F _git_show git-show
7fd53fce 1428complete -o default -o nospace -F _git_stash git-stash
be86f7a0 1429complete -o default -o nospace -F _git_submodule git-submodule
47f6ee28 1430complete -o default -o nospace -F _git_svn git-svn
144d33de 1431complete -o default -o nospace -F _git_log git-show-branch
88e21dc7 1432complete -o default -o nospace -F _git_tag git-tag
690d8824
JH
1433complete -o default -o nospace -F _git_log git-whatchanged
1434
1435# The following are necessary only for Cygwin, and only are needed
1436# when the user has tab-completed the executable name and consequently
1437# included the '.exe' suffix.
1438#
76c3eb51 1439if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
b3391775
SP
1440complete -o default -o nospace -F _git_add git-add.exe
1441complete -o default -o nospace -F _git_apply git-apply.exe
144d33de 1442complete -o default -o nospace -F _git git.exe
b3391775 1443complete -o default -o nospace -F _git_branch git-branch.exe
374a58c9 1444complete -o default -o nospace -F _git_bundle git-bundle.exe
d8a9fea5 1445complete -o default -o nospace -F _git_cherry git-cherry.exe
217926c0 1446complete -o default -o nospace -F _git_describe git-describe.exe
690d8824 1447complete -o default -o nospace -F _git_diff git-diff.exe
f53352fb 1448complete -o default -o nospace -F _git_format_patch git-format-patch.exe
690d8824
JH
1449complete -o default -o nospace -F _git_log git-log.exe
1450complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
b3391775
SP
1451complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1452complete -o default -o nospace -F _git_name_rev git-name-rev.exe
690d8824 1453complete -o default -o nospace -F _git_push git-push.exe
b3391775 1454complete -o default -o nospace -F _git_config git-config
1fd6bec9 1455complete -o default -o nospace -F _git_shortlog git-shortlog.exe
90131924 1456complete -o default -o nospace -F _git_show git-show.exe
144d33de 1457complete -o default -o nospace -F _git_log git-show-branch.exe
88e21dc7 1458complete -o default -o nospace -F _git_tag git-tag.exe
690d8824 1459complete -o default -o nospace -F _git_log git-whatchanged.exe
76c3eb51 1460fi