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:
48 case "$COMP_WORDBREAKS" in
50 *) COMP_WORDBREAKS
="$COMP_WORDBREAKS:"
56 if [ -n "$__git_dir" ]; then
58 elif [ -d .git
]; then
61 git rev-parse
--git-dir 2>/dev
/null
63 elif [ -d "$1/.git" ]; then
72 local g
="$(git rev-parse --git-dir 2>/dev/null)"
76 if [ -d "$g/rebase-apply" ]
78 if test -f "$g/rebase-apply/rebasing"
81 elif test -f "$g/rebase-apply/applying"
87 b
="$(git symbolic-ref HEAD 2>/dev/null)"
88 elif [ -f "$g/rebase-merge/interactive" ]
91 b
="$(cat "$g/rebase-merge
/head-name
")"
92 elif [ -d "$g/rebase-merge" ]
95 b
="$(cat "$g/rebase-merge
/head-name
")"
96 elif [ -f "$g/MERGE_HEAD" ]
99 b
="$(git symbolic-ref HEAD 2>/dev/null)"
101 if [ -f "$g/BISECT_LOG" ]
105 if ! b
="$(git symbolic-ref HEAD 2>/dev/null)"
107 if ! b
="$(git describe --exact-match HEAD 2>/dev/null)"
109 b
="$(cut -c1-7 "$g/HEAD
")..."
115 printf "$1" "${b##refs/heads/}$r"
117 printf " (%s)" "${b##refs/heads/}$r"
124 local c IFS
=' '$
'\t'$
'\n'
127 --*=*) printf %s$
'\n' "$c$2" ;;
128 *.
) printf %s$
'\n' "$c$2" ;;
129 *) printf %s$
'\n' "$c$2 " ;;
136 local cur
="${COMP_WORDS[COMP_CWORD]}"
137 if [ $# -gt 2 ]; then
146 COMPREPLY
=($
(compgen
-P "$2" \
147 -W "$(__gitcomp_1 "$1" "$4")" \
155 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
156 if [ -d "$dir" ]; then
157 for i
in $
(git
--git-dir="$dir" \
158 for-each-ref
--format='%(refname)' \
160 echo "${i#refs/heads/}"
164 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
165 case "$is_hash,$i" in
168 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
169 n
,*) is_hash
=y
; echo "$i" ;;
176 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
177 if [ -d "$dir" ]; then
178 for i
in $
(git
--git-dir="$dir" \
179 for-each-ref
--format='%(refname)' \
181 echo "${i#refs/tags/}"
185 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
186 case "$is_hash,$i" in
189 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
190 n
,*) is_hash
=y
; echo "$i" ;;
197 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
198 if [ -d "$dir" ]; then
199 if [ -e "$dir/HEAD" ]; then echo HEAD
; fi
200 for i
in $
(git
--git-dir="$dir" \
201 for-each-ref
--format='%(refname)' \
202 refs
/tags refs
/heads refs
/remotes
); do
204 refs
/tags
/*) echo "${i#refs/tags/}" ;;
205 refs
/heads
/*) echo "${i#refs/heads/}" ;;
206 refs
/remotes
/*) echo "${i#refs/remotes/}" ;;
212 for i
in $
(git ls-remote
"$dir" 2>/dev
/null
); do
213 case "$is_hash,$i" in
216 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
217 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
218 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
219 n
,*) is_hash
=y
; echo "$i" ;;
227 for i
in $
(__git_refs
"$1"); do
232 __git_refs_remotes
()
234 local cmd i is_hash
=y
235 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
236 case "$is_hash,$i" in
239 echo "$i:refs/remotes/$1/${i#refs/heads/}"
243 n
,refs
/tags
/*) is_hash
=y
;;
251 local i ngoff IFS
=$
'\n' d
="$(__gitdir)"
252 shopt -q nullglob || ngoff
=1
254 for i
in "$d/remotes"/*; do
255 echo ${i#$d/remotes/}
257 [ "$ngoff" ] && shopt -u nullglob
258 for i
in $
(git
--git-dir="$d" config
--list); do
268 __git_merge_strategies
()
270 if [ -n "$__git_merge_strategylist" ]; then
271 echo "$__git_merge_strategylist"
274 sed -n "/^all_strategies='/{
275 s/^all_strategies='//
279 }" "$(git --exec-path)/git-merge"
281 __git_merge_strategylist
=
282 __git_merge_strategylist
="$(__git_merge_strategies 2>/dev/null)"
284 __git_complete_file
()
286 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
303 case "$COMP_WORDBREAKS" in
305 *) pfx
="$ref:$pfx" ;;
309 COMPREPLY
=($
(compgen
-P "$pfx" \
310 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
311 | sed '/^100... blob /{
327 __gitcomp
"$(__git_refs)"
332 __git_complete_revlist
()
334 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
339 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
344 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
347 __gitcomp
"$(__git_refs)"
354 if [ -n "$__git_commandlist" ]; then
355 echo "$__git_commandlist"
359 for i
in $
(git
help -a|
egrep '^ ')
362 *--*) : helper pattern
;;
363 applymbox
) : ask gittus
;;
364 applypatch
) : ask gittus
;;
365 archimport
) : import
;;
366 cat-file
) : plumbing
;;
367 check-attr
) : plumbing
;;
368 check-ref-format
) : plumbing
;;
369 commit-tree
) : plumbing
;;
370 cvsexportcommit
) : export;;
371 cvsimport
) : import
;;
372 cvsserver
) : daemon
;;
374 diff-files
) : plumbing
;;
375 diff-index
) : plumbing
;;
376 diff-tree
) : plumbing
;;
377 fast-import
) : import
;;
378 fsck-objects
) : plumbing
;;
379 fetch-pack
) : plumbing
;;
380 fmt-merge-msg
) : plumbing
;;
381 for-each-ref
) : plumbing
;;
382 hash-object
) : plumbing
;;
383 http-
*) : transport
;;
384 index-pack
) : plumbing
;;
385 init-db
) : deprecated
;;
386 local-fetch
) : plumbing
;;
387 mailinfo
) : plumbing
;;
388 mailsplit
) : plumbing
;;
389 merge-
*) : plumbing
;;
392 pack-objects
) : plumbing
;;
393 pack-redundant
) : plumbing
;;
394 pack-refs
) : plumbing
;;
395 parse-remote
) : plumbing
;;
396 patch-id
) : plumbing
;;
397 peek-remote
) : plumbing
;;
399 prune-packed
) : plumbing
;;
400 quiltimport
) : import
;;
401 read-tree
) : plumbing
;;
402 receive-pack
) : plumbing
;;
404 repo-config
) : deprecated
;;
406 rev-list
) : plumbing
;;
407 rev-parse
) : plumbing
;;
408 runstatus
) : plumbing
;;
409 sh-setup
) : internal
;;
411 send-pack
) : plumbing
;;
412 show-index
) : plumbing
;;
414 stripspace
) : plumbing
;;
415 symbolic-ref
) : plumbing
;;
416 tar-tree
) : deprecated
;;
417 unpack-file
) : plumbing
;;
418 unpack-objects
) : plumbing
;;
419 update-index
) : plumbing
;;
420 update-ref
) : plumbing
;;
421 update-server-info
) : daemon
;;
422 upload-archive
) : plumbing
;;
423 upload-pack
) : plumbing
;;
424 write-tree
) : plumbing
;;
425 verify-tag
) : plumbing
;;
431 __git_commandlist
="$(__git_commands 2>/dev/null)"
436 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
446 __git_aliased_command
()
448 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
449 config
--get "alias.$1")
450 for word
in $cmdline; do
451 if [ "${word##-*}" ]; then
458 __git_find_subcommand
()
460 local word subcommand c
=1
462 while [ $c -lt $COMP_CWORD ]; do
463 word
="${COMP_WORDS[c]}"
464 for subcommand
in $1; do
465 if [ "$subcommand" = "$word" ]; then
474 __git_has_doubledash
()
477 while [ $c -lt $COMP_CWORD ]; do
478 if [ "--" = "${COMP_WORDS[c]}" ]; then
486 __git_whitespacelist
="nowarn warn error error-all strip"
490 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
491 if [ -d "$dir"/rebase-apply
]; then
492 __gitcomp
"--skip --resolved"
497 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
502 --signoff --utf8 --binary --3way --interactive
512 local cur
="${COMP_WORDS[COMP_CWORD]}"
515 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
520 --stat --numstat --summary --check --index
521 --cached --index-info --reverse --reject --unidiff-zero
522 --apply --no-add --exclude=
523 --whitespace= --inaccurate-eof --verbose
532 __git_has_doubledash
&& return
534 local cur
="${COMP_WORDS[COMP_CWORD]}"
538 --interactive --refresh --patch --update --dry-run
548 __git_has_doubledash
&& return
550 local subcommands
="start bad good skip reset visualize replay log run"
551 local subcommand
="$(__git_find_subcommand "$subcommands")"
552 if [ -z "$subcommand" ]; then
553 __gitcomp
"$subcommands"
557 case "$subcommand" in
559 __gitcomp
"$(__git_refs)"
569 local i c
=1 only_local_ref
="n" has_r
="n"
571 while [ $c -lt $COMP_CWORD ]; do
574 -d|
-m) only_local_ref
="y" ;;
580 case "${COMP_WORDS[COMP_CWORD]}" in
581 --*=*) COMPREPLY
=() ;;
584 --color --no-color --verbose --abbrev= --no-abbrev
585 --track --no-track --contains --merged --no-merged
589 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
590 __gitcomp
"$(__git_heads)"
592 __gitcomp
"$(__git_refs)"
600 local mycword
="$COMP_CWORD"
601 case "${COMP_WORDS[0]}" in
603 local cmd
="${COMP_WORDS[2]}"
604 mycword
="$((mycword-1))"
607 local cmd
="${COMP_WORDS[1]}"
612 __gitcomp
"create list-heads verify unbundle"
620 __git_complete_revlist
629 __gitcomp
"$(__git_refs)"
634 __gitcomp
"$(__git_refs)"
639 local cur
="${COMP_WORDS[COMP_CWORD]}"
642 __gitcomp
"--edit --no-commit"
645 __gitcomp
"$(__git_refs)"
652 __git_has_doubledash
&& return
654 local cur
="${COMP_WORDS[COMP_CWORD]}"
658 --all --author= --signoff --verify --no-verify
659 --edit --amend --include --only
668 __gitcomp
"$(__git_refs)"
673 __git_has_doubledash
&& return
675 local cur
="${COMP_WORDS[COMP_CWORD]}"
678 __gitcomp
"--cached --stat --numstat --shortstat --summary
679 --patch-with-stat --name-only --name-status --color
680 --no-color --color-words --no-renames --check
681 --full-index --binary --abbrev --diff-filter
682 --find-copies-harder --pickaxe-all --pickaxe-regex
683 --text --ignore-space-at-eol --ignore-space-change
684 --ignore-all-space --exit-code --quiet --ext-diff
686 --no-prefix --src-prefix= --dst-prefix=
687 --base --ours --theirs
697 __gitcomp
"$(__git_refs)"
702 local cur
="${COMP_WORDS[COMP_CWORD]}"
704 case "${COMP_WORDS[0]},$COMP_CWORD" in
706 __gitcomp
"$(__git_remotes)"
709 __gitcomp
"$(__git_remotes)"
715 case "$COMP_WORDBREAKS" in
717 *) pfx
="${cur%%:*}:" ;;
719 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
723 case "${COMP_WORDS[0]}" in
724 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
725 git
) remote
="${COMP_WORDS[2]}" ;;
727 __gitcomp
"$(__git_refs2 "$remote")"
736 local cur
="${COMP_WORDS[COMP_CWORD]}"
740 --stdout --attach --thread
742 --numbered --start-number
747 --full-index --binary
750 --no-prefix --src-prefix= --dst-prefix=
755 __git_complete_revlist
760 local cur
="${COMP_WORDS[COMP_CWORD]}"
763 __gitcomp
"--prune --aggressive"
772 __gitcomp
"$(__git_remotes)"
782 __git_has_doubledash
&& return
784 local cur
="${COMP_WORDS[COMP_CWORD]}"
788 oneline short medium full fuller email raw
789 " "" "${cur##--pretty=}"
794 relative iso8601 rfc2822 short local default
795 " "" "${cur##--date=}"
800 --max-count= --max-age= --since= --after=
801 --min-age= --before= --until=
802 --root --topo-order --date-order --reverse
804 --abbrev-commit --abbrev=
805 --relative-date --date=
806 --author= --committer= --grep=
808 --pretty= --name-status --name-only --raw
810 --left-right --cherry-pick
812 --stat --numstat --shortstat
813 --decorate --diff-filter=
814 --color-words --walk-reflogs
819 __git_complete_revlist
824 local cur
="${COMP_WORDS[COMP_CWORD]}"
825 case "${COMP_WORDS[COMP_CWORD-1]}" in
827 __gitcomp
"$(__git_merge_strategies)"
832 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
837 --no-commit --no-stat --log --no-log --squash --strategy
841 __gitcomp
"$(__git_refs)"
846 __gitcomp
"$(__git_refs)"
851 __gitcomp
"--tags --all --stdin"
856 local cur
="${COMP_WORDS[COMP_CWORD]}"
858 case "${COMP_WORDS[0]},$COMP_CWORD" in
860 __gitcomp
"$(__git_remotes)"
863 __gitcomp
"$(__git_remotes)"
867 case "${COMP_WORDS[0]}" in
868 git-pull
) remote
="${COMP_WORDS[1]}" ;;
869 git
) remote
="${COMP_WORDS[2]}" ;;
871 __gitcomp
"$(__git_refs "$remote")"
878 local cur
="${COMP_WORDS[COMP_CWORD]}"
880 case "${COMP_WORDS[0]},$COMP_CWORD" in
882 __gitcomp
"$(__git_remotes)"
885 __gitcomp
"$(__git_remotes)"
891 case "${COMP_WORDS[0]}" in
892 git-push
) remote
="${COMP_WORDS[1]}" ;;
893 git
) remote
="${COMP_WORDS[2]}" ;;
897 case "$COMP_WORDBREAKS" in
899 *) pfx
="${cur%%:*}:" ;;
902 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
905 __gitcomp
"$(__git_refs)" + "${cur#+}"
908 __gitcomp
"$(__git_refs)"
917 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
918 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
919 __gitcomp
"--continue --skip --abort"
922 case "${COMP_WORDS[COMP_CWORD-1]}" in
924 __gitcomp
"$(__git_merge_strategies)"
929 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
933 __gitcomp
"--onto --merge --strategy --interactive"
936 __gitcomp
"$(__git_refs)"
941 local cur
="${COMP_WORDS[COMP_CWORD]}"
944 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
945 --dry-run --envelope-sender --from --identity
946 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
947 --no-suppress-from --no-thread --quiet
948 --signed-off-by-cc --smtp-pass --smtp-server
949 --smtp-server-port --smtp-ssl --smtp-user --subject
950 --suppress-cc --suppress-from --thread --to"
959 local cur
="${COMP_WORDS[COMP_CWORD]}"
960 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
963 __gitcomp
"$(__git_remotes)"
967 __gitcomp
"$(__git_refs)"
971 local remote
="${prv#remote.}"
972 remote
="${remote%.fetch}"
973 __gitcomp
"$(__git_refs_remotes "$remote")"
977 local remote
="${prv#remote.}"
978 remote
="${remote%.push}"
979 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
980 for-each-ref --format='%(refname):%(refname)' \
984 pull.twohead|pull.octopus
)
985 __gitcomp
"$(__git_merge_strategies)"
988 color.branch|color.
diff|color.status
)
989 __gitcomp
"always never auto"
994 black red green yellow blue magenta cyan white
995 bold dim ul blink reverse
1007 --global --system --file=
1008 --list --replace-all
1009 --get --get-all --get-regexp
1010 --add --unset --unset-all
1011 --remove-section --rename-section
1016 local pfx
="${cur%.*}."
1018 __gitcomp
"remote merge" "$pfx" "$cur"
1022 local pfx
="${cur%.*}."
1024 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1028 local pfx
="${cur%.*}."
1031 url fetch push skipDefaultUpdate
1032 receivepack uploadpack tagopt
1037 local pfx
="${cur%.*}."
1039 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1048 core.preferSymlinkRefs
1049 core.logAllRefUpdates
1050 core.loosecompression
1051 core.repositoryFormatVersion
1052 core.sharedRepository
1053 core.warnAmbiguousRefs
1055 core.packedGitWindowSize
1059 color.branch.current
1070 color.diff.whitespace
1075 color.status.changed
1076 color.status.untracked
1081 format.subjectprefix
1085 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1086 gitcvs.dbtablenameprefix
1089 gc.reflogexpireunreachable
1102 i18n.logOutputEncoding
1112 pack.deltaCacheLimit
1115 repack.useDeltaBaseOffset
1118 transfer.unpackLimit
1120 receive.denyNonFastForwards
1130 local subcommands
="add rm show prune update"
1131 local subcommand
="$(__git_find_subcommand "$subcommands")"
1132 if [ -z "$subcommand" ]; then
1133 __gitcomp
"$subcommands"
1137 case "$subcommand" in
1139 __gitcomp
"$(__git_remotes)"
1142 local i c
='' IFS
=$
'\n'
1143 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1161 __git_has_doubledash
&& return
1163 local cur
="${COMP_WORDS[COMP_CWORD]}"
1166 __gitcomp
"--mixed --hard --soft"
1170 __gitcomp
"$(__git_refs)"
1175 __git_has_doubledash
&& return
1177 local cur
="${COMP_WORDS[COMP_CWORD]}"
1181 --max-count= --max-age= --since= --after=
1182 --min-age= --before= --until=
1184 --author= --committer= --grep=
1187 --numbered --summary
1192 __git_complete_revlist
1197 local cur
="${COMP_WORDS[COMP_CWORD]}"
1201 oneline short medium full fuller email raw
1202 " "" "${cur##--pretty=}"
1206 __gitcomp
"--pretty="
1215 local subcommands
='save list show apply clear drop pop create'
1216 local subcommand
="$(__git_find_subcommand "$subcommands")"
1217 if [ -z "$subcommand" ]; then
1218 __gitcomp
"$subcommands"
1220 local cur
="${COMP_WORDS[COMP_CWORD]}"
1221 case "$subcommand,$cur" in
1223 __gitcomp
"--keep-index"
1234 __git_has_doubledash
&& return
1236 local subcommands
="add status init update"
1237 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1238 local cur
="${COMP_WORDS[COMP_CWORD]}"
1241 __gitcomp
"--quiet --cached"
1244 __gitcomp
"$subcommands"
1254 init fetch clone rebase dcommit log find-rev
1255 set-tree commit-diff info create-ignore propget
1256 proplist show-ignore show-externals
1258 local subcommand
="$(__git_find_subcommand "$subcommands")"
1259 if [ -z "$subcommand" ]; then
1260 __gitcomp
"$subcommands"
1262 local remote_opts
="--username= --config-dir= --no-auth-cache"
1264 --follow-parent --authors-file= --repack=
1265 --no-metadata --use-svm-props --use-svnsync-props
1266 --log-window-size= --no-checkout --quiet
1267 --repack-flags --user-log-author $remote_opts
1270 --template= --shared= --trunk= --tags=
1271 --branches= --stdlayout --minimize-url
1272 --no-metadata --use-svm-props --use-svnsync-props
1273 --rewrite-root= $remote_opts
1276 --edit --rmdir --find-copies-harder --copy-similarity=
1279 local cur
="${COMP_WORDS[COMP_CWORD]}"
1280 case "$subcommand,$cur" in
1282 __gitcomp
"--revision= --fetch-all $fc_opts"
1285 __gitcomp
"--revision= $fc_opts $init_opts"
1288 __gitcomp
"$init_opts"
1292 --merge --strategy= --verbose --dry-run
1293 --fetch-all --no-rebase $cmt_opts $fc_opts
1297 __gitcomp
"--stdin $cmt_opts $fc_opts"
1299 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1301 __gitcomp
"--revision="
1305 --limit= --revision= --verbose --incremental
1306 --oneline --show-commit --non-recursive
1312 --merge --verbose --strategy= --local
1313 --fetch-all $fc_opts
1317 __gitcomp
"--message= --file= --revision= $cmt_opts"
1332 while [ $c -lt $COMP_CWORD ]; do
1333 i
="${COMP_WORDS[c]}"
1336 __gitcomp
"$(__git_tags)"
1346 case "${COMP_WORDS[COMP_CWORD-1]}" in
1352 __gitcomp
"$(__git_tags)"
1358 __gitcomp
"$(__git_refs)"
1365 local i c
=1 command __git_dir
1367 while [ $c -lt $COMP_CWORD ]; do
1368 i
="${COMP_WORDS[c]}"
1370 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1371 --bare) __git_dir
="." ;;
1372 --version|
--help|
-p|
--paginate) ;;
1373 *) command="$i"; break ;;
1378 if [ -z "$command" ]; then
1379 case "${COMP_WORDS[COMP_CWORD]}" in
1380 --*=*) COMPREPLY
=() ;;
1392 *) __gitcomp
"$(__git_commands) $(__git_aliases)" ;;
1397 local expansion
=$
(__git_aliased_command
"$command")
1398 [ "$expansion" ] && command="$expansion"
1403 apply
) _git_apply
;;
1404 bisect
) _git_bisect
;;
1405 bundle
) _git_bundle
;;
1406 branch
) _git_branch
;;
1407 checkout
) _git_checkout
;;
1408 cherry
) _git_cherry
;;
1409 cherry-pick
) _git_cherry_pick
;;
1410 commit
) _git_commit
;;
1411 config
) _git_config
;;
1412 describe
) _git_describe
;;
1414 fetch
) _git_fetch
;;
1415 format-patch
) _git_format_patch
;;
1418 ls-remote
) _git_ls_remote
;;
1419 ls-tree
) _git_ls_tree
;;
1421 merge-base
) _git_merge_base
;;
1422 name-rev
) _git_name_rev
;;
1425 rebase
) _git_rebase
;;
1426 remote
) _git_remote
;;
1427 reset) _git_reset
;;
1428 send-email
) _git_send_email
;;
1429 shortlog
) _git_shortlog
;;
1431 show-branch
) _git_log
;;
1432 stash
) _git_stash
;;
1433 submodule
) _git_submodule
;;
1436 whatchanged
) _git_log
;;
1443 __git_has_doubledash
&& return
1445 local cur
="${COMP_WORDS[COMP_CWORD]}"
1446 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1448 if [ -f $g/MERGE_HEAD
]; then
1453 __gitcomp
"--not --all $merge"
1457 __git_complete_revlist
1460 complete
-o default
-o nospace
-F _git git
1461 complete
-o default
-o nospace
-F _gitk gitk
1463 # The following are necessary only for Cygwin, and only are needed
1464 # when the user has tab-completed the executable name and consequently
1465 # included the '.exe' suffix.
1467 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1468 complete
-o default
-o nospace
-F _git git.exe