3 # bash completion support for core Git.
5 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
6 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
7 # Distributed under the GNU General Public License, version 2.0.
9 # The contained completion routines provide support for completing:
11 # *) local and remote branch names
12 # *) local and remote tag names
13 # *) .git/remotes file names
14 # *) git 'subcommands'
15 # *) tree paths within 'ref:path/to/file' expressions
16 # *) common --long-options
18 # To use these routines:
20 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
21 # 2) Added the following line to your .bashrc:
22 # source ~/.git-completion.sh
24 # 3) You may want to make sure the git executable is available
25 # in your PATH before this script is sourced, as some caching
26 # is performed while the script loads. If git isn't found
27 # at source time then all lookups will be done on demand,
28 # which may be slightly slower.
30 # 4) Consider changing your PS1 to also show the current branch:
31 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
33 # The argument to __git_ps1 will be displayed only if you
34 # are currently in a git repository. The %s token will be
35 # the name of the current branch.
37 # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty
38 # value, unstaged (*) and staged (+) changes will be shown next
39 # to the branch name. You can configure this per-repository
40 # with the bash.showDirtyState variable, which defaults to true
41 # once GIT_PS1_SHOWDIRTYSTATE is enabled.
45 # *) Read Documentation/SubmittingPatches
46 # *) Send all patches to the current maintainer:
48 # "Shawn O. Pearce" <spearce@spearce.org>
50 # *) Always CC the Git mailing list:
55 case "$COMP_WORDBREAKS" in
57 *) COMP_WORDBREAKS
="$COMP_WORDBREAKS:"
60 # __gitdir accepts 0 or 1 arguments (i.e., location)
61 # returns location of .git repo
64 if [ -z "${1-}" ]; then
65 if [ -n "${__git_dir-}" ]; then
67 elif [ -d .git
]; then
70 git rev-parse
--git-dir 2>/dev
/null
72 elif [ -d "$1/.git" ]; then
79 # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
80 # returns text to add to bash PS1 prompt (includes branch name)
87 if [ -d "$g/rebase-apply" ]; then
88 if [ -f "$g/rebase-apply/rebasing" ]; then
90 elif [ -f "$g/rebase-apply/applying" ]; then
95 b
="$(git symbolic-ref HEAD 2>/dev/null)"
96 elif [ -f "$g/rebase-merge/interactive" ]; then
98 b
="$(cat "$g/rebase-merge
/head-name
")"
99 elif [ -d "$g/rebase-merge" ]; then
101 b
="$(cat "$g/rebase-merge
/head-name
")"
102 elif [ -f "$g/MERGE_HEAD" ]; then
104 b
="$(git symbolic-ref HEAD 2>/dev/null)"
106 if [ -f "$g/BISECT_LOG" ]; then
109 if ! b
="$(git symbolic-ref HEAD 2>/dev/null)"; then
110 if ! b
="$(git describe --exact-match HEAD 2>/dev/null)"; then
111 if [ -r "$g/HEAD" ]; then
112 b
="$(cut -c1-7 "$g/HEAD
")..."
122 if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
123 if [ "true" = "$(git config --bool core.bare 2>/dev/null)" ]; then
128 elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
129 if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
130 if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
131 git
diff --no-ext-diff --ignore-submodules \
132 --quiet --exit-code || w
="*"
133 if git rev-parse
--quiet --verify HEAD
>/dev
/null
; then
134 git diff-index
--cached --quiet \
135 --ignore-submodules HEAD
-- || i
="+"
144 if [ -n "${1-}" ]; then
145 printf "$1" "$c${b##refs/heads/}$w$i$r"
147 printf " (%s)" "$c${b##refs/heads/}$w$i$r"
153 # __gitcomp_1 requires 2 arguments
156 local c IFS
=' '$
'\t'$
'\n'
159 --*=*) printf %s$
'\n' "$c$2" ;;
160 *.
) printf %s$
'\n' "$c$2" ;;
161 *) printf %s$
'\n' "$c$2 " ;;
166 # __gitcomp accepts 1, 2, 3, or 4 arguments
167 # generates completion reply with compgen
170 local cur
="${COMP_WORDS[COMP_CWORD]}"
171 if [ $# -gt 2 ]; then
180 COMPREPLY
=($
(compgen
-P "${2-}" \
181 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
187 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
190 local cmd i is_hash
=y dir
="$(__gitdir "${1-}")"
191 if [ -d "$dir" ]; then
192 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
196 for i
in $
(git ls-remote
"${1-}" 2>/dev
/null
); do
197 case "$is_hash,$i" in
200 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
201 n
,*) is_hash
=y
; echo "$i" ;;
206 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
209 local cmd i is_hash
=y dir
="$(__gitdir "${1-}")"
210 if [ -d "$dir" ]; then
211 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
215 for i
in $
(git ls-remote
"${1-}" 2>/dev
/null
); do
216 case "$is_hash,$i" in
219 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
220 n
,*) is_hash
=y
; echo "$i" ;;
225 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
228 local i is_hash
=y dir
="$(__gitdir "${1-}")"
229 local cur
="${COMP_WORDS[COMP_CWORD]}" format refs
230 if [ -d "$dir" ]; then
237 if [ -e "$dir/HEAD" ]; then echo HEAD
; fi
238 format
="refname:short"
239 refs
="refs/tags refs/heads refs/remotes"
242 git
--git-dir="$dir" for-each-ref
--format="%($format)" \
246 for i
in $
(git ls-remote
"$dir" 2>/dev
/null
); do
247 case "$is_hash,$i" in
250 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
251 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
252 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
253 n
,*) is_hash
=y
; echo "$i" ;;
258 # __git_refs2 requires 1 argument (to pass to __git_refs)
262 for i
in $
(__git_refs
"$1"); do
267 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
268 __git_refs_remotes
()
270 local cmd i is_hash
=y
271 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
272 case "$is_hash,$i" in
275 echo "$i:refs/remotes/$1/${i#refs/heads/}"
279 n
,refs
/tags
/*) is_hash
=y
;;
287 local i ngoff IFS
=$
'\n' d
="$(__gitdir)"
288 shopt -q nullglob || ngoff
=1
290 for i
in "$d/remotes"/*; do
291 echo ${i#$d/remotes/}
293 [ "$ngoff" ] && shopt -u nullglob
294 for i
in $
(git
--git-dir="$d" config
--list); do
304 __git_merge_strategies
()
306 if [ -n "${__git_merge_strategylist-}" ]; then
307 echo "$__git_merge_strategylist"
310 git merge
-s help 2>&1 |
311 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
319 __git_merge_strategylist
=
320 __git_merge_strategylist
=$
(__git_merge_strategies
2>/dev
/null
)
322 __git_complete_file
()
324 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
341 case "$COMP_WORDBREAKS" in
343 *) pfx
="$ref:$pfx" ;;
347 COMPREPLY
=($
(compgen
-P "$pfx" \
348 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
349 | sed '/^100... blob /{
365 __gitcomp
"$(__git_refs)"
370 __git_complete_revlist
()
372 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
377 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
382 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
385 __gitcomp
"$(__git_refs)"
390 __git_complete_remote_or_refspec
()
392 local cmd
="${COMP_WORDS[1]}"
393 local cur
="${COMP_WORDS[COMP_CWORD]}"
394 local i c
=2 remote
="" pfx
="" lhs
=1 no_complete_refspec
=0
395 while [ $c -lt $COMP_CWORD ]; do
398 --all|
--mirror) [ "$cmd" = "push" ] && no_complete_refspec
=1 ;;
400 *) remote
="$i"; break ;;
404 if [ -z "$remote" ]; then
405 __gitcomp
"$(__git_remotes)"
408 if [ $no_complete_refspec = 1 ]; then
412 [ "$remote" = "." ] && remote
=
415 case "$COMP_WORDBREAKS" in
417 *) pfx
="${cur%%:*}:" ;;
429 if [ $lhs = 1 ]; then
430 __gitcomp
"$(__git_refs2 "$remote")" "$pfx" "$cur"
432 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
436 if [ $lhs = 1 ]; then
437 __gitcomp
"$(__git_refs "$remote")" "$pfx" "$cur"
439 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
443 if [ $lhs = 1 ]; then
444 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
446 __gitcomp
"$(__git_refs "$remote")" "$pfx" "$cur"
452 __git_complete_strategy
()
454 case "${COMP_WORDS[COMP_CWORD-1]}" in
456 __gitcomp
"$(__git_merge_strategies)"
459 local cur
="${COMP_WORDS[COMP_CWORD]}"
462 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
469 __git_all_commands
()
471 if [ -n "${__git_all_commandlist-}" ]; then
472 echo "$__git_all_commandlist"
476 for i
in $
(git
help -a|
egrep '^ ')
479 *--*) : helper pattern
;;
484 __git_all_commandlist
=
485 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
487 __git_porcelain_commands
()
489 if [ -n "${__git_porcelain_commandlist-}" ]; then
490 echo "$__git_porcelain_commandlist"
494 for i
in "help" $
(__git_all_commands
)
497 *--*) : helper pattern
;;
498 applymbox
) : ask gittus
;;
499 applypatch
) : ask gittus
;;
500 archimport
) : import
;;
501 cat-file
) : plumbing
;;
502 check-attr
) : plumbing
;;
503 check-ref-format
) : plumbing
;;
504 checkout-index
) : plumbing
;;
505 commit-tree
) : plumbing
;;
506 count-objects
) : infrequent
;;
507 cvsexportcommit
) : export;;
508 cvsimport
) : import
;;
509 cvsserver
) : daemon
;;
511 diff-files
) : plumbing
;;
512 diff-index
) : plumbing
;;
513 diff-tree
) : plumbing
;;
514 fast-import
) : import
;;
515 fast-export
) : export;;
516 fsck-objects
) : plumbing
;;
517 fetch-pack
) : plumbing
;;
518 fmt-merge-msg
) : plumbing
;;
519 for-each-ref
) : plumbing
;;
520 hash-object
) : plumbing
;;
521 http-
*) : transport
;;
522 index-pack
) : plumbing
;;
523 init-db
) : deprecated
;;
524 local-fetch
) : plumbing
;;
525 lost-found
) : infrequent
;;
526 ls-files
) : plumbing
;;
527 ls-remote
) : plumbing
;;
528 ls-tree
) : plumbing
;;
529 mailinfo
) : plumbing
;;
530 mailsplit
) : plumbing
;;
531 merge-
*) : plumbing
;;
534 pack-objects
) : plumbing
;;
535 pack-redundant
) : plumbing
;;
536 pack-refs
) : plumbing
;;
537 parse-remote
) : plumbing
;;
538 patch-id
) : plumbing
;;
539 peek-remote
) : plumbing
;;
541 prune-packed
) : plumbing
;;
542 quiltimport
) : import
;;
543 read-tree
) : plumbing
;;
544 receive-pack
) : plumbing
;;
546 repo-config
) : deprecated
;;
548 rev-list
) : plumbing
;;
549 rev-parse
) : plumbing
;;
550 runstatus
) : plumbing
;;
551 sh-setup
) : internal
;;
553 show-ref
) : plumbing
;;
554 send-pack
) : plumbing
;;
555 show-index
) : plumbing
;;
557 stripspace
) : plumbing
;;
558 symbolic-ref
) : plumbing
;;
559 tar-tree
) : deprecated
;;
560 unpack-file
) : plumbing
;;
561 unpack-objects
) : plumbing
;;
562 update-index
) : plumbing
;;
563 update-ref
) : plumbing
;;
564 update-server-info
) : daemon
;;
565 upload-archive
) : plumbing
;;
566 upload-pack
) : plumbing
;;
567 write-tree
) : plumbing
;;
569 verify-pack
) : infrequent
;;
570 verify-tag
) : plumbing
;;
575 __git_porcelain_commandlist
=
576 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
581 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
591 # __git_aliased_command requires 1 argument
592 __git_aliased_command
()
594 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
595 config
--get "alias.$1")
596 for word
in $cmdline; do
597 if [ "${word##-*}" ]; then
604 # __git_find_subcommand requires 1 argument
605 __git_find_subcommand
()
607 local word subcommand c
=1
609 while [ $c -lt $COMP_CWORD ]; do
610 word
="${COMP_WORDS[c]}"
611 for subcommand
in $1; do
612 if [ "$subcommand" = "$word" ]; then
621 __git_has_doubledash
()
624 while [ $c -lt $COMP_CWORD ]; do
625 if [ "--" = "${COMP_WORDS[c]}" ]; then
633 __git_whitespacelist
="nowarn warn error error-all fix"
637 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
638 if [ -d "$dir"/rebase-apply
]; then
639 __gitcomp
"--skip --resolved --abort"
644 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
649 --3way --committer-date-is-author-date --ignore-date
650 --interactive --keep --no-utf8 --signoff --utf8
660 local cur
="${COMP_WORDS[COMP_CWORD]}"
663 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
668 --stat --numstat --summary --check --index
669 --cached --index-info --reverse --reject --unidiff-zero
670 --apply --no-add --exclude=
671 --whitespace= --inaccurate-eof --verbose
680 __git_has_doubledash
&& return
682 local cur
="${COMP_WORDS[COMP_CWORD]}"
686 --interactive --refresh --patch --update --dry-run
687 --ignore-errors --intent-to-add
696 local cur
="${COMP_WORDS[COMP_CWORD]}"
699 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
703 __gitcomp
"$(__git_remotes)" "" "${cur##--remote=}"
708 --format= --list --verbose
709 --prefix= --remote= --exec=
719 __git_has_doubledash
&& return
721 local subcommands
="start bad good skip reset visualize replay log run"
722 local subcommand
="$(__git_find_subcommand "$subcommands")"
723 if [ -z "$subcommand" ]; then
724 __gitcomp
"$subcommands"
728 case "$subcommand" in
730 __gitcomp
"$(__git_refs)"
740 local i c
=1 only_local_ref
="n" has_r
="n"
742 while [ $c -lt $COMP_CWORD ]; do
745 -d|
-m) only_local_ref
="y" ;;
751 case "${COMP_WORDS[COMP_CWORD]}" in
754 --color --no-color --verbose --abbrev= --no-abbrev
755 --track --no-track --contains --merged --no-merged
759 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
760 __gitcomp
"$(__git_heads)"
762 __gitcomp
"$(__git_refs)"
770 local cmd
="${COMP_WORDS[2]}"
771 case "$COMP_CWORD" in
773 __gitcomp
"create list-heads verify unbundle"
781 __git_complete_revlist
790 __git_has_doubledash
&& return
792 __gitcomp
"$(__git_refs)"
797 __gitcomp
"$(__git_refs)"
802 local cur
="${COMP_WORDS[COMP_CWORD]}"
805 __gitcomp
"--edit --no-commit"
808 __gitcomp
"$(__git_refs)"
815 __git_has_doubledash
&& return
817 local cur
="${COMP_WORDS[COMP_CWORD]}"
820 __gitcomp
"--dry-run --quiet"
829 local cur
="${COMP_WORDS[COMP_CWORD]}"
854 __git_has_doubledash
&& return
856 local cur
="${COMP_WORDS[COMP_CWORD]}"
860 --all --author= --signoff --verify --no-verify
861 --edit --amend --include --only --interactive
870 local cur
="${COMP_WORDS[COMP_CWORD]}"
874 --all --tags --contains --abbrev= --candidates=
875 --exact-match --debug --long --match --always
879 __gitcomp
"$(__git_refs)"
882 __git_diff_common_options
="--stat --numstat --shortstat --summary
883 --patch-with-stat --name-only --name-status --color
884 --no-color --color-words --no-renames --check
885 --full-index --binary --abbrev --diff-filter=
887 --text --ignore-space-at-eol --ignore-space-change
888 --ignore-all-space --exit-code --quiet --ext-diff
890 --no-prefix --src-prefix= --dst-prefix=
891 --inter-hunk-context=
898 __git_has_doubledash
&& return
900 local cur
="${COMP_WORDS[COMP_CWORD]}"
903 __gitcomp
"--cached --staged --pickaxe-all --pickaxe-regex
904 --base --ours --theirs
905 $__git_diff_common_options
913 __git_fetch_options
="
914 --quiet --verbose --append --upload-pack --force --keep --depth=
920 local cur
="${COMP_WORDS[COMP_CWORD]}"
923 __gitcomp
"$__git_fetch_options"
927 __git_complete_remote_or_refspec
932 local cur
="${COMP_WORDS[COMP_CWORD]}"
937 " "" "${cur##--thread=}"
942 --stdout --attach --no-attach --thread --thread=
944 --numbered --start-number
949 --full-index --binary
952 --no-prefix --src-prefix= --dst-prefix=
953 --inline --suffix= --ignore-if-in-upstream
959 __git_complete_revlist
964 local cur
="${COMP_WORDS[COMP_CWORD]}"
968 --tags --root --unreachable --cache --no-reflogs --full
969 --strict --verbose --lost-found
979 local cur
="${COMP_WORDS[COMP_CWORD]}"
982 __gitcomp
"--prune --aggressive"
991 __git_has_doubledash
&& return
993 local cur
="${COMP_WORDS[COMP_CWORD]}"
998 --text --ignore-case --word-regexp --invert-match
1000 --extended-regexp --basic-regexp --fixed-strings
1001 --files-with-matches --name-only
1002 --files-without-match
1004 --and --or --not --all-match
1014 local cur
="${COMP_WORDS[COMP_CWORD]}"
1017 __gitcomp
"--all --info --man --web"
1021 __gitcomp
"$(__git_all_commands)
1022 attributes cli core-tutorial cvs-migration
1023 diffcore gitk glossary hooks ignore modules
1024 repository-layout tutorial tutorial-2
1031 local cur
="${COMP_WORDS[COMP_CWORD]}"
1035 false true umask group all world everybody
1036 " "" "${cur##--shared=}"
1040 __gitcomp
"--quiet --bare --template= --shared --shared="
1049 __git_has_doubledash
&& return
1051 local cur
="${COMP_WORDS[COMP_CWORD]}"
1054 __gitcomp
"--cached --deleted --modified --others --ignored
1055 --stage --directory --no-empty-directory --unmerged
1056 --killed --exclude= --exclude-from=
1057 --exclude-per-directory= --exclude-standard
1058 --error-unmatch --with-tree= --full-name
1059 --abbrev --ignored --exclude-per-directory
1069 __gitcomp
"$(__git_remotes)"
1077 # Options that go well for log, shortlog and gitk
1078 __git_log_common_options
="
1080 --branches --tags --remotes
1081 --first-parent --no-merges
1083 --max-age= --since= --after=
1084 --min-age= --until= --before=
1086 # Options that go well for log and gitk (not shortlog)
1087 __git_log_gitk_options
="
1088 --dense --sparse --full-history
1089 --simplify-merges --simplify-by-decoration
1092 # Options that go well for log and shortlog (not gitk)
1093 __git_log_shortlog_options
="
1094 --author= --committer= --grep=
1098 __git_log_pretty_formats
="oneline short medium full fuller email raw format:"
1102 __git_has_doubledash
&& return
1104 local cur
="${COMP_WORDS[COMP_CWORD]}"
1105 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1107 if [ -f "$g/MERGE_HEAD" ]; then
1112 __gitcomp
"$__git_log_pretty_formats
1113 " "" "${cur##--pretty=}"
1117 __gitcomp
"$__git_log_pretty_formats
1118 " "" "${cur##--format=}"
1123 relative iso8601 rfc2822 short local default
1124 " "" "${cur##--date=}"
1129 $__git_log_common_options
1130 $__git_log_shortlog_options
1131 $__git_log_gitk_options
1132 --root --topo-order --date-order --reverse
1134 --abbrev-commit --abbrev=
1135 --relative-date --date=
1136 --pretty= --format= --oneline
1141 --parents --children
1143 $__git_diff_common_options
1144 --pickaxe-all --pickaxe-regex
1149 __git_complete_revlist
1152 __git_merge_options
="
1153 --no-commit --no-stat --log --no-log --squash --strategy
1154 --commit --stat --no-squash --ff --no-ff
1159 __git_complete_strategy
&& return
1161 local cur
="${COMP_WORDS[COMP_CWORD]}"
1164 __gitcomp
"$__git_merge_options"
1167 __gitcomp
"$(__git_refs)"
1172 local cur
="${COMP_WORDS[COMP_CWORD]}"
1176 kdiff3 tkdiff meld xxdiff emerge
1177 vimdiff gvimdiff ecmerge opendiff
1178 " "" "${cur##--tool=}"
1191 __gitcomp
"$(__git_refs)"
1196 local cur
="${COMP_WORDS[COMP_CWORD]}"
1199 __gitcomp
"--dry-run"
1208 __gitcomp
"--tags --all --stdin"
1213 __git_complete_strategy
&& return
1215 local cur
="${COMP_WORDS[COMP_CWORD]}"
1219 --rebase --no-rebase
1220 $__git_merge_options
1221 $__git_fetch_options
1226 __git_complete_remote_or_refspec
1231 local cur
="${COMP_WORDS[COMP_CWORD]}"
1232 case "${COMP_WORDS[COMP_CWORD-1]}" in
1234 __gitcomp
"$(__git_remotes)"
1239 __gitcomp
"$(__git_remotes)" "" "${cur##--repo=}"
1244 --all --mirror --tags --dry-run --force --verbose
1245 --receive-pack= --repo=
1250 __git_complete_remote_or_refspec
1255 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1256 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1257 __gitcomp
"--continue --skip --abort"
1260 __git_complete_strategy
&& return
1263 __gitcomp
"--onto --merge --strategy --interactive"
1266 __gitcomp
"$(__git_refs)"
1271 local cur
="${COMP_WORDS[COMP_CWORD]}"
1274 __gitcomp
"--annotate --bcc --cc --cc-cmd --chain-reply-to
1275 --compose --dry-run --envelope-sender --from --identity
1276 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1277 --no-suppress-from --no-thread --quiet
1278 --signed-off-by-cc --smtp-pass --smtp-server
1279 --smtp-server-port --smtp-ssl --smtp-user --subject
1280 --suppress-cc --suppress-from --thread --to
1281 --validate --no-validate"
1290 local cur
="${COMP_WORDS[COMP_CWORD]}"
1291 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1294 __gitcomp
"$(__git_remotes)"
1298 __gitcomp
"$(__git_refs)"
1302 local remote
="${prv#remote.}"
1303 remote
="${remote%.fetch}"
1304 __gitcomp
"$(__git_refs_remotes "$remote")"
1308 local remote
="${prv#remote.}"
1309 remote
="${remote%.push}"
1310 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1311 for-each-ref --format='%(refname):%(refname)' \
1315 pull.twohead|pull.octopus
)
1316 __gitcomp
"$(__git_merge_strategies)"
1319 color.branch|color.
diff|color.interactive|color.status|color.ui
)
1320 __gitcomp
"always never auto"
1324 __gitcomp
"false true"
1329 normal black red green yellow blue magenta cyan white
1330 bold dim ul blink reverse
1342 --global --system --file=
1343 --list --replace-all
1344 --get --get-all --get-regexp
1345 --add --unset --unset-all
1346 --remove-section --rename-section
1351 local pfx
="${cur%.*}."
1353 __gitcomp
"remote merge mergeoptions" "$pfx" "$cur"
1357 local pfx
="${cur%.*}."
1359 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1363 local pfx
="${cur%.*}."
1366 url proxy fetch push mirror skipDefaultUpdate
1367 receivepack uploadpack tagopt
1372 local pfx
="${cur%.*}."
1374 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1380 branch.autosetupmerge
1381 branch.autosetuprebase
1384 color.branch.current
1395 color.diff.whitespace
1397 color.interactive.header
1398 color.interactive.help
1399 color.interactive.prompt
1403 color.status.changed
1405 color.status.nobranch
1406 color.status.untracked
1407 color.status.updated
1413 core.deltaBaseCacheLimit
1417 core.fsyncobjectfiles
1419 core.ignoreCygwinFSTricks
1421 core.logAllRefUpdates
1422 core.loosecompression
1424 core.packedGitWindowSize
1426 core.preferSymlinkRefs
1429 core.repositoryFormatVersion
1431 core.sharedRepository
1434 core.warnAmbiguousRefs
1437 diff.autorefreshindex
1454 gc.reflogexpireunreachable
1458 gitcvs.dbTableNamePrefix
1468 gui.copyblamethreshold
1472 gui.matchtrackingbranch
1473 gui.newbranchtemplate
1474 gui.pruneduringfetch
1475 gui.spellingdictionary
1491 i18n.logOutputEncoding
1506 mergetool.keepBackup
1508 pack.deltaCacheLimit
1518 receive.denyCurrentBranch
1520 receive.denyNonFastForwards
1523 repack.usedeltabaseoffset
1527 status.relativePaths
1528 status.showUntrackedFiles
1530 transfer.unpackLimit
1541 local subcommands
="add rename rm show prune update set-head"
1542 local subcommand
="$(__git_find_subcommand "$subcommands")"
1543 if [ -z "$subcommand" ]; then
1544 __gitcomp
"$subcommands"
1548 case "$subcommand" in
1549 rename|
rm|show|prune
)
1550 __gitcomp
"$(__git_remotes)"
1553 local i c
='' IFS
=$
'\n'
1554 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1572 __git_has_doubledash
&& return
1574 local cur
="${COMP_WORDS[COMP_CWORD]}"
1577 __gitcomp
"--merge --mixed --hard --soft"
1581 __gitcomp
"$(__git_refs)"
1586 local cur
="${COMP_WORDS[COMP_CWORD]}"
1589 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1593 __gitcomp
"$(__git_refs)"
1598 __git_has_doubledash
&& return
1600 local cur
="${COMP_WORDS[COMP_CWORD]}"
1603 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1612 __git_has_doubledash
&& return
1614 local cur
="${COMP_WORDS[COMP_CWORD]}"
1618 $__git_log_common_options
1619 $__git_log_shortlog_options
1620 --numbered --summary
1625 __git_complete_revlist
1630 __git_has_doubledash
&& return
1632 local cur
="${COMP_WORDS[COMP_CWORD]}"
1635 __gitcomp
"$__git_log_pretty_formats
1636 " "" "${cur##--pretty=}"
1640 __gitcomp
"$__git_log_pretty_formats
1641 " "" "${cur##--format=}"
1645 __gitcomp
"--pretty= --format=
1646 $__git_diff_common_options
1656 local cur
="${COMP_WORDS[COMP_CWORD]}"
1660 --all --remotes --topo-order --current --more=
1661 --list --independent --merge-base --no-name
1662 --sha1-name --topics --reflog
1667 __git_complete_revlist
1672 local subcommands
='save list show apply clear drop pop create branch'
1673 local subcommand
="$(__git_find_subcommand "$subcommands")"
1674 if [ -z "$subcommand" ]; then
1675 __gitcomp
"$subcommands"
1677 local cur
="${COMP_WORDS[COMP_CWORD]}"
1678 case "$subcommand,$cur" in
1680 __gitcomp
"--keep-index"
1685 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1688 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1689 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1690 | sed -n -e 's/:.*//p')"
1701 __git_has_doubledash
&& return
1703 local subcommands
="add status init update summary foreach sync"
1704 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1705 local cur
="${COMP_WORDS[COMP_CWORD]}"
1708 __gitcomp
"--quiet --cached"
1711 __gitcomp
"$subcommands"
1721 init fetch clone rebase dcommit log find-rev
1722 set-tree commit-diff info create-ignore propget
1723 proplist show-ignore show-externals branch tag blame
1726 local subcommand
="$(__git_find_subcommand "$subcommands")"
1727 if [ -z "$subcommand" ]; then
1728 __gitcomp
"$subcommands"
1730 local remote_opts
="--username= --config-dir= --no-auth-cache"
1732 --follow-parent --authors-file= --repack=
1733 --no-metadata --use-svm-props --use-svnsync-props
1734 --log-window-size= --no-checkout --quiet
1735 --repack-flags --use-log-author --localtime
1736 --ignore-paths= $remote_opts
1739 --template= --shared= --trunk= --tags=
1740 --branches= --stdlayout --minimize-url
1741 --no-metadata --use-svm-props --use-svnsync-props
1742 --rewrite-root= --prefix= --use-log-author
1743 --add-author-from $remote_opts
1746 --edit --rmdir --find-copies-harder --copy-similarity=
1749 local cur
="${COMP_WORDS[COMP_CWORD]}"
1750 case "$subcommand,$cur" in
1752 __gitcomp
"--revision= --fetch-all $fc_opts"
1755 __gitcomp
"--revision= $fc_opts $init_opts"
1758 __gitcomp
"$init_opts"
1762 --merge --strategy= --verbose --dry-run
1763 --fetch-all --no-rebase --commit-url
1764 --revision $cmt_opts $fc_opts
1768 __gitcomp
"--stdin $cmt_opts $fc_opts"
1770 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1772 __gitcomp
"--revision="
1776 --limit= --revision= --verbose --incremental
1777 --oneline --show-commit --non-recursive
1778 --authors-file= --color
1783 --merge --verbose --strategy= --local
1784 --fetch-all --dry-run $fc_opts
1788 __gitcomp
"--message= --file= --revision= $cmt_opts"
1794 __gitcomp
"--dry-run --message --tag"
1797 __gitcomp
"--dry-run --message"
1800 __gitcomp
"--git-format"
1804 --config-dir= --ignore-paths= --minimize
1805 --no-auth-cache --username=
1818 while [ $c -lt $COMP_CWORD ]; do
1819 i
="${COMP_WORDS[c]}"
1822 __gitcomp
"$(__git_tags)"
1832 case "${COMP_WORDS[COMP_CWORD-1]}" in
1838 __gitcomp
"$(__git_tags)"
1844 __gitcomp
"$(__git_refs)"
1851 local i c
=1 command __git_dir
1853 while [ $c -lt $COMP_CWORD ]; do
1854 i
="${COMP_WORDS[c]}"
1856 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1857 --bare) __git_dir
="." ;;
1858 --version|
-p|
--paginate) ;;
1859 --help) command="help"; break ;;
1860 *) command="$i"; break ;;
1865 if [ -z "$command" ]; then
1866 case "${COMP_WORDS[COMP_CWORD]}" in
1878 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1883 local expansion
=$
(__git_aliased_command
"$command")
1884 [ "$expansion" ] && command="$expansion"
1889 apply
) _git_apply
;;
1890 archive
) _git_archive
;;
1891 bisect
) _git_bisect
;;
1892 bundle
) _git_bundle
;;
1893 branch
) _git_branch
;;
1894 checkout
) _git_checkout
;;
1895 cherry
) _git_cherry
;;
1896 cherry-pick
) _git_cherry_pick
;;
1897 clean
) _git_clean
;;
1898 clone
) _git_clone
;;
1899 commit
) _git_commit
;;
1900 config
) _git_config
;;
1901 describe
) _git_describe
;;
1903 fetch
) _git_fetch
;;
1904 format-patch
) _git_format_patch
;;
1911 ls-files
) _git_ls_files
;;
1912 ls-remote
) _git_ls_remote
;;
1913 ls-tree
) _git_ls_tree
;;
1915 mergetool
) _git_mergetool
;;
1916 merge-base
) _git_merge_base
;;
1918 name-rev
) _git_name_rev
;;
1921 rebase
) _git_rebase
;;
1922 remote
) _git_remote
;;
1923 reset) _git_reset
;;
1924 revert
) _git_revert
;;
1926 send-email
) _git_send_email
;;
1927 shortlog
) _git_shortlog
;;
1929 show-branch
) _git_show_branch
;;
1930 stash
) _git_stash
;;
1932 submodule
) _git_submodule
;;
1935 whatchanged
) _git_log
;;
1942 __git_has_doubledash
&& return
1944 local cur
="${COMP_WORDS[COMP_CWORD]}"
1945 local g
="$(__gitdir)"
1947 if [ -f "$g/MERGE_HEAD" ]; then
1953 $__git_log_common_options
1954 $__git_log_gitk_options
1960 __git_complete_revlist
1963 complete
-o bashdefault
-o default
-o nospace
-F _git git
2>/dev
/null \
1964 || complete
-o default
-o nospace
-F _git git
1965 complete
-o bashdefault
-o default
-o nospace
-F _gitk gitk
2>/dev
/null \
1966 || complete
-o default
-o nospace
-F _gitk gitk
1968 # The following are necessary only for Cygwin, and only are needed
1969 # when the user has tab-completed the executable name and consequently
1970 # included the '.exe' suffix.
1972 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1973 complete
-o bashdefault
-o default
-o nospace
-F _git git.exe
2>/dev
/null \
1974 || complete
-o default
-o nospace
-F _git git.exe