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 git merge
-s help 2>&1 |
275 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
283 __git_merge_strategylist
=
284 __git_merge_strategylist
=$
(__git_merge_strategies
2>/dev
/null
)
286 __git_complete_file
()
288 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
305 case "$COMP_WORDBREAKS" in
307 *) pfx
="$ref:$pfx" ;;
311 COMPREPLY
=($
(compgen
-P "$pfx" \
312 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
313 | sed '/^100... blob /{
329 __gitcomp
"$(__git_refs)"
334 __git_complete_revlist
()
336 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
341 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
346 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
349 __gitcomp
"$(__git_refs)"
354 __git_all_commands
()
356 if [ -n "$__git_all_commandlist" ]; then
357 echo "$__git_all_commandlist"
361 for i
in $
(git
help -a|
egrep '^ ')
364 *--*) : helper pattern
;;
369 __git_all_commandlist
=
370 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
372 __git_porcelain_commands
()
374 if [ -n "$__git_porcelain_commandlist" ]; then
375 echo "$__git_porcelain_commandlist"
379 for i
in "help" $
(__git_all_commands
)
382 *--*) : helper pattern
;;
383 applymbox
) : ask gittus
;;
384 applypatch
) : ask gittus
;;
385 archimport
) : import
;;
386 cat-file
) : plumbing
;;
387 check-attr
) : plumbing
;;
388 check-ref-format
) : plumbing
;;
389 checkout-index
) : plumbing
;;
390 commit-tree
) : plumbing
;;
391 count-objects
) : infrequent
;;
392 cvsexportcommit
) : export;;
393 cvsimport
) : import
;;
394 cvsserver
) : daemon
;;
396 diff-files
) : plumbing
;;
397 diff-index
) : plumbing
;;
398 diff-tree
) : plumbing
;;
399 fast-import
) : import
;;
400 fast-export
) : export;;
401 fsck-objects
) : plumbing
;;
402 fetch-pack
) : plumbing
;;
403 fmt-merge-msg
) : plumbing
;;
404 for-each-ref
) : plumbing
;;
405 hash-object
) : plumbing
;;
406 http-
*) : transport
;;
407 index-pack
) : plumbing
;;
408 init-db
) : deprecated
;;
409 local-fetch
) : plumbing
;;
410 lost-found
) : infrequent
;;
411 ls-files
) : plumbing
;;
412 ls-remote
) : plumbing
;;
413 ls-tree
) : plumbing
;;
414 mailinfo
) : plumbing
;;
415 mailsplit
) : plumbing
;;
416 merge-
*) : plumbing
;;
419 pack-objects
) : plumbing
;;
420 pack-redundant
) : plumbing
;;
421 pack-refs
) : plumbing
;;
422 parse-remote
) : plumbing
;;
423 patch-id
) : plumbing
;;
424 peek-remote
) : plumbing
;;
426 prune-packed
) : plumbing
;;
427 quiltimport
) : import
;;
428 read-tree
) : plumbing
;;
429 receive-pack
) : plumbing
;;
431 repo-config
) : deprecated
;;
433 rev-list
) : plumbing
;;
434 rev-parse
) : plumbing
;;
435 runstatus
) : plumbing
;;
436 sh-setup
) : internal
;;
438 show-ref
) : plumbing
;;
439 send-pack
) : plumbing
;;
440 show-index
) : plumbing
;;
442 stripspace
) : plumbing
;;
443 symbolic-ref
) : plumbing
;;
444 tar-tree
) : deprecated
;;
445 unpack-file
) : plumbing
;;
446 unpack-objects
) : plumbing
;;
447 update-index
) : plumbing
;;
448 update-ref
) : plumbing
;;
449 update-server-info
) : daemon
;;
450 upload-archive
) : plumbing
;;
451 upload-pack
) : plumbing
;;
452 write-tree
) : plumbing
;;
454 verify-pack
) : infrequent
;;
455 verify-tag
) : plumbing
;;
460 __git_porcelain_commandlist
=
461 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
466 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
476 __git_aliased_command
()
478 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
479 config
--get "alias.$1")
480 for word
in $cmdline; do
481 if [ "${word##-*}" ]; then
488 __git_find_subcommand
()
490 local word subcommand c
=1
492 while [ $c -lt $COMP_CWORD ]; do
493 word
="${COMP_WORDS[c]}"
494 for subcommand
in $1; do
495 if [ "$subcommand" = "$word" ]; then
504 __git_has_doubledash
()
507 while [ $c -lt $COMP_CWORD ]; do
508 if [ "--" = "${COMP_WORDS[c]}" ]; then
516 __git_whitespacelist
="nowarn warn error error-all fix"
520 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
521 if [ -d "$dir"/rebase-apply
]; then
522 __gitcomp
"--skip --resolved --abort"
527 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
532 --signoff --utf8 --binary --3way --interactive
542 local cur
="${COMP_WORDS[COMP_CWORD]}"
545 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
550 --stat --numstat --summary --check --index
551 --cached --index-info --reverse --reject --unidiff-zero
552 --apply --no-add --exclude=
553 --whitespace= --inaccurate-eof --verbose
562 __git_has_doubledash
&& return
564 local cur
="${COMP_WORDS[COMP_CWORD]}"
568 --interactive --refresh --patch --update --dry-run
578 local cur
="${COMP_WORDS[COMP_CWORD]}"
581 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
585 __gitcomp
"$(__git_remotes)" "" "${cur##--remote=}"
590 --format= --list --verbose
591 --prefix= --remote= --exec=
601 __git_has_doubledash
&& return
603 local subcommands
="start bad good skip reset visualize replay log run"
604 local subcommand
="$(__git_find_subcommand "$subcommands")"
605 if [ -z "$subcommand" ]; then
606 __gitcomp
"$subcommands"
610 case "$subcommand" in
612 __gitcomp
"$(__git_refs)"
622 local i c
=1 only_local_ref
="n" has_r
="n"
624 while [ $c -lt $COMP_CWORD ]; do
627 -d|
-m) only_local_ref
="y" ;;
633 case "${COMP_WORDS[COMP_CWORD]}" in
634 --*=*) COMPREPLY
=() ;;
637 --color --no-color --verbose --abbrev= --no-abbrev
638 --track --no-track --contains --merged --no-merged
642 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
643 __gitcomp
"$(__git_heads)"
645 __gitcomp
"$(__git_refs)"
653 local cmd
="${COMP_WORDS[2]}"
654 case "$COMP_CWORD" in
656 __gitcomp
"create list-heads verify unbundle"
664 __git_complete_revlist
673 __git_has_doubledash
&& return
675 __gitcomp
"$(__git_refs)"
680 __gitcomp
"$(__git_refs)"
685 local cur
="${COMP_WORDS[COMP_CWORD]}"
688 __gitcomp
"--edit --no-commit"
691 __gitcomp
"$(__git_refs)"
698 __git_has_doubledash
&& return
700 local cur
="${COMP_WORDS[COMP_CWORD]}"
703 __gitcomp
"--dry-run --quiet"
712 local cur
="${COMP_WORDS[COMP_CWORD]}"
737 __git_has_doubledash
&& return
739 local cur
="${COMP_WORDS[COMP_CWORD]}"
743 --all --author= --signoff --verify --no-verify
744 --edit --amend --include --only --interactive
753 local cur
="${COMP_WORDS[COMP_CWORD]}"
757 --all --tags --contains --abbrev= --candidates=
758 --exact-match --debug --long --match --always
762 __gitcomp
"$(__git_refs)"
767 __git_has_doubledash
&& return
769 local cur
="${COMP_WORDS[COMP_CWORD]}"
772 __gitcomp
"--cached --stat --numstat --shortstat --summary
773 --patch-with-stat --name-only --name-status --color
774 --no-color --color-words --no-renames --check
775 --full-index --binary --abbrev --diff-filter=
776 --find-copies-harder --pickaxe-all --pickaxe-regex
777 --text --ignore-space-at-eol --ignore-space-change
778 --ignore-all-space --exit-code --quiet --ext-diff
780 --no-prefix --src-prefix= --dst-prefix=
781 --base --ours --theirs
791 local cur
="${COMP_WORDS[COMP_CWORD]}"
793 if [ "$COMP_CWORD" = 2 ]; then
794 __gitcomp
"$(__git_remotes)"
799 case "$COMP_WORDBREAKS" in
801 *) pfx
="${cur%%:*}:" ;;
803 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
806 __gitcomp
"$(__git_refs2 "${COMP_WORDS[2]}")"
814 local cur
="${COMP_WORDS[COMP_CWORD]}"
818 --stdout --attach --thread
820 --numbered --start-number
825 --full-index --binary
828 --no-prefix --src-prefix= --dst-prefix=
833 __git_complete_revlist
838 local cur
="${COMP_WORDS[COMP_CWORD]}"
841 __gitcomp
"--prune --aggressive"
850 __git_has_doubledash
&& return
852 local cur
="${COMP_WORDS[COMP_CWORD]}"
857 --text --ignore-case --word-regexp --invert-match
859 --extended-regexp --basic-regexp --fixed-strings
860 --files-with-matches --name-only
861 --files-without-match
863 --and --or --not --all-match
873 local cur
="${COMP_WORDS[COMP_CWORD]}"
876 __gitcomp
"--all --info --man --web"
880 __gitcomp
"$(__git_all_commands)
881 attributes cli core-tutorial cvs-migration
882 diffcore gitk glossary hooks ignore modules
883 repository-layout tutorial tutorial-2
889 local cur
="${COMP_WORDS[COMP_CWORD]}"
893 false true umask group all world everybody
894 " "" "${cur##--shared=}"
898 __gitcomp
"--quiet --bare --template= --shared --shared="
907 __git_has_doubledash
&& return
909 local cur
="${COMP_WORDS[COMP_CWORD]}"
912 __gitcomp
"--cached --deleted --modified --others --ignored
913 --stage --directory --no-empty-directory --unmerged
914 --killed --exclude= --exclude-from=
915 --exclude-per-directory= --exclude-standard
916 --error-unmatch --with-tree= --full-name
917 --abbrev --ignored --exclude-per-directory
927 __gitcomp
"$(__git_remotes)"
937 __git_has_doubledash
&& return
939 local cur
="${COMP_WORDS[COMP_CWORD]}"
943 oneline short medium full fuller email raw
944 " "" "${cur##--pretty=}"
949 relative iso8601 rfc2822 short local default
950 " "" "${cur##--date=}"
955 --max-count= --max-age= --since= --after=
956 --min-age= --before= --until=
957 --root --topo-order --date-order --reverse
959 --abbrev-commit --abbrev=
960 --relative-date --date=
961 --author= --committer= --grep=
963 --pretty= --name-status --name-only --raw
965 --left-right --cherry-pick
967 --stat --numstat --shortstat
968 --decorate --diff-filter=
969 --color-words --walk-reflogs
970 --parents --children --full-history
976 __git_complete_revlist
981 local cur
="${COMP_WORDS[COMP_CWORD]}"
982 case "${COMP_WORDS[COMP_CWORD-1]}" in
984 __gitcomp
"$(__git_merge_strategies)"
989 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
994 --no-commit --no-stat --log --no-log --squash --strategy
998 __gitcomp
"$(__git_refs)"
1003 local cur
="${COMP_WORDS[COMP_CWORD]}"
1007 kdiff3 tkdiff meld xxdiff emerge
1008 vimdiff gvimdiff ecmerge opendiff
1009 " "" "${cur##--tool=}"
1022 __gitcomp
"$(__git_refs)"
1027 local cur
="${COMP_WORDS[COMP_CWORD]}"
1030 __gitcomp
"--dry-run"
1039 __gitcomp
"--tags --all --stdin"
1044 local cur
="${COMP_WORDS[COMP_CWORD]}"
1046 if [ "$COMP_CWORD" = 2 ]; then
1047 __gitcomp
"$(__git_remotes)"
1049 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")"
1055 local cur
="${COMP_WORDS[COMP_CWORD]}"
1057 if [ "$COMP_CWORD" = 2 ]; then
1058 __gitcomp
"$(__git_remotes)"
1063 case "$COMP_WORDBREAKS" in
1065 *) pfx
="${cur%%:*}:" ;;
1068 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1071 __gitcomp
"$(__git_refs)" + "${cur#+}"
1074 __gitcomp
"$(__git_refs)"
1082 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1083 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1084 __gitcomp
"--continue --skip --abort"
1087 case "${COMP_WORDS[COMP_CWORD-1]}" in
1089 __gitcomp
"$(__git_merge_strategies)"
1094 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1098 __gitcomp
"--onto --merge --strategy --interactive"
1101 __gitcomp
"$(__git_refs)"
1106 local cur
="${COMP_WORDS[COMP_CWORD]}"
1109 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1110 --dry-run --envelope-sender --from --identity
1111 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1112 --no-suppress-from --no-thread --quiet
1113 --signed-off-by-cc --smtp-pass --smtp-server
1114 --smtp-server-port --smtp-ssl --smtp-user --subject
1115 --suppress-cc --suppress-from --thread --to"
1124 local cur
="${COMP_WORDS[COMP_CWORD]}"
1125 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1128 __gitcomp
"$(__git_remotes)"
1132 __gitcomp
"$(__git_refs)"
1136 local remote
="${prv#remote.}"
1137 remote
="${remote%.fetch}"
1138 __gitcomp
"$(__git_refs_remotes "$remote")"
1142 local remote
="${prv#remote.}"
1143 remote
="${remote%.push}"
1144 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1145 for-each-ref --format='%(refname):%(refname)' \
1149 pull.twohead|pull.octopus
)
1150 __gitcomp
"$(__git_merge_strategies)"
1153 color.branch|color.
diff|color.status
)
1154 __gitcomp
"always never auto"
1159 black red green yellow blue magenta cyan white
1160 bold dim ul blink reverse
1172 --global --system --file=
1173 --list --replace-all
1174 --get --get-all --get-regexp
1175 --add --unset --unset-all
1176 --remove-section --rename-section
1181 local pfx
="${cur%.*}."
1183 __gitcomp
"remote merge" "$pfx" "$cur"
1187 local pfx
="${cur%.*}."
1189 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1193 local pfx
="${cur%.*}."
1196 url fetch push skipDefaultUpdate
1197 receivepack uploadpack tagopt
1202 local pfx
="${cur%.*}."
1204 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1213 core.preferSymlinkRefs
1214 core.logAllRefUpdates
1215 core.loosecompression
1216 core.repositoryFormatVersion
1217 core.sharedRepository
1218 core.warnAmbiguousRefs
1220 core.packedGitWindowSize
1224 color.branch.current
1235 color.diff.whitespace
1240 color.status.changed
1241 color.status.untracked
1246 format.subjectprefix
1250 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1251 gitcvs.dbtablenameprefix
1254 gc.reflogexpireunreachable
1267 i18n.logOutputEncoding
1277 pack.deltaCacheLimit
1280 repack.useDeltaBaseOffset
1283 transfer.unpackLimit
1285 receive.denyNonFastForwards
1295 local subcommands
="add rm show prune update"
1296 local subcommand
="$(__git_find_subcommand "$subcommands")"
1297 if [ -z "$subcommand" ]; then
1298 __gitcomp
"$subcommands"
1302 case "$subcommand" in
1304 __gitcomp
"$(__git_remotes)"
1307 local i c
='' IFS
=$
'\n'
1308 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1326 __git_has_doubledash
&& return
1328 local cur
="${COMP_WORDS[COMP_CWORD]}"
1331 __gitcomp
"--mixed --hard --soft"
1335 __gitcomp
"$(__git_refs)"
1340 local cur
="${COMP_WORDS[COMP_CWORD]}"
1343 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1347 __gitcomp
"$(__git_refs)"
1352 __git_has_doubledash
&& return
1354 local cur
="${COMP_WORDS[COMP_CWORD]}"
1357 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1366 __git_has_doubledash
&& return
1368 local cur
="${COMP_WORDS[COMP_CWORD]}"
1372 --max-count= --max-age= --since= --after=
1373 --min-age= --before= --until=
1375 --author= --committer= --grep=
1378 --numbered --summary
1383 __git_complete_revlist
1388 __git_has_doubledash
&& return
1390 local cur
="${COMP_WORDS[COMP_CWORD]}"
1394 oneline short medium full fuller email raw
1395 " "" "${cur##--pretty=}"
1399 __gitcomp
"--pretty="
1408 local cur
="${COMP_WORDS[COMP_CWORD]}"
1412 --all --remotes --topo-order --current --more=
1413 --list --independent --merge-base --no-name
1414 --sha1-name --topics --reflog
1419 __git_complete_revlist
1424 local subcommands
='save list show apply clear drop pop create branch'
1425 local subcommand
="$(__git_find_subcommand "$subcommands")"
1426 if [ -z "$subcommand" ]; then
1427 __gitcomp
"$subcommands"
1429 local cur
="${COMP_WORDS[COMP_CWORD]}"
1430 case "$subcommand,$cur" in
1432 __gitcomp
"--keep-index"
1437 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1440 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1441 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1442 | sed -n -e 's/:.*//p')"
1453 __git_has_doubledash
&& return
1455 local subcommands
="add status init update"
1456 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1457 local cur
="${COMP_WORDS[COMP_CWORD]}"
1460 __gitcomp
"--quiet --cached"
1463 __gitcomp
"$subcommands"
1473 init fetch clone rebase dcommit log find-rev
1474 set-tree commit-diff info create-ignore propget
1475 proplist show-ignore show-externals
1477 local subcommand
="$(__git_find_subcommand "$subcommands")"
1478 if [ -z "$subcommand" ]; then
1479 __gitcomp
"$subcommands"
1481 local remote_opts
="--username= --config-dir= --no-auth-cache"
1483 --follow-parent --authors-file= --repack=
1484 --no-metadata --use-svm-props --use-svnsync-props
1485 --log-window-size= --no-checkout --quiet
1486 --repack-flags --user-log-author $remote_opts
1489 --template= --shared= --trunk= --tags=
1490 --branches= --stdlayout --minimize-url
1491 --no-metadata --use-svm-props --use-svnsync-props
1492 --rewrite-root= $remote_opts
1495 --edit --rmdir --find-copies-harder --copy-similarity=
1498 local cur
="${COMP_WORDS[COMP_CWORD]}"
1499 case "$subcommand,$cur" in
1501 __gitcomp
"--revision= --fetch-all $fc_opts"
1504 __gitcomp
"--revision= $fc_opts $init_opts"
1507 __gitcomp
"$init_opts"
1511 --merge --strategy= --verbose --dry-run
1512 --fetch-all --no-rebase $cmt_opts $fc_opts
1516 __gitcomp
"--stdin $cmt_opts $fc_opts"
1518 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1520 __gitcomp
"--revision="
1524 --limit= --revision= --verbose --incremental
1525 --oneline --show-commit --non-recursive
1531 --merge --verbose --strategy= --local
1532 --fetch-all $fc_opts
1536 __gitcomp
"--message= --file= --revision= $cmt_opts"
1551 while [ $c -lt $COMP_CWORD ]; do
1552 i
="${COMP_WORDS[c]}"
1555 __gitcomp
"$(__git_tags)"
1565 case "${COMP_WORDS[COMP_CWORD-1]}" in
1571 __gitcomp
"$(__git_tags)"
1577 __gitcomp
"$(__git_refs)"
1584 local i c
=1 command __git_dir
1586 while [ $c -lt $COMP_CWORD ]; do
1587 i
="${COMP_WORDS[c]}"
1589 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1590 --bare) __git_dir
="." ;;
1591 --version|
-p|
--paginate) ;;
1592 --help) command="help"; break ;;
1593 *) command="$i"; break ;;
1598 if [ -z "$command" ]; then
1599 case "${COMP_WORDS[COMP_CWORD]}" in
1600 --*=*) COMPREPLY
=() ;;
1612 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1617 local expansion
=$
(__git_aliased_command
"$command")
1618 [ "$expansion" ] && command="$expansion"
1623 apply
) _git_apply
;;
1624 archive
) _git_archive
;;
1625 bisect
) _git_bisect
;;
1626 bundle
) _git_bundle
;;
1627 branch
) _git_branch
;;
1628 checkout
) _git_checkout
;;
1629 cherry
) _git_cherry
;;
1630 cherry-pick
) _git_cherry_pick
;;
1631 clean
) _git_clean
;;
1632 clone
) _git_clone
;;
1633 commit
) _git_commit
;;
1634 config
) _git_config
;;
1635 describe
) _git_describe
;;
1637 fetch
) _git_fetch
;;
1638 format-patch
) _git_format_patch
;;
1644 ls-files
) _git_ls_files
;;
1645 ls-remote
) _git_ls_remote
;;
1646 ls-tree
) _git_ls_tree
;;
1648 mergetool
) _git_mergetool
;;
1649 merge-base
) _git_merge_base
;;
1651 name-rev
) _git_name_rev
;;
1654 rebase
) _git_rebase
;;
1655 remote
) _git_remote
;;
1656 reset) _git_reset
;;
1657 revert
) _git_revert
;;
1659 send-email
) _git_send_email
;;
1660 shortlog
) _git_shortlog
;;
1662 show-branch
) _git_show_branch
;;
1663 stash
) _git_stash
;;
1664 submodule
) _git_submodule
;;
1667 whatchanged
) _git_log
;;
1674 __git_has_doubledash
&& return
1676 local cur
="${COMP_WORDS[COMP_CWORD]}"
1677 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1679 if [ -f $g/MERGE_HEAD
]; then
1684 __gitcomp
"--not --all $merge"
1688 __git_complete_revlist
1691 complete
-o default
-o nospace
-F _git git
1692 complete
-o default
-o nospace
-F _gitk gitk
1694 # The following are necessary only for Cygwin, and only are needed
1695 # when the user has tab-completed the executable name and consequently
1696 # included the '.exe' suffix.
1698 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1699 complete
-o default
-o nospace
-F _git git.exe