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
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 case "${COMP_WORDS[0]},$COMP_CWORD" in
1051 __gitcomp
"$(__git_remotes)"
1054 __gitcomp
"$(__git_remotes)"
1058 case "${COMP_WORDS[0]}" in
1059 git-pull
) remote
="${COMP_WORDS[1]}" ;;
1060 git
) remote
="${COMP_WORDS[2]}" ;;
1062 __gitcomp
"$(__git_refs "$remote")"
1069 local cur
="${COMP_WORDS[COMP_CWORD]}"
1071 case "${COMP_WORDS[0]},$COMP_CWORD" in
1073 __gitcomp
"$(__git_remotes)"
1076 __gitcomp
"$(__git_remotes)"
1082 case "${COMP_WORDS[0]}" in
1083 git-push
) remote
="${COMP_WORDS[1]}" ;;
1084 git
) remote
="${COMP_WORDS[2]}" ;;
1088 case "$COMP_WORDBREAKS" in
1090 *) pfx
="${cur%%:*}:" ;;
1093 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1096 __gitcomp
"$(__git_refs)" + "${cur#+}"
1099 __gitcomp
"$(__git_refs)"
1108 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1109 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1110 __gitcomp
"--continue --skip --abort"
1113 case "${COMP_WORDS[COMP_CWORD-1]}" in
1115 __gitcomp
"$(__git_merge_strategies)"
1120 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1124 __gitcomp
"--onto --merge --strategy --interactive"
1127 __gitcomp
"$(__git_refs)"
1132 local cur
="${COMP_WORDS[COMP_CWORD]}"
1135 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1136 --dry-run --envelope-sender --from --identity
1137 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1138 --no-suppress-from --no-thread --quiet
1139 --signed-off-by-cc --smtp-pass --smtp-server
1140 --smtp-server-port --smtp-ssl --smtp-user --subject
1141 --suppress-cc --suppress-from --thread --to"
1150 local cur
="${COMP_WORDS[COMP_CWORD]}"
1151 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1154 __gitcomp
"$(__git_remotes)"
1158 __gitcomp
"$(__git_refs)"
1162 local remote
="${prv#remote.}"
1163 remote
="${remote%.fetch}"
1164 __gitcomp
"$(__git_refs_remotes "$remote")"
1168 local remote
="${prv#remote.}"
1169 remote
="${remote%.push}"
1170 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1171 for-each-ref --format='%(refname):%(refname)' \
1175 pull.twohead|pull.octopus
)
1176 __gitcomp
"$(__git_merge_strategies)"
1179 color.branch|color.
diff|color.status
)
1180 __gitcomp
"always never auto"
1185 black red green yellow blue magenta cyan white
1186 bold dim ul blink reverse
1198 --global --system --file=
1199 --list --replace-all
1200 --get --get-all --get-regexp
1201 --add --unset --unset-all
1202 --remove-section --rename-section
1207 local pfx
="${cur%.*}."
1209 __gitcomp
"remote merge" "$pfx" "$cur"
1213 local pfx
="${cur%.*}."
1215 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1219 local pfx
="${cur%.*}."
1222 url fetch push skipDefaultUpdate
1223 receivepack uploadpack tagopt
1228 local pfx
="${cur%.*}."
1230 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1239 core.preferSymlinkRefs
1240 core.logAllRefUpdates
1241 core.loosecompression
1242 core.repositoryFormatVersion
1243 core.sharedRepository
1244 core.warnAmbiguousRefs
1246 core.packedGitWindowSize
1250 color.branch.current
1261 color.diff.whitespace
1266 color.status.changed
1267 color.status.untracked
1272 format.subjectprefix
1276 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1277 gitcvs.dbtablenameprefix
1280 gc.reflogexpireunreachable
1293 i18n.logOutputEncoding
1303 pack.deltaCacheLimit
1306 repack.useDeltaBaseOffset
1309 transfer.unpackLimit
1311 receive.denyNonFastForwards
1321 local subcommands
="add rm show prune update"
1322 local subcommand
="$(__git_find_subcommand "$subcommands")"
1323 if [ -z "$subcommand" ]; then
1324 __gitcomp
"$subcommands"
1328 case "$subcommand" in
1330 __gitcomp
"$(__git_remotes)"
1333 local i c
='' IFS
=$
'\n'
1334 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1352 __git_has_doubledash
&& return
1354 local cur
="${COMP_WORDS[COMP_CWORD]}"
1357 __gitcomp
"--mixed --hard --soft"
1361 __gitcomp
"$(__git_refs)"
1366 local cur
="${COMP_WORDS[COMP_CWORD]}"
1369 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1378 __git_has_doubledash
&& return
1380 local cur
="${COMP_WORDS[COMP_CWORD]}"
1383 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1392 __git_has_doubledash
&& return
1394 local cur
="${COMP_WORDS[COMP_CWORD]}"
1398 --max-count= --max-age= --since= --after=
1399 --min-age= --before= --until=
1401 --author= --committer= --grep=
1404 --numbered --summary
1409 __git_complete_revlist
1414 local cur
="${COMP_WORDS[COMP_CWORD]}"
1418 oneline short medium full fuller email raw
1419 " "" "${cur##--pretty=}"
1423 __gitcomp
"--pretty="
1432 local cur
="${COMP_WORDS[COMP_CWORD]}"
1436 --all --remotes --topo-order --current --more=
1437 --list --independent --merge-base --no-name
1438 --sha1-name --topics --reflog
1443 __git_complete_revlist
1448 local subcommands
='save list show apply clear drop pop create branch'
1449 local subcommand
="$(__git_find_subcommand "$subcommands")"
1450 if [ -z "$subcommand" ]; then
1451 __gitcomp
"$subcommands"
1453 local cur
="${COMP_WORDS[COMP_CWORD]}"
1454 case "$subcommand,$cur" in
1456 __gitcomp
"--keep-index"
1461 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1464 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1465 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1466 | sed -n -e 's/:.*//p')"
1477 __git_has_doubledash
&& return
1479 local subcommands
="add status init update"
1480 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1481 local cur
="${COMP_WORDS[COMP_CWORD]}"
1484 __gitcomp
"--quiet --cached"
1487 __gitcomp
"$subcommands"
1497 init fetch clone rebase dcommit log find-rev
1498 set-tree commit-diff info create-ignore propget
1499 proplist show-ignore show-externals
1501 local subcommand
="$(__git_find_subcommand "$subcommands")"
1502 if [ -z "$subcommand" ]; then
1503 __gitcomp
"$subcommands"
1505 local remote_opts
="--username= --config-dir= --no-auth-cache"
1507 --follow-parent --authors-file= --repack=
1508 --no-metadata --use-svm-props --use-svnsync-props
1509 --log-window-size= --no-checkout --quiet
1510 --repack-flags --user-log-author $remote_opts
1513 --template= --shared= --trunk= --tags=
1514 --branches= --stdlayout --minimize-url
1515 --no-metadata --use-svm-props --use-svnsync-props
1516 --rewrite-root= $remote_opts
1519 --edit --rmdir --find-copies-harder --copy-similarity=
1522 local cur
="${COMP_WORDS[COMP_CWORD]}"
1523 case "$subcommand,$cur" in
1525 __gitcomp
"--revision= --fetch-all $fc_opts"
1528 __gitcomp
"--revision= $fc_opts $init_opts"
1531 __gitcomp
"$init_opts"
1535 --merge --strategy= --verbose --dry-run
1536 --fetch-all --no-rebase $cmt_opts $fc_opts
1540 __gitcomp
"--stdin $cmt_opts $fc_opts"
1542 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1544 __gitcomp
"--revision="
1548 --limit= --revision= --verbose --incremental
1549 --oneline --show-commit --non-recursive
1555 --merge --verbose --strategy= --local
1556 --fetch-all $fc_opts
1560 __gitcomp
"--message= --file= --revision= $cmt_opts"
1575 while [ $c -lt $COMP_CWORD ]; do
1576 i
="${COMP_WORDS[c]}"
1579 __gitcomp
"$(__git_tags)"
1589 case "${COMP_WORDS[COMP_CWORD-1]}" in
1595 __gitcomp
"$(__git_tags)"
1601 __gitcomp
"$(__git_refs)"
1608 local i c
=1 command __git_dir
1610 while [ $c -lt $COMP_CWORD ]; do
1611 i
="${COMP_WORDS[c]}"
1613 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1614 --bare) __git_dir
="." ;;
1615 --version|
-p|
--paginate) ;;
1616 --help) command="help"; break ;;
1617 *) command="$i"; break ;;
1622 if [ -z "$command" ]; then
1623 case "${COMP_WORDS[COMP_CWORD]}" in
1624 --*=*) COMPREPLY
=() ;;
1636 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1641 local expansion
=$
(__git_aliased_command
"$command")
1642 [ "$expansion" ] && command="$expansion"
1647 apply
) _git_apply
;;
1648 archive
) _git_archive
;;
1649 bisect
) _git_bisect
;;
1650 bundle
) _git_bundle
;;
1651 branch
) _git_branch
;;
1652 checkout
) _git_checkout
;;
1653 cherry
) _git_cherry
;;
1654 cherry-pick
) _git_cherry_pick
;;
1655 clean
) _git_clean
;;
1656 clone
) _git_clone
;;
1657 commit
) _git_commit
;;
1658 config
) _git_config
;;
1659 describe
) _git_describe
;;
1661 fetch
) _git_fetch
;;
1662 format-patch
) _git_format_patch
;;
1668 ls-files
) _git_ls_files
;;
1669 ls-remote
) _git_ls_remote
;;
1670 ls-tree
) _git_ls_tree
;;
1672 mergetool
) _git_mergetool
;;
1673 merge-base
) _git_merge_base
;;
1675 name-rev
) _git_name_rev
;;
1678 rebase
) _git_rebase
;;
1679 remote
) _git_remote
;;
1680 reset) _git_reset
;;
1681 revert
) _git_revert
;;
1683 send-email
) _git_send_email
;;
1684 shortlog
) _git_shortlog
;;
1686 show-branch
) _git_show_branch
;;
1687 stash
) _git_stash
;;
1688 submodule
) _git_submodule
;;
1691 whatchanged
) _git_log
;;
1698 __git_has_doubledash
&& return
1700 local cur
="${COMP_WORDS[COMP_CWORD]}"
1701 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1703 if [ -f $g/MERGE_HEAD
]; then
1708 __gitcomp
"--not --all $merge"
1712 __git_complete_revlist
1715 complete
-o default
-o nospace
-F _git git
1716 complete
-o default
-o nospace
-F _gitk gitk
1718 # The following are necessary only for Cygwin, and only are needed
1719 # when the user has tab-completed the executable name and consequently
1720 # included the '.exe' suffix.
1722 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1723 complete
-o default
-o nospace
-F _git git.exe