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 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
161 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
162 case "$is_hash,$i" in
165 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
166 n
,*) is_hash
=y
; echo "$i" ;;
173 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
174 if [ -d "$dir" ]; then
175 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
179 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
180 case "$is_hash,$i" in
183 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
184 n
,*) is_hash
=y
; echo "$i" ;;
191 local i is_hash
=y dir
="$(__gitdir "$1")"
192 local cur
="${COMP_WORDS[COMP_CWORD]}" format refs
193 if [ -d "$dir" ]; then
200 if [ -e "$dir/HEAD" ]; then echo HEAD
; fi
201 format
="refname:short"
202 refs
="refs/tags refs/heads refs/remotes"
205 git
--git-dir="$dir" for-each-ref
--format="%($format)" \
209 for i
in $
(git ls-remote
"$dir" 2>/dev
/null
); do
210 case "$is_hash,$i" in
213 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
214 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
215 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
216 n
,*) is_hash
=y
; echo "$i" ;;
224 for i
in $
(__git_refs
"$1"); do
229 __git_refs_remotes
()
231 local cmd i is_hash
=y
232 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
233 case "$is_hash,$i" in
236 echo "$i:refs/remotes/$1/${i#refs/heads/}"
240 n
,refs
/tags
/*) is_hash
=y
;;
248 local i ngoff IFS
=$
'\n' d
="$(__gitdir)"
249 shopt -q nullglob || ngoff
=1
251 for i
in "$d/remotes"/*; do
252 echo ${i#$d/remotes/}
254 [ "$ngoff" ] && shopt -u nullglob
255 for i
in $
(git
--git-dir="$d" config
--list); do
265 __git_merge_strategies
()
267 if [ -n "$__git_merge_strategylist" ]; then
268 echo "$__git_merge_strategylist"
271 git merge
-s help 2>&1 |
272 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
280 __git_merge_strategylist
=
281 __git_merge_strategylist
=$
(__git_merge_strategies
2>/dev
/null
)
283 __git_complete_file
()
285 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
302 case "$COMP_WORDBREAKS" in
304 *) pfx
="$ref:$pfx" ;;
308 COMPREPLY
=($
(compgen
-P "$pfx" \
309 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
310 | sed '/^100... blob /{
326 __gitcomp
"$(__git_refs)"
331 __git_complete_revlist
()
333 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
338 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
343 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
346 __gitcomp
"$(__git_refs)"
351 __git_all_commands
()
353 if [ -n "$__git_all_commandlist" ]; then
354 echo "$__git_all_commandlist"
358 for i
in $
(git
help -a|
egrep '^ ')
361 *--*) : helper pattern
;;
366 __git_all_commandlist
=
367 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
369 __git_porcelain_commands
()
371 if [ -n "$__git_porcelain_commandlist" ]; then
372 echo "$__git_porcelain_commandlist"
376 for i
in "help" $
(__git_all_commands
)
379 *--*) : helper pattern
;;
380 applymbox
) : ask gittus
;;
381 applypatch
) : ask gittus
;;
382 archimport
) : import
;;
383 cat-file
) : plumbing
;;
384 check-attr
) : plumbing
;;
385 check-ref-format
) : plumbing
;;
386 checkout-index
) : plumbing
;;
387 commit-tree
) : plumbing
;;
388 count-objects
) : infrequent
;;
389 cvsexportcommit
) : export;;
390 cvsimport
) : import
;;
391 cvsserver
) : daemon
;;
393 diff-files
) : plumbing
;;
394 diff-index
) : plumbing
;;
395 diff-tree
) : plumbing
;;
396 fast-import
) : import
;;
397 fast-export
) : export;;
398 fsck-objects
) : plumbing
;;
399 fetch-pack
) : plumbing
;;
400 fmt-merge-msg
) : plumbing
;;
401 for-each-ref
) : plumbing
;;
402 hash-object
) : plumbing
;;
403 http-
*) : transport
;;
404 index-pack
) : plumbing
;;
405 init-db
) : deprecated
;;
406 local-fetch
) : plumbing
;;
407 lost-found
) : infrequent
;;
408 ls-files
) : plumbing
;;
409 ls-remote
) : plumbing
;;
410 ls-tree
) : plumbing
;;
411 mailinfo
) : plumbing
;;
412 mailsplit
) : plumbing
;;
413 merge-
*) : plumbing
;;
416 pack-objects
) : plumbing
;;
417 pack-redundant
) : plumbing
;;
418 pack-refs
) : plumbing
;;
419 parse-remote
) : plumbing
;;
420 patch-id
) : plumbing
;;
421 peek-remote
) : plumbing
;;
423 prune-packed
) : plumbing
;;
424 quiltimport
) : import
;;
425 read-tree
) : plumbing
;;
426 receive-pack
) : plumbing
;;
428 repo-config
) : deprecated
;;
430 rev-list
) : plumbing
;;
431 rev-parse
) : plumbing
;;
432 runstatus
) : plumbing
;;
433 sh-setup
) : internal
;;
435 show-ref
) : plumbing
;;
436 send-pack
) : plumbing
;;
437 show-index
) : plumbing
;;
439 stripspace
) : plumbing
;;
440 symbolic-ref
) : plumbing
;;
441 tar-tree
) : deprecated
;;
442 unpack-file
) : plumbing
;;
443 unpack-objects
) : plumbing
;;
444 update-index
) : plumbing
;;
445 update-ref
) : plumbing
;;
446 update-server-info
) : daemon
;;
447 upload-archive
) : plumbing
;;
448 upload-pack
) : plumbing
;;
449 write-tree
) : plumbing
;;
451 verify-pack
) : infrequent
;;
452 verify-tag
) : plumbing
;;
457 __git_porcelain_commandlist
=
458 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
463 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
473 __git_aliased_command
()
475 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
476 config
--get "alias.$1")
477 for word
in $cmdline; do
478 if [ "${word##-*}" ]; then
485 __git_find_subcommand
()
487 local word subcommand c
=1
489 while [ $c -lt $COMP_CWORD ]; do
490 word
="${COMP_WORDS[c]}"
491 for subcommand
in $1; do
492 if [ "$subcommand" = "$word" ]; then
501 __git_has_doubledash
()
504 while [ $c -lt $COMP_CWORD ]; do
505 if [ "--" = "${COMP_WORDS[c]}" ]; then
513 __git_whitespacelist
="nowarn warn error error-all fix"
517 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
518 if [ -d "$dir"/rebase-apply
]; then
519 __gitcomp
"--skip --resolved --abort"
524 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
529 --signoff --utf8 --binary --3way --interactive
539 local cur
="${COMP_WORDS[COMP_CWORD]}"
542 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
547 --stat --numstat --summary --check --index
548 --cached --index-info --reverse --reject --unidiff-zero
549 --apply --no-add --exclude=
550 --whitespace= --inaccurate-eof --verbose
559 __git_has_doubledash
&& return
561 local cur
="${COMP_WORDS[COMP_CWORD]}"
565 --interactive --refresh --patch --update --dry-run
575 local cur
="${COMP_WORDS[COMP_CWORD]}"
578 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
582 __gitcomp
"$(__git_remotes)" "" "${cur##--remote=}"
587 --format= --list --verbose
588 --prefix= --remote= --exec=
598 __git_has_doubledash
&& return
600 local subcommands
="start bad good skip reset visualize replay log run"
601 local subcommand
="$(__git_find_subcommand "$subcommands")"
602 if [ -z "$subcommand" ]; then
603 __gitcomp
"$subcommands"
607 case "$subcommand" in
609 __gitcomp
"$(__git_refs)"
619 local i c
=1 only_local_ref
="n" has_r
="n"
621 while [ $c -lt $COMP_CWORD ]; do
624 -d|
-m) only_local_ref
="y" ;;
630 case "${COMP_WORDS[COMP_CWORD]}" in
631 --*=*) COMPREPLY
=() ;;
634 --color --no-color --verbose --abbrev= --no-abbrev
635 --track --no-track --contains --merged --no-merged
639 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
640 __gitcomp
"$(__git_heads)"
642 __gitcomp
"$(__git_refs)"
650 local cmd
="${COMP_WORDS[2]}"
651 case "$COMP_CWORD" in
653 __gitcomp
"create list-heads verify unbundle"
661 __git_complete_revlist
670 __git_has_doubledash
&& return
672 __gitcomp
"$(__git_refs)"
677 __gitcomp
"$(__git_refs)"
682 local cur
="${COMP_WORDS[COMP_CWORD]}"
685 __gitcomp
"--edit --no-commit"
688 __gitcomp
"$(__git_refs)"
695 __git_has_doubledash
&& return
697 local cur
="${COMP_WORDS[COMP_CWORD]}"
700 __gitcomp
"--dry-run --quiet"
709 local cur
="${COMP_WORDS[COMP_CWORD]}"
734 __git_has_doubledash
&& return
736 local cur
="${COMP_WORDS[COMP_CWORD]}"
740 --all --author= --signoff --verify --no-verify
741 --edit --amend --include --only --interactive
750 local cur
="${COMP_WORDS[COMP_CWORD]}"
754 --all --tags --contains --abbrev= --candidates=
755 --exact-match --debug --long --match --always
759 __gitcomp
"$(__git_refs)"
764 __git_has_doubledash
&& return
766 local cur
="${COMP_WORDS[COMP_CWORD]}"
769 __gitcomp
"--cached --stat --numstat --shortstat --summary
770 --patch-with-stat --name-only --name-status --color
771 --no-color --color-words --no-renames --check
772 --full-index --binary --abbrev --diff-filter=
773 --find-copies-harder --pickaxe-all --pickaxe-regex
774 --text --ignore-space-at-eol --ignore-space-change
775 --ignore-all-space --exit-code --quiet --ext-diff
777 --no-prefix --src-prefix= --dst-prefix=
778 --base --ours --theirs
788 local cur
="${COMP_WORDS[COMP_CWORD]}"
790 if [ "$COMP_CWORD" = 2 ]; then
791 __gitcomp
"$(__git_remotes)"
796 case "$COMP_WORDBREAKS" in
798 *) pfx
="${cur%%:*}:" ;;
800 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
803 __gitcomp
"$(__git_refs2 "${COMP_WORDS[2]}")"
811 local cur
="${COMP_WORDS[COMP_CWORD]}"
815 --stdout --attach --thread
817 --numbered --start-number
822 --full-index --binary
825 --no-prefix --src-prefix= --dst-prefix=
830 __git_complete_revlist
835 local cur
="${COMP_WORDS[COMP_CWORD]}"
838 __gitcomp
"--prune --aggressive"
847 __git_has_doubledash
&& return
849 local cur
="${COMP_WORDS[COMP_CWORD]}"
854 --text --ignore-case --word-regexp --invert-match
856 --extended-regexp --basic-regexp --fixed-strings
857 --files-with-matches --name-only
858 --files-without-match
860 --and --or --not --all-match
870 local cur
="${COMP_WORDS[COMP_CWORD]}"
873 __gitcomp
"--all --info --man --web"
877 __gitcomp
"$(__git_all_commands)
878 attributes cli core-tutorial cvs-migration
879 diffcore gitk glossary hooks ignore modules
880 repository-layout tutorial tutorial-2
887 local cur
="${COMP_WORDS[COMP_CWORD]}"
891 false true umask group all world everybody
892 " "" "${cur##--shared=}"
896 __gitcomp
"--quiet --bare --template= --shared --shared="
905 __git_has_doubledash
&& return
907 local cur
="${COMP_WORDS[COMP_CWORD]}"
910 __gitcomp
"--cached --deleted --modified --others --ignored
911 --stage --directory --no-empty-directory --unmerged
912 --killed --exclude= --exclude-from=
913 --exclude-per-directory= --exclude-standard
914 --error-unmatch --with-tree= --full-name
915 --abbrev --ignored --exclude-per-directory
925 __gitcomp
"$(__git_remotes)"
935 __git_has_doubledash
&& return
937 local cur
="${COMP_WORDS[COMP_CWORD]}"
938 local g
="$(git rev-parse --git-dir 2>/dev/null)"
940 if [ -f "$g/MERGE_HEAD" ]; then
946 oneline short medium full fuller email raw
947 " "" "${cur##--pretty=}"
952 relative iso8601 rfc2822 short local default
953 " "" "${cur##--date=}"
958 --max-count= --max-age= --since= --after=
959 --min-age= --before= --until=
960 --root --topo-order --date-order --reverse
962 --abbrev-commit --abbrev=
963 --relative-date --date=
964 --author= --committer= --grep=
966 --pretty= --name-status --name-only --raw
968 --left-right --cherry-pick
970 --stat --numstat --shortstat
971 --decorate --diff-filter=
972 --color-words --walk-reflogs
973 --parents --children --full-history
979 __git_complete_revlist
984 local cur
="${COMP_WORDS[COMP_CWORD]}"
985 case "${COMP_WORDS[COMP_CWORD-1]}" in
987 __gitcomp
"$(__git_merge_strategies)"
992 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
997 --no-commit --no-stat --log --no-log --squash --strategy
1001 __gitcomp
"$(__git_refs)"
1006 local cur
="${COMP_WORDS[COMP_CWORD]}"
1010 kdiff3 tkdiff meld xxdiff emerge
1011 vimdiff gvimdiff ecmerge opendiff
1012 " "" "${cur##--tool=}"
1025 __gitcomp
"$(__git_refs)"
1030 local cur
="${COMP_WORDS[COMP_CWORD]}"
1033 __gitcomp
"--dry-run"
1042 __gitcomp
"--tags --all --stdin"
1047 local cur
="${COMP_WORDS[COMP_CWORD]}"
1049 if [ "$COMP_CWORD" = 2 ]; then
1050 __gitcomp
"$(__git_remotes)"
1052 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")"
1058 local cur
="${COMP_WORDS[COMP_CWORD]}"
1060 if [ "$COMP_CWORD" = 2 ]; then
1061 __gitcomp
"$(__git_remotes)"
1066 case "$COMP_WORDBREAKS" in
1068 *) pfx
="${cur%%:*}:" ;;
1071 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1074 __gitcomp
"$(__git_refs)" + "${cur#+}"
1077 __gitcomp
"$(__git_refs)"
1085 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1086 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1087 __gitcomp
"--continue --skip --abort"
1090 case "${COMP_WORDS[COMP_CWORD-1]}" in
1092 __gitcomp
"$(__git_merge_strategies)"
1097 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1101 __gitcomp
"--onto --merge --strategy --interactive"
1104 __gitcomp
"$(__git_refs)"
1109 local cur
="${COMP_WORDS[COMP_CWORD]}"
1112 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1113 --dry-run --envelope-sender --from --identity
1114 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1115 --no-suppress-from --no-thread --quiet
1116 --signed-off-by-cc --smtp-pass --smtp-server
1117 --smtp-server-port --smtp-ssl --smtp-user --subject
1118 --suppress-cc --suppress-from --thread --to
1119 --validate --no-validate"
1128 local cur
="${COMP_WORDS[COMP_CWORD]}"
1129 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1132 __gitcomp
"$(__git_remotes)"
1136 __gitcomp
"$(__git_refs)"
1140 local remote
="${prv#remote.}"
1141 remote
="${remote%.fetch}"
1142 __gitcomp
"$(__git_refs_remotes "$remote")"
1146 local remote
="${prv#remote.}"
1147 remote
="${remote%.push}"
1148 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1149 for-each-ref --format='%(refname):%(refname)' \
1153 pull.twohead|pull.octopus
)
1154 __gitcomp
"$(__git_merge_strategies)"
1157 color.branch|color.
diff|color.status
)
1158 __gitcomp
"always never auto"
1163 normal black red green yellow blue magenta cyan white
1164 bold dim ul blink reverse
1176 --global --system --file=
1177 --list --replace-all
1178 --get --get-all --get-regexp
1179 --add --unset --unset-all
1180 --remove-section --rename-section
1185 local pfx
="${cur%.*}."
1187 __gitcomp
"remote merge mergeoptions" "$pfx" "$cur"
1191 local pfx
="${cur%.*}."
1193 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1197 local pfx
="${cur%.*}."
1200 url proxy fetch push mirror skipDefaultUpdate
1201 receivepack uploadpack tagopt
1206 local pfx
="${cur%.*}."
1208 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1214 branch.autosetupmerge
1215 branch.autosetuprebase
1218 color.branch.current
1229 color.diff.whitespace
1231 color.interactive.header
1232 color.interactive.help
1233 color.interactive.prompt
1237 color.status.changed
1239 color.status.nobranch
1240 color.status.untracked
1241 color.status.updated
1247 core.deltaBaseCacheLimit
1251 core.fsyncobjectfiles
1253 core.ignoreCygwinFSTricks
1255 core.logAllRefUpdates
1256 core.loosecompression
1258 core.packedGitWindowSize
1260 core.preferSymlinkRefs
1263 core.repositoryFormatVersion
1265 core.sharedRepository
1268 core.warnAmbiguousRefs
1271 diff.autorefreshindex
1288 gc.reflogexpireunreachable
1292 gitcvs.dbTableNamePrefix
1302 gui.copyblamethreshold
1306 gui.matchtrackingbranch
1307 gui.newbranchtemplate
1308 gui.pruneduringfetch
1309 gui.spellingdictionary
1325 i18n.logOutputEncoding
1340 mergetool.keepBackup
1342 pack.deltaCacheLimit
1352 receive.denyCurrentBranch
1354 receive.denyNonFastForwards
1357 repack.usedeltabaseoffset
1361 status.relativePaths
1362 status.showUntrackedFiles
1364 transfer.unpackLimit
1375 local subcommands
="add rm show prune update"
1376 local subcommand
="$(__git_find_subcommand "$subcommands")"
1377 if [ -z "$subcommand" ]; then
1378 __gitcomp
"$subcommands"
1382 case "$subcommand" in
1384 __gitcomp
"$(__git_remotes)"
1387 local i c
='' IFS
=$
'\n'
1388 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1406 __git_has_doubledash
&& return
1408 local cur
="${COMP_WORDS[COMP_CWORD]}"
1411 __gitcomp
"--mixed --hard --soft"
1415 __gitcomp
"$(__git_refs)"
1420 local cur
="${COMP_WORDS[COMP_CWORD]}"
1423 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1427 __gitcomp
"$(__git_refs)"
1432 __git_has_doubledash
&& return
1434 local cur
="${COMP_WORDS[COMP_CWORD]}"
1437 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1446 __git_has_doubledash
&& return
1448 local cur
="${COMP_WORDS[COMP_CWORD]}"
1452 --max-count= --max-age= --since= --after=
1453 --min-age= --before= --until=
1455 --author= --committer= --grep=
1458 --numbered --summary
1463 __git_complete_revlist
1468 __git_has_doubledash
&& return
1470 local cur
="${COMP_WORDS[COMP_CWORD]}"
1474 oneline short medium full fuller email raw
1475 " "" "${cur##--pretty=}"
1479 __gitcomp
"--pretty="
1488 local cur
="${COMP_WORDS[COMP_CWORD]}"
1492 --all --remotes --topo-order --current --more=
1493 --list --independent --merge-base --no-name
1494 --sha1-name --topics --reflog
1499 __git_complete_revlist
1504 local subcommands
='save list show apply clear drop pop create branch'
1505 local subcommand
="$(__git_find_subcommand "$subcommands")"
1506 if [ -z "$subcommand" ]; then
1507 __gitcomp
"$subcommands"
1509 local cur
="${COMP_WORDS[COMP_CWORD]}"
1510 case "$subcommand,$cur" in
1512 __gitcomp
"--keep-index"
1517 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1520 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1521 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1522 | sed -n -e 's/:.*//p')"
1533 __git_has_doubledash
&& return
1535 local subcommands
="add status init update summary foreach sync"
1536 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1537 local cur
="${COMP_WORDS[COMP_CWORD]}"
1540 __gitcomp
"--quiet --cached"
1543 __gitcomp
"$subcommands"
1553 init fetch clone rebase dcommit log find-rev
1554 set-tree commit-diff info create-ignore propget
1555 proplist show-ignore show-externals
1557 local subcommand
="$(__git_find_subcommand "$subcommands")"
1558 if [ -z "$subcommand" ]; then
1559 __gitcomp
"$subcommands"
1561 local remote_opts
="--username= --config-dir= --no-auth-cache"
1563 --follow-parent --authors-file= --repack=
1564 --no-metadata --use-svm-props --use-svnsync-props
1565 --log-window-size= --no-checkout --quiet
1566 --repack-flags --user-log-author $remote_opts
1569 --template= --shared= --trunk= --tags=
1570 --branches= --stdlayout --minimize-url
1571 --no-metadata --use-svm-props --use-svnsync-props
1572 --rewrite-root= $remote_opts
1575 --edit --rmdir --find-copies-harder --copy-similarity=
1578 local cur
="${COMP_WORDS[COMP_CWORD]}"
1579 case "$subcommand,$cur" in
1581 __gitcomp
"--revision= --fetch-all $fc_opts"
1584 __gitcomp
"--revision= $fc_opts $init_opts"
1587 __gitcomp
"$init_opts"
1591 --merge --strategy= --verbose --dry-run
1592 --fetch-all --no-rebase $cmt_opts $fc_opts
1596 __gitcomp
"--stdin $cmt_opts $fc_opts"
1598 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1600 __gitcomp
"--revision="
1604 --limit= --revision= --verbose --incremental
1605 --oneline --show-commit --non-recursive
1611 --merge --verbose --strategy= --local
1612 --fetch-all $fc_opts
1616 __gitcomp
"--message= --file= --revision= $cmt_opts"
1631 while [ $c -lt $COMP_CWORD ]; do
1632 i
="${COMP_WORDS[c]}"
1635 __gitcomp
"$(__git_tags)"
1645 case "${COMP_WORDS[COMP_CWORD-1]}" in
1651 __gitcomp
"$(__git_tags)"
1657 __gitcomp
"$(__git_refs)"
1664 local i c
=1 command __git_dir
1666 while [ $c -lt $COMP_CWORD ]; do
1667 i
="${COMP_WORDS[c]}"
1669 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1670 --bare) __git_dir
="." ;;
1671 --version|
-p|
--paginate) ;;
1672 --help) command="help"; break ;;
1673 *) command="$i"; break ;;
1678 if [ -z "$command" ]; then
1679 case "${COMP_WORDS[COMP_CWORD]}" in
1680 --*=*) COMPREPLY
=() ;;
1692 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1697 local expansion
=$
(__git_aliased_command
"$command")
1698 [ "$expansion" ] && command="$expansion"
1703 apply
) _git_apply
;;
1704 archive
) _git_archive
;;
1705 bisect
) _git_bisect
;;
1706 bundle
) _git_bundle
;;
1707 branch
) _git_branch
;;
1708 checkout
) _git_checkout
;;
1709 cherry
) _git_cherry
;;
1710 cherry-pick
) _git_cherry_pick
;;
1711 clean
) _git_clean
;;
1712 clone
) _git_clone
;;
1713 commit
) _git_commit
;;
1714 config
) _git_config
;;
1715 describe
) _git_describe
;;
1717 fetch
) _git_fetch
;;
1718 format-patch
) _git_format_patch
;;
1724 ls-files
) _git_ls_files
;;
1725 ls-remote
) _git_ls_remote
;;
1726 ls-tree
) _git_ls_tree
;;
1728 mergetool
) _git_mergetool
;;
1729 merge-base
) _git_merge_base
;;
1731 name-rev
) _git_name_rev
;;
1734 rebase
) _git_rebase
;;
1735 remote
) _git_remote
;;
1736 reset) _git_reset
;;
1737 revert
) _git_revert
;;
1739 send-email
) _git_send_email
;;
1740 shortlog
) _git_shortlog
;;
1742 show-branch
) _git_show_branch
;;
1743 stash
) _git_stash
;;
1744 submodule
) _git_submodule
;;
1747 whatchanged
) _git_log
;;
1754 __git_has_doubledash
&& return
1756 local cur
="${COMP_WORDS[COMP_CWORD]}"
1757 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1759 if [ -f "$g/MERGE_HEAD" ]; then
1764 __gitcomp
"--not --all $merge"
1768 __git_complete_revlist
1771 complete
-o default
-o nospace
-F _git git
1772 complete
-o default
-o nospace
-F _gitk gitk
1774 # The following are necessary only for Cygwin, and only are needed
1775 # when the user has tab-completed the executable name and consequently
1776 # included the '.exe' suffix.
1778 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1779 complete
-o default
-o nospace
-F _git git.exe