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 fix"
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 local cur
="${COMP_WORDS[COMP_CWORD]}"
569 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
573 __gitcomp
"$(__git_remotes)" "" "${cur##--remote=}"
578 --format= --list --verbose
579 --prefix= --remote= --exec=
589 __git_has_doubledash
&& return
591 local subcommands
="start bad good skip reset visualize replay log run"
592 local subcommand
="$(__git_find_subcommand "$subcommands")"
593 if [ -z "$subcommand" ]; then
594 __gitcomp
"$subcommands"
598 case "$subcommand" in
600 __gitcomp
"$(__git_refs)"
610 local i c
=1 only_local_ref
="n" has_r
="n"
612 while [ $c -lt $COMP_CWORD ]; do
615 -d|
-m) only_local_ref
="y" ;;
621 case "${COMP_WORDS[COMP_CWORD]}" in
622 --*=*) COMPREPLY
=() ;;
625 --color --no-color --verbose --abbrev= --no-abbrev
626 --track --no-track --contains --merged --no-merged
630 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
631 __gitcomp
"$(__git_heads)"
633 __gitcomp
"$(__git_refs)"
641 local mycword
="$COMP_CWORD"
642 case "${COMP_WORDS[0]}" in
644 local cmd
="${COMP_WORDS[2]}"
645 mycword
="$((mycword-1))"
648 local cmd
="${COMP_WORDS[1]}"
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
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 case "${COMP_WORDS[0]},$COMP_CWORD" in
792 __gitcomp
"$(__git_remotes)"
795 __gitcomp
"$(__git_remotes)"
801 case "$COMP_WORDBREAKS" in
803 *) pfx
="${cur%%:*}:" ;;
805 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
809 case "${COMP_WORDS[0]}" in
810 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
811 git
) remote
="${COMP_WORDS[2]}" ;;
813 __gitcomp
"$(__git_refs2 "$remote")"
822 local cur
="${COMP_WORDS[COMP_CWORD]}"
826 --stdout --attach --thread
828 --numbered --start-number
833 --full-index --binary
836 --no-prefix --src-prefix= --dst-prefix=
841 __git_complete_revlist
846 local cur
="${COMP_WORDS[COMP_CWORD]}"
849 __gitcomp
"--prune --aggressive"
858 __git_has_doubledash
&& return
860 local cur
="${COMP_WORDS[COMP_CWORD]}"
865 --text --ignore-case --word-regexp --invert-match
867 --extended-regexp --basic-regexp --fixed-strings
868 --files-with-matches --name-only
869 --files-without-match
871 --and --or --not --all-match
881 local cur
="${COMP_WORDS[COMP_CWORD]}"
884 __gitcomp
"--all --info --man --web"
888 __gitcomp
"$(__git_all_commands)"
893 local cur
="${COMP_WORDS[COMP_CWORD]}"
897 false true umask group all world everybody
898 " "" "${cur##--shared=}"
902 __gitcomp
"--quiet --bare --template= --shared --shared="
911 __git_has_doubledash
&& return
913 local cur
="${COMP_WORDS[COMP_CWORD]}"
916 __gitcomp
"--cached --deleted --modified --others --ignored
917 --stage --directory --no-empty-directory --unmerged
918 --killed --exclude= --exclude-from=
919 --exclude-per-directory= --exclude-standard
920 --error-unmatch --with-tree= --full-name
921 --abbrev --ignored --exclude-per-directory
931 __gitcomp
"$(__git_remotes)"
941 __git_has_doubledash
&& return
943 local cur
="${COMP_WORDS[COMP_CWORD]}"
947 oneline short medium full fuller email raw
948 " "" "${cur##--pretty=}"
953 relative iso8601 rfc2822 short local default
954 " "" "${cur##--date=}"
959 --max-count= --max-age= --since= --after=
960 --min-age= --before= --until=
961 --root --topo-order --date-order --reverse
963 --abbrev-commit --abbrev=
964 --relative-date --date=
965 --author= --committer= --grep=
967 --pretty= --name-status --name-only --raw
969 --left-right --cherry-pick
971 --stat --numstat --shortstat
972 --decorate --diff-filter=
973 --color-words --walk-reflogs
974 --parents --children --full-history
980 __git_complete_revlist
985 local cur
="${COMP_WORDS[COMP_CWORD]}"
986 case "${COMP_WORDS[COMP_CWORD-1]}" in
988 __gitcomp
"$(__git_merge_strategies)"
993 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
998 --no-commit --no-stat --log --no-log --squash --strategy
1002 __gitcomp
"$(__git_refs)"
1007 local cur
="${COMP_WORDS[COMP_CWORD]}"
1011 kdiff3 tkdiff meld xxdiff emerge
1012 vimdiff gvimdiff ecmerge opendiff
1013 " "" "${cur##--tool=}"
1026 __gitcomp
"$(__git_refs)"
1031 local cur
="${COMP_WORDS[COMP_CWORD]}"
1034 __gitcomp
"--dry-run"
1043 __gitcomp
"--tags --all --stdin"
1048 local cur
="${COMP_WORDS[COMP_CWORD]}"
1050 case "${COMP_WORDS[0]},$COMP_CWORD" in
1052 __gitcomp
"$(__git_remotes)"
1055 __gitcomp
"$(__git_remotes)"
1059 case "${COMP_WORDS[0]}" in
1060 git-pull
) remote
="${COMP_WORDS[1]}" ;;
1061 git
) remote
="${COMP_WORDS[2]}" ;;
1063 __gitcomp
"$(__git_refs "$remote")"
1070 local cur
="${COMP_WORDS[COMP_CWORD]}"
1072 case "${COMP_WORDS[0]},$COMP_CWORD" in
1074 __gitcomp
"$(__git_remotes)"
1077 __gitcomp
"$(__git_remotes)"
1083 case "${COMP_WORDS[0]}" in
1084 git-push
) remote
="${COMP_WORDS[1]}" ;;
1085 git
) remote
="${COMP_WORDS[2]}" ;;
1089 case "$COMP_WORDBREAKS" in
1091 *) pfx
="${cur%%:*}:" ;;
1094 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1097 __gitcomp
"$(__git_refs)" + "${cur#+}"
1100 __gitcomp
"$(__git_refs)"
1109 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1110 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1111 __gitcomp
"--continue --skip --abort"
1114 case "${COMP_WORDS[COMP_CWORD-1]}" in
1116 __gitcomp
"$(__git_merge_strategies)"
1121 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1125 __gitcomp
"--onto --merge --strategy --interactive"
1128 __gitcomp
"$(__git_refs)"
1133 local cur
="${COMP_WORDS[COMP_CWORD]}"
1136 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1137 --dry-run --envelope-sender --from --identity
1138 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1139 --no-suppress-from --no-thread --quiet
1140 --signed-off-by-cc --smtp-pass --smtp-server
1141 --smtp-server-port --smtp-ssl --smtp-user --subject
1142 --suppress-cc --suppress-from --thread --to"
1151 local cur
="${COMP_WORDS[COMP_CWORD]}"
1152 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1155 __gitcomp
"$(__git_remotes)"
1159 __gitcomp
"$(__git_refs)"
1163 local remote
="${prv#remote.}"
1164 remote
="${remote%.fetch}"
1165 __gitcomp
"$(__git_refs_remotes "$remote")"
1169 local remote
="${prv#remote.}"
1170 remote
="${remote%.push}"
1171 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1172 for-each-ref --format='%(refname):%(refname)' \
1176 pull.twohead|pull.octopus
)
1177 __gitcomp
"$(__git_merge_strategies)"
1180 color.branch|color.
diff|color.status
)
1181 __gitcomp
"always never auto"
1186 black red green yellow blue magenta cyan white
1187 bold dim ul blink reverse
1199 --global --system --file=
1200 --list --replace-all
1201 --get --get-all --get-regexp
1202 --add --unset --unset-all
1203 --remove-section --rename-section
1208 local pfx
="${cur%.*}."
1210 __gitcomp
"remote merge" "$pfx" "$cur"
1214 local pfx
="${cur%.*}."
1216 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1220 local pfx
="${cur%.*}."
1223 url fetch push skipDefaultUpdate
1224 receivepack uploadpack tagopt
1229 local pfx
="${cur%.*}."
1231 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1240 core.preferSymlinkRefs
1241 core.logAllRefUpdates
1242 core.loosecompression
1243 core.repositoryFormatVersion
1244 core.sharedRepository
1245 core.warnAmbiguousRefs
1247 core.packedGitWindowSize
1251 color.branch.current
1262 color.diff.whitespace
1267 color.status.changed
1268 color.status.untracked
1273 format.subjectprefix
1277 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1278 gitcvs.dbtablenameprefix
1281 gc.reflogexpireunreachable
1294 i18n.logOutputEncoding
1304 pack.deltaCacheLimit
1307 repack.useDeltaBaseOffset
1310 transfer.unpackLimit
1312 receive.denyNonFastForwards
1322 local subcommands
="add rm show prune update"
1323 local subcommand
="$(__git_find_subcommand "$subcommands")"
1324 if [ -z "$subcommand" ]; then
1325 __gitcomp
"$subcommands"
1329 case "$subcommand" in
1331 __gitcomp
"$(__git_remotes)"
1334 local i c
='' IFS
=$
'\n'
1335 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1353 __git_has_doubledash
&& return
1355 local cur
="${COMP_WORDS[COMP_CWORD]}"
1358 __gitcomp
"--mixed --hard --soft"
1362 __gitcomp
"$(__git_refs)"
1367 local cur
="${COMP_WORDS[COMP_CWORD]}"
1370 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1379 __git_has_doubledash
&& return
1381 local cur
="${COMP_WORDS[COMP_CWORD]}"
1384 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1393 __git_has_doubledash
&& return
1395 local cur
="${COMP_WORDS[COMP_CWORD]}"
1399 --max-count= --max-age= --since= --after=
1400 --min-age= --before= --until=
1402 --author= --committer= --grep=
1405 --numbered --summary
1410 __git_complete_revlist
1415 local cur
="${COMP_WORDS[COMP_CWORD]}"
1419 oneline short medium full fuller email raw
1420 " "" "${cur##--pretty=}"
1424 __gitcomp
"--pretty="
1433 local cur
="${COMP_WORDS[COMP_CWORD]}"
1437 --all --remotes --topo-order --current --more=
1438 --list --independent --merge-base --no-name
1439 --sha1-name --topics --reflog
1444 __git_complete_revlist
1449 local subcommands
='save list show apply clear drop pop create branch'
1450 local subcommand
="$(__git_find_subcommand "$subcommands")"
1451 if [ -z "$subcommand" ]; then
1452 __gitcomp
"$subcommands"
1454 local cur
="${COMP_WORDS[COMP_CWORD]}"
1455 case "$subcommand,$cur" in
1457 __gitcomp
"--keep-index"
1462 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1465 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1466 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1467 | sed -n -e 's/:.*//p')"
1478 __git_has_doubledash
&& return
1480 local subcommands
="add status init update"
1481 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1482 local cur
="${COMP_WORDS[COMP_CWORD]}"
1485 __gitcomp
"--quiet --cached"
1488 __gitcomp
"$subcommands"
1498 init fetch clone rebase dcommit log find-rev
1499 set-tree commit-diff info create-ignore propget
1500 proplist show-ignore show-externals
1502 local subcommand
="$(__git_find_subcommand "$subcommands")"
1503 if [ -z "$subcommand" ]; then
1504 __gitcomp
"$subcommands"
1506 local remote_opts
="--username= --config-dir= --no-auth-cache"
1508 --follow-parent --authors-file= --repack=
1509 --no-metadata --use-svm-props --use-svnsync-props
1510 --log-window-size= --no-checkout --quiet
1511 --repack-flags --user-log-author $remote_opts
1514 --template= --shared= --trunk= --tags=
1515 --branches= --stdlayout --minimize-url
1516 --no-metadata --use-svm-props --use-svnsync-props
1517 --rewrite-root= $remote_opts
1520 --edit --rmdir --find-copies-harder --copy-similarity=
1523 local cur
="${COMP_WORDS[COMP_CWORD]}"
1524 case "$subcommand,$cur" in
1526 __gitcomp
"--revision= --fetch-all $fc_opts"
1529 __gitcomp
"--revision= $fc_opts $init_opts"
1532 __gitcomp
"$init_opts"
1536 --merge --strategy= --verbose --dry-run
1537 --fetch-all --no-rebase $cmt_opts $fc_opts
1541 __gitcomp
"--stdin $cmt_opts $fc_opts"
1543 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1545 __gitcomp
"--revision="
1549 --limit= --revision= --verbose --incremental
1550 --oneline --show-commit --non-recursive
1556 --merge --verbose --strategy= --local
1557 --fetch-all $fc_opts
1561 __gitcomp
"--message= --file= --revision= $cmt_opts"
1576 while [ $c -lt $COMP_CWORD ]; do
1577 i
="${COMP_WORDS[c]}"
1580 __gitcomp
"$(__git_tags)"
1590 case "${COMP_WORDS[COMP_CWORD-1]}" in
1596 __gitcomp
"$(__git_tags)"
1602 __gitcomp
"$(__git_refs)"
1609 local i c
=1 command __git_dir
1611 while [ $c -lt $COMP_CWORD ]; do
1612 i
="${COMP_WORDS[c]}"
1614 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1615 --bare) __git_dir
="." ;;
1616 --version|
-p|
--paginate) ;;
1617 --help) command="help"; break ;;
1618 *) command="$i"; break ;;
1623 if [ -z "$command" ]; then
1624 case "${COMP_WORDS[COMP_CWORD]}" in
1625 --*=*) COMPREPLY
=() ;;
1637 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1642 local expansion
=$
(__git_aliased_command
"$command")
1643 [ "$expansion" ] && command="$expansion"
1648 apply
) _git_apply
;;
1649 archive
) _git_archive
;;
1650 bisect
) _git_bisect
;;
1651 bundle
) _git_bundle
;;
1652 branch
) _git_branch
;;
1653 checkout
) _git_checkout
;;
1654 cherry
) _git_cherry
;;
1655 cherry-pick
) _git_cherry_pick
;;
1656 clean
) _git_clean
;;
1657 clone
) _git_clone
;;
1658 commit
) _git_commit
;;
1659 config
) _git_config
;;
1660 describe
) _git_describe
;;
1662 fetch
) _git_fetch
;;
1663 format-patch
) _git_format_patch
;;
1669 ls-files
) _git_ls_files
;;
1670 ls-remote
) _git_ls_remote
;;
1671 ls-tree
) _git_ls_tree
;;
1673 mergetool
) _git_mergetool
;;
1674 merge-base
) _git_merge_base
;;
1676 name-rev
) _git_name_rev
;;
1679 rebase
) _git_rebase
;;
1680 remote
) _git_remote
;;
1681 reset) _git_reset
;;
1682 revert
) _git_revert
;;
1684 send-email
) _git_send_email
;;
1685 shortlog
) _git_shortlog
;;
1687 show-branch
) _git_show_branch
;;
1688 stash
) _git_stash
;;
1689 submodule
) _git_submodule
;;
1692 whatchanged
) _git_log
;;
1699 __git_has_doubledash
&& return
1701 local cur
="${COMP_WORDS[COMP_CWORD]}"
1702 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1704 if [ -f $g/MERGE_HEAD
]; then
1709 __gitcomp
"--not --all $merge"
1713 __git_complete_revlist
1716 complete
-o default
-o nospace
-F _git git
1717 complete
-o default
-o nospace
-F _gitk gitk
1719 # The following are necessary only for Cygwin, and only are needed
1720 # when the user has tab-completed the executable name and consequently
1721 # included the '.exe' suffix.
1723 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1724 complete
-o default
-o nospace
-F _git git.exe