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)"
352 __git_all_commands
()
354 if [ -n "$__git_all_commandlist" ]; then
355 echo "$__git_all_commandlist"
359 for i
in $
(git
help -a|
egrep '^ ')
362 *--*) : helper pattern
;;
367 __git_all_commandlist
=
368 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
370 __git_porcelain_commands
()
372 if [ -n "$__git_porcelain_commandlist" ]; then
373 echo "$__git_porcelain_commandlist"
377 for i
in "help" $
(__git_all_commands
)
380 *--*) : helper pattern
;;
381 applymbox
) : ask gittus
;;
382 applypatch
) : ask gittus
;;
383 archimport
) : import
;;
384 cat-file
) : plumbing
;;
385 check-attr
) : plumbing
;;
386 check-ref-format
) : plumbing
;;
387 commit-tree
) : plumbing
;;
388 cvsexportcommit
) : export;;
389 cvsimport
) : import
;;
390 cvsserver
) : daemon
;;
392 diff-files
) : plumbing
;;
393 diff-index
) : plumbing
;;
394 diff-tree
) : plumbing
;;
395 fast-import
) : import
;;
396 fsck-objects
) : plumbing
;;
397 fetch-pack
) : plumbing
;;
398 fmt-merge-msg
) : plumbing
;;
399 for-each-ref
) : plumbing
;;
400 hash-object
) : plumbing
;;
401 http-
*) : transport
;;
402 index-pack
) : plumbing
;;
403 init-db
) : deprecated
;;
404 local-fetch
) : plumbing
;;
405 mailinfo
) : plumbing
;;
406 mailsplit
) : plumbing
;;
407 merge-
*) : plumbing
;;
410 pack-objects
) : plumbing
;;
411 pack-redundant
) : plumbing
;;
412 pack-refs
) : plumbing
;;
413 parse-remote
) : plumbing
;;
414 patch-id
) : plumbing
;;
415 peek-remote
) : plumbing
;;
417 prune-packed
) : plumbing
;;
418 quiltimport
) : import
;;
419 read-tree
) : plumbing
;;
420 receive-pack
) : plumbing
;;
422 repo-config
) : deprecated
;;
424 rev-list
) : plumbing
;;
425 rev-parse
) : plumbing
;;
426 runstatus
) : plumbing
;;
427 sh-setup
) : internal
;;
429 send-pack
) : plumbing
;;
430 show-index
) : plumbing
;;
432 stripspace
) : plumbing
;;
433 symbolic-ref
) : plumbing
;;
434 tar-tree
) : deprecated
;;
435 unpack-file
) : plumbing
;;
436 unpack-objects
) : plumbing
;;
437 update-index
) : plumbing
;;
438 update-ref
) : plumbing
;;
439 update-server-info
) : daemon
;;
440 upload-archive
) : plumbing
;;
441 upload-pack
) : plumbing
;;
442 write-tree
) : plumbing
;;
443 verify-tag
) : plumbing
;;
448 __git_porcelain_commandlist
=
449 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
454 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
464 __git_aliased_command
()
466 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
467 config
--get "alias.$1")
468 for word
in $cmdline; do
469 if [ "${word##-*}" ]; then
476 __git_find_subcommand
()
478 local word subcommand c
=1
480 while [ $c -lt $COMP_CWORD ]; do
481 word
="${COMP_WORDS[c]}"
482 for subcommand
in $1; do
483 if [ "$subcommand" = "$word" ]; then
492 __git_has_doubledash
()
495 while [ $c -lt $COMP_CWORD ]; do
496 if [ "--" = "${COMP_WORDS[c]}" ]; then
504 __git_whitespacelist
="nowarn warn error error-all strip"
508 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
509 if [ -d "$dir"/rebase-apply
]; then
510 __gitcomp
"--skip --resolved --abort"
515 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
520 --signoff --utf8 --binary --3way --interactive
530 local cur
="${COMP_WORDS[COMP_CWORD]}"
533 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
538 --stat --numstat --summary --check --index
539 --cached --index-info --reverse --reject --unidiff-zero
540 --apply --no-add --exclude=
541 --whitespace= --inaccurate-eof --verbose
550 __git_has_doubledash
&& return
552 local cur
="${COMP_WORDS[COMP_CWORD]}"
556 --interactive --refresh --patch --update --dry-run
566 __git_has_doubledash
&& return
568 local subcommands
="start bad good skip reset visualize replay log run"
569 local subcommand
="$(__git_find_subcommand "$subcommands")"
570 if [ -z "$subcommand" ]; then
571 __gitcomp
"$subcommands"
575 case "$subcommand" in
577 __gitcomp
"$(__git_refs)"
587 local i c
=1 only_local_ref
="n" has_r
="n"
589 while [ $c -lt $COMP_CWORD ]; do
592 -d|
-m) only_local_ref
="y" ;;
598 case "${COMP_WORDS[COMP_CWORD]}" in
599 --*=*) COMPREPLY
=() ;;
602 --color --no-color --verbose --abbrev= --no-abbrev
603 --track --no-track --contains --merged --no-merged
607 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
608 __gitcomp
"$(__git_heads)"
610 __gitcomp
"$(__git_refs)"
618 local mycword
="$COMP_CWORD"
619 case "${COMP_WORDS[0]}" in
621 local cmd
="${COMP_WORDS[2]}"
622 mycword
="$((mycword-1))"
625 local cmd
="${COMP_WORDS[1]}"
630 __gitcomp
"create list-heads verify unbundle"
638 __git_complete_revlist
647 __git_has_doubledash
&& return
649 __gitcomp
"$(__git_refs)"
654 __gitcomp
"$(__git_refs)"
659 local cur
="${COMP_WORDS[COMP_CWORD]}"
662 __gitcomp
"--edit --no-commit"
665 __gitcomp
"$(__git_refs)"
672 __git_has_doubledash
&& return
674 local cur
="${COMP_WORDS[COMP_CWORD]}"
677 __gitcomp
"--dry-run --quiet"
686 local cur
="${COMP_WORDS[COMP_CWORD]}"
711 __git_has_doubledash
&& return
713 local cur
="${COMP_WORDS[COMP_CWORD]}"
717 --all --author= --signoff --verify --no-verify
718 --edit --amend --include --only
727 local cur
="${COMP_WORDS[COMP_CWORD]}"
731 --all --tags --contains --abbrev= --candidates=
732 --exact-match --debug --long --match --always
736 __gitcomp
"$(__git_refs)"
741 __git_has_doubledash
&& return
743 local cur
="${COMP_WORDS[COMP_CWORD]}"
746 __gitcomp
"--cached --stat --numstat --shortstat --summary
747 --patch-with-stat --name-only --name-status --color
748 --no-color --color-words --no-renames --check
749 --full-index --binary --abbrev --diff-filter
750 --find-copies-harder --pickaxe-all --pickaxe-regex
751 --text --ignore-space-at-eol --ignore-space-change
752 --ignore-all-space --exit-code --quiet --ext-diff
754 --no-prefix --src-prefix= --dst-prefix=
755 --base --ours --theirs
765 local cur
="${COMP_WORDS[COMP_CWORD]}"
767 case "${COMP_WORDS[0]},$COMP_CWORD" in
769 __gitcomp
"$(__git_remotes)"
772 __gitcomp
"$(__git_remotes)"
778 case "$COMP_WORDBREAKS" in
780 *) pfx
="${cur%%:*}:" ;;
782 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
786 case "${COMP_WORDS[0]}" in
787 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
788 git
) remote
="${COMP_WORDS[2]}" ;;
790 __gitcomp
"$(__git_refs2 "$remote")"
799 local cur
="${COMP_WORDS[COMP_CWORD]}"
803 --stdout --attach --thread
805 --numbered --start-number
810 --full-index --binary
813 --no-prefix --src-prefix= --dst-prefix=
818 __git_complete_revlist
823 local cur
="${COMP_WORDS[COMP_CWORD]}"
826 __gitcomp
"--prune --aggressive"
835 __git_has_doubledash
&& return
837 local cur
="${COMP_WORDS[COMP_CWORD]}"
842 --text --ignore-case --word-regexp --invert-match
844 --extended-regexp --basic-regexp --fixed-strings
845 --files-with-matches --name-only
846 --files-without-match
848 --and --or --not --all-match
858 local cur
="${COMP_WORDS[COMP_CWORD]}"
861 __gitcomp
"--all --info --man --web"
865 __gitcomp
"$(__git_all_commands)"
870 local cur
="${COMP_WORDS[COMP_CWORD]}"
874 false true umask group all world everybody
875 " "" "${cur##--shared=}"
879 __gitcomp
"--quiet --bare --template= --shared --shared="
888 __gitcomp
"$(__git_remotes)"
898 __git_has_doubledash
&& return
900 local cur
="${COMP_WORDS[COMP_CWORD]}"
904 oneline short medium full fuller email raw
905 " "" "${cur##--pretty=}"
910 relative iso8601 rfc2822 short local default
911 " "" "${cur##--date=}"
916 --max-count= --max-age= --since= --after=
917 --min-age= --before= --until=
918 --root --topo-order --date-order --reverse
920 --abbrev-commit --abbrev=
921 --relative-date --date=
922 --author= --committer= --grep=
924 --pretty= --name-status --name-only --raw
926 --left-right --cherry-pick
928 --stat --numstat --shortstat
929 --decorate --diff-filter=
930 --color-words --walk-reflogs
931 --parents --children --full-history
936 __git_complete_revlist
941 local cur
="${COMP_WORDS[COMP_CWORD]}"
942 case "${COMP_WORDS[COMP_CWORD-1]}" in
944 __gitcomp
"$(__git_merge_strategies)"
949 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
954 --no-commit --no-stat --log --no-log --squash --strategy
958 __gitcomp
"$(__git_refs)"
963 __gitcomp
"$(__git_refs)"
968 __gitcomp
"--tags --all --stdin"
973 local cur
="${COMP_WORDS[COMP_CWORD]}"
975 case "${COMP_WORDS[0]},$COMP_CWORD" in
977 __gitcomp
"$(__git_remotes)"
980 __gitcomp
"$(__git_remotes)"
984 case "${COMP_WORDS[0]}" in
985 git-pull
) remote
="${COMP_WORDS[1]}" ;;
986 git
) remote
="${COMP_WORDS[2]}" ;;
988 __gitcomp
"$(__git_refs "$remote")"
995 local cur
="${COMP_WORDS[COMP_CWORD]}"
997 case "${COMP_WORDS[0]},$COMP_CWORD" in
999 __gitcomp
"$(__git_remotes)"
1002 __gitcomp
"$(__git_remotes)"
1008 case "${COMP_WORDS[0]}" in
1009 git-push
) remote
="${COMP_WORDS[1]}" ;;
1010 git
) remote
="${COMP_WORDS[2]}" ;;
1014 case "$COMP_WORDBREAKS" in
1016 *) pfx
="${cur%%:*}:" ;;
1019 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1022 __gitcomp
"$(__git_refs)" + "${cur#+}"
1025 __gitcomp
"$(__git_refs)"
1034 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1035 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1036 __gitcomp
"--continue --skip --abort"
1039 case "${COMP_WORDS[COMP_CWORD-1]}" in
1041 __gitcomp
"$(__git_merge_strategies)"
1046 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1050 __gitcomp
"--onto --merge --strategy --interactive"
1053 __gitcomp
"$(__git_refs)"
1058 local cur
="${COMP_WORDS[COMP_CWORD]}"
1061 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1062 --dry-run --envelope-sender --from --identity
1063 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1064 --no-suppress-from --no-thread --quiet
1065 --signed-off-by-cc --smtp-pass --smtp-server
1066 --smtp-server-port --smtp-ssl --smtp-user --subject
1067 --suppress-cc --suppress-from --thread --to"
1076 local cur
="${COMP_WORDS[COMP_CWORD]}"
1077 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1080 __gitcomp
"$(__git_remotes)"
1084 __gitcomp
"$(__git_refs)"
1088 local remote
="${prv#remote.}"
1089 remote
="${remote%.fetch}"
1090 __gitcomp
"$(__git_refs_remotes "$remote")"
1094 local remote
="${prv#remote.}"
1095 remote
="${remote%.push}"
1096 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1097 for-each-ref --format='%(refname):%(refname)' \
1101 pull.twohead|pull.octopus
)
1102 __gitcomp
"$(__git_merge_strategies)"
1105 color.branch|color.
diff|color.status
)
1106 __gitcomp
"always never auto"
1111 black red green yellow blue magenta cyan white
1112 bold dim ul blink reverse
1124 --global --system --file=
1125 --list --replace-all
1126 --get --get-all --get-regexp
1127 --add --unset --unset-all
1128 --remove-section --rename-section
1133 local pfx
="${cur%.*}."
1135 __gitcomp
"remote merge" "$pfx" "$cur"
1139 local pfx
="${cur%.*}."
1141 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1145 local pfx
="${cur%.*}."
1148 url fetch push skipDefaultUpdate
1149 receivepack uploadpack tagopt
1154 local pfx
="${cur%.*}."
1156 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1165 core.preferSymlinkRefs
1166 core.logAllRefUpdates
1167 core.loosecompression
1168 core.repositoryFormatVersion
1169 core.sharedRepository
1170 core.warnAmbiguousRefs
1172 core.packedGitWindowSize
1176 color.branch.current
1187 color.diff.whitespace
1192 color.status.changed
1193 color.status.untracked
1198 format.subjectprefix
1202 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1203 gitcvs.dbtablenameprefix
1206 gc.reflogexpireunreachable
1219 i18n.logOutputEncoding
1229 pack.deltaCacheLimit
1232 repack.useDeltaBaseOffset
1235 transfer.unpackLimit
1237 receive.denyNonFastForwards
1247 local subcommands
="add rm show prune update"
1248 local subcommand
="$(__git_find_subcommand "$subcommands")"
1249 if [ -z "$subcommand" ]; then
1250 __gitcomp
"$subcommands"
1254 case "$subcommand" in
1256 __gitcomp
"$(__git_remotes)"
1259 local i c
='' IFS
=$
'\n'
1260 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1278 __git_has_doubledash
&& return
1280 local cur
="${COMP_WORDS[COMP_CWORD]}"
1283 __gitcomp
"--mixed --hard --soft"
1287 __gitcomp
"$(__git_refs)"
1292 local cur
="${COMP_WORDS[COMP_CWORD]}"
1295 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1304 __git_has_doubledash
&& return
1306 local cur
="${COMP_WORDS[COMP_CWORD]}"
1309 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1318 __git_has_doubledash
&& return
1320 local cur
="${COMP_WORDS[COMP_CWORD]}"
1324 --max-count= --max-age= --since= --after=
1325 --min-age= --before= --until=
1327 --author= --committer= --grep=
1330 --numbered --summary
1335 __git_complete_revlist
1340 local cur
="${COMP_WORDS[COMP_CWORD]}"
1344 oneline short medium full fuller email raw
1345 " "" "${cur##--pretty=}"
1349 __gitcomp
"--pretty="
1358 local cur
="${COMP_WORDS[COMP_CWORD]}"
1362 --all --remotes --topo-order --current --more=
1363 --list --independent --merge-base --no-name
1364 --sha1-name --topics --reflog
1369 __git_complete_revlist
1374 local subcommands
='save list show apply clear drop pop create branch'
1375 local subcommand
="$(__git_find_subcommand "$subcommands")"
1376 if [ -z "$subcommand" ]; then
1377 __gitcomp
"$subcommands"
1379 local cur
="${COMP_WORDS[COMP_CWORD]}"
1380 case "$subcommand,$cur" in
1382 __gitcomp
"--keep-index"
1387 show
,--*|apply
,--*|drop
,--*|pop
,--*|branch
,--*)
1390 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1391 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1392 | sed -n -e 's/:.*//p')"
1403 __git_has_doubledash
&& return
1405 local subcommands
="add status init update"
1406 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1407 local cur
="${COMP_WORDS[COMP_CWORD]}"
1410 __gitcomp
"--quiet --cached"
1413 __gitcomp
"$subcommands"
1423 init fetch clone rebase dcommit log find-rev
1424 set-tree commit-diff info create-ignore propget
1425 proplist show-ignore show-externals
1427 local subcommand
="$(__git_find_subcommand "$subcommands")"
1428 if [ -z "$subcommand" ]; then
1429 __gitcomp
"$subcommands"
1431 local remote_opts
="--username= --config-dir= --no-auth-cache"
1433 --follow-parent --authors-file= --repack=
1434 --no-metadata --use-svm-props --use-svnsync-props
1435 --log-window-size= --no-checkout --quiet
1436 --repack-flags --user-log-author $remote_opts
1439 --template= --shared= --trunk= --tags=
1440 --branches= --stdlayout --minimize-url
1441 --no-metadata --use-svm-props --use-svnsync-props
1442 --rewrite-root= $remote_opts
1445 --edit --rmdir --find-copies-harder --copy-similarity=
1448 local cur
="${COMP_WORDS[COMP_CWORD]}"
1449 case "$subcommand,$cur" in
1451 __gitcomp
"--revision= --fetch-all $fc_opts"
1454 __gitcomp
"--revision= $fc_opts $init_opts"
1457 __gitcomp
"$init_opts"
1461 --merge --strategy= --verbose --dry-run
1462 --fetch-all --no-rebase $cmt_opts $fc_opts
1466 __gitcomp
"--stdin $cmt_opts $fc_opts"
1468 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1470 __gitcomp
"--revision="
1474 --limit= --revision= --verbose --incremental
1475 --oneline --show-commit --non-recursive
1481 --merge --verbose --strategy= --local
1482 --fetch-all $fc_opts
1486 __gitcomp
"--message= --file= --revision= $cmt_opts"
1501 while [ $c -lt $COMP_CWORD ]; do
1502 i
="${COMP_WORDS[c]}"
1505 __gitcomp
"$(__git_tags)"
1515 case "${COMP_WORDS[COMP_CWORD-1]}" in
1521 __gitcomp
"$(__git_tags)"
1527 __gitcomp
"$(__git_refs)"
1534 local i c
=1 command __git_dir
1536 while [ $c -lt $COMP_CWORD ]; do
1537 i
="${COMP_WORDS[c]}"
1539 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1540 --bare) __git_dir
="." ;;
1541 --version|
-p|
--paginate) ;;
1542 --help) command="help"; break ;;
1543 *) command="$i"; break ;;
1548 if [ -z "$command" ]; then
1549 case "${COMP_WORDS[COMP_CWORD]}" in
1550 --*=*) COMPREPLY
=() ;;
1562 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1567 local expansion
=$
(__git_aliased_command
"$command")
1568 [ "$expansion" ] && command="$expansion"
1573 apply
) _git_apply
;;
1574 bisect
) _git_bisect
;;
1575 bundle
) _git_bundle
;;
1576 branch
) _git_branch
;;
1577 checkout
) _git_checkout
;;
1578 cherry
) _git_cherry
;;
1579 cherry-pick
) _git_cherry_pick
;;
1580 clean
) _git_clean
;;
1581 clone
) _git_clone
;;
1582 commit
) _git_commit
;;
1583 config
) _git_config
;;
1584 describe
) _git_describe
;;
1586 fetch
) _git_fetch
;;
1587 format-patch
) _git_format_patch
;;
1593 ls-remote
) _git_ls_remote
;;
1594 ls-tree
) _git_ls_tree
;;
1596 merge-base
) _git_merge_base
;;
1597 name-rev
) _git_name_rev
;;
1600 rebase
) _git_rebase
;;
1601 remote
) _git_remote
;;
1602 reset) _git_reset
;;
1603 revert
) _git_revert
;;
1605 send-email
) _git_send_email
;;
1606 shortlog
) _git_shortlog
;;
1608 show-branch
) _git_show_branch
;;
1609 stash
) _git_stash
;;
1610 submodule
) _git_submodule
;;
1613 whatchanged
) _git_log
;;
1620 __git_has_doubledash
&& return
1622 local cur
="${COMP_WORDS[COMP_CWORD]}"
1623 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1625 if [ -f $g/MERGE_HEAD
]; then
1630 __gitcomp
"--not --all $merge"
1634 __git_complete_revlist
1637 complete
-o default
-o nospace
-F _git git
1638 complete
-o default
-o nospace
-F _gitk gitk
1640 # The following are necessary only for Cygwin, and only are needed
1641 # when the user has tab-completed the executable name and consequently
1642 # included the '.exe' suffix.
1644 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1645 complete
-o default
-o nospace
-F _git git.exe