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.
39 # *) Read Documentation/SubmittingPatches
40 # *) Send all patches to the current maintainer:
42 # "Shawn O. Pearce" <spearce@spearce.org>
44 # *) Always CC the Git mailing list:
49 case "$COMP_WORDBREAKS" in
51 *) COMP_WORDBREAKS
="$COMP_WORDBREAKS:"
54 # __gitdir accepts 0 or 1 arguments (i.e., location)
55 # returns location of .git repo
58 if [ -z "${1-}" ]; then
59 if [ -n "$__git_dir" ]; then
61 elif [ -d .git
]; then
64 git rev-parse
--git-dir 2>/dev
/null
66 elif [ -d "$1/.git" ]; then
73 # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
74 # returns text to add to bash PS1 prompt (includes branch name)
77 local g
="$(git rev-parse --git-dir 2>/dev/null)"
81 if [ -d "$g/rebase-apply" ]
83 if test -f "$g/rebase-apply/rebasing"
86 elif test -f "$g/rebase-apply/applying"
92 b
="$(git symbolic-ref HEAD 2>/dev/null)"
93 elif [ -f "$g/rebase-merge/interactive" ]
96 b
="$(cat "$g/rebase-merge
/head-name
")"
97 elif [ -d "$g/rebase-merge" ]
100 b
="$(cat "$g/rebase-merge
/head-name
")"
101 elif [ -f "$g/MERGE_HEAD" ]
104 b
="$(git symbolic-ref HEAD 2>/dev/null)"
106 if [ -f "$g/BISECT_LOG" ]
110 if ! b
="$(git symbolic-ref HEAD 2>/dev/null)"
112 if ! b
="$(git describe --exact-match HEAD 2>/dev/null)"
114 b
="$(cut -c1-7 "$g/HEAD
")..."
119 if [ -n "${1-}" ]; then
120 printf "$1" "${b##refs/heads/}$r"
122 printf " (%s)" "${b##refs/heads/}$r"
127 # __gitcomp_1 requires 2 arguments
130 local c IFS
=' '$
'\t'$
'\n'
133 --*=*) printf %s$
'\n' "$c$2" ;;
134 *.
) printf %s$
'\n' "$c$2" ;;
135 *) printf %s$
'\n' "$c$2 " ;;
140 # __gitcomp accepts 1, 2, 3, or 4 arguments
141 # generates completion reply with compgen
144 local cur
="${COMP_WORDS[COMP_CWORD]}"
145 if [ $# -gt 2 ]; then
154 COMPREPLY
=($
(compgen
-P "${2-}" \
155 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
161 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
164 local cmd i is_hash
=y dir
="$(__gitdir "${1-}")"
165 if [ -d "$dir" ]; then
166 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
170 for i
in $
(git ls-remote
"${1-}" 2>/dev
/null
); do
171 case "$is_hash,$i" in
174 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
175 n
,*) is_hash
=y
; echo "$i" ;;
180 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
183 local cmd i is_hash
=y dir
="$(__gitdir "${1-}")"
184 if [ -d "$dir" ]; then
185 git
--git-dir="$dir" for-each-ref
--format='%(refname:short)' \
189 for i
in $
(git ls-remote
"${1-}" 2>/dev
/null
); do
190 case "$is_hash,$i" in
193 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
194 n
,*) is_hash
=y
; echo "$i" ;;
199 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
202 local i is_hash
=y dir
="$(__gitdir "${1-}")"
203 local cur
="${COMP_WORDS[COMP_CWORD]}" format refs
204 if [ -d "$dir" ]; then
211 if [ -e "$dir/HEAD" ]; then echo HEAD
; fi
212 format
="refname:short"
213 refs
="refs/tags refs/heads refs/remotes"
216 git
--git-dir="$dir" for-each-ref
--format="%($format)" \
220 for i
in $
(git ls-remote
"$dir" 2>/dev
/null
); do
221 case "$is_hash,$i" in
224 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
225 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
226 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
227 n
,*) is_hash
=y
; echo "$i" ;;
232 # __git_refs2 requires 1 argument (to pass to __git_refs)
236 for i
in $
(__git_refs
"$1"); do
241 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
242 __git_refs_remotes
()
244 local cmd i is_hash
=y
245 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
246 case "$is_hash,$i" in
249 echo "$i:refs/remotes/$1/${i#refs/heads/}"
253 n
,refs
/tags
/*) is_hash
=y
;;
261 local i ngoff IFS
=$
'\n' d
="$(__gitdir)"
262 shopt -q nullglob || ngoff
=1
264 for i
in "$d/remotes"/*; do
265 echo ${i#$d/remotes/}
267 [ "$ngoff" ] && shopt -u nullglob
268 for i
in $
(git
--git-dir="$d" config
--list); do
278 __git_merge_strategies
()
280 if [ -n "$__git_merge_strategylist" ]; then
281 echo "$__git_merge_strategylist"
284 git merge
-s help 2>&1 |
285 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
293 __git_merge_strategylist
=
294 __git_merge_strategylist
=$
(__git_merge_strategies
2>/dev
/null
)
296 __git_complete_file
()
298 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
315 case "$COMP_WORDBREAKS" in
317 *) pfx
="$ref:$pfx" ;;
321 COMPREPLY
=($
(compgen
-P "$pfx" \
322 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
323 | sed '/^100... blob /{
339 __gitcomp
"$(__git_refs)"
344 __git_complete_revlist
()
346 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
351 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
356 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
359 __gitcomp
"$(__git_refs)"
364 __git_all_commands
()
366 if [ -n "$__git_all_commandlist" ]; then
367 echo "$__git_all_commandlist"
371 for i
in $
(git
help -a|
egrep '^ ')
374 *--*) : helper pattern
;;
379 __git_all_commandlist
=
380 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
382 __git_porcelain_commands
()
384 if [ -n "$__git_porcelain_commandlist" ]; then
385 echo "$__git_porcelain_commandlist"
389 for i
in "help" $
(__git_all_commands
)
392 *--*) : helper pattern
;;
393 applymbox
) : ask gittus
;;
394 applypatch
) : ask gittus
;;
395 archimport
) : import
;;
396 cat-file
) : plumbing
;;
397 check-attr
) : plumbing
;;
398 check-ref-format
) : plumbing
;;
399 checkout-index
) : plumbing
;;
400 commit-tree
) : plumbing
;;
401 count-objects
) : infrequent
;;
402 cvsexportcommit
) : export;;
403 cvsimport
) : import
;;
404 cvsserver
) : daemon
;;
406 diff-files
) : plumbing
;;
407 diff-index
) : plumbing
;;
408 diff-tree
) : plumbing
;;
409 fast-import
) : import
;;
410 fast-export
) : export;;
411 fsck-objects
) : plumbing
;;
412 fetch-pack
) : plumbing
;;
413 fmt-merge-msg
) : plumbing
;;
414 for-each-ref
) : plumbing
;;
415 hash-object
) : plumbing
;;
416 http-
*) : transport
;;
417 index-pack
) : plumbing
;;
418 init-db
) : deprecated
;;
419 local-fetch
) : plumbing
;;
420 lost-found
) : infrequent
;;
421 ls-files
) : plumbing
;;
422 ls-remote
) : plumbing
;;
423 ls-tree
) : plumbing
;;
424 mailinfo
) : plumbing
;;
425 mailsplit
) : plumbing
;;
426 merge-
*) : plumbing
;;
429 pack-objects
) : plumbing
;;
430 pack-redundant
) : plumbing
;;
431 pack-refs
) : plumbing
;;
432 parse-remote
) : plumbing
;;
433 patch-id
) : plumbing
;;
434 peek-remote
) : plumbing
;;
436 prune-packed
) : plumbing
;;
437 quiltimport
) : import
;;
438 read-tree
) : plumbing
;;
439 receive-pack
) : plumbing
;;
441 repo-config
) : deprecated
;;
443 rev-list
) : plumbing
;;
444 rev-parse
) : plumbing
;;
445 runstatus
) : plumbing
;;
446 sh-setup
) : internal
;;
448 show-ref
) : plumbing
;;
449 send-pack
) : plumbing
;;
450 show-index
) : plumbing
;;
452 stripspace
) : plumbing
;;
453 symbolic-ref
) : plumbing
;;
454 tar-tree
) : deprecated
;;
455 unpack-file
) : plumbing
;;
456 unpack-objects
) : plumbing
;;
457 update-index
) : plumbing
;;
458 update-ref
) : plumbing
;;
459 update-server-info
) : daemon
;;
460 upload-archive
) : plumbing
;;
461 upload-pack
) : plumbing
;;
462 write-tree
) : plumbing
;;
464 verify-pack
) : infrequent
;;
465 verify-tag
) : plumbing
;;
470 __git_porcelain_commandlist
=
471 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
476 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
486 # __git_aliased_command requires 1 argument
487 __git_aliased_command
()
489 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
490 config
--get "alias.$1")
491 for word
in $cmdline; do
492 if [ "${word##-*}" ]; then
499 # __git_find_subcommand requires 1 argument
500 __git_find_subcommand
()
502 local word subcommand c
=1
504 while [ $c -lt $COMP_CWORD ]; do
505 word
="${COMP_WORDS[c]}"
506 for subcommand
in $1; do
507 if [ "$subcommand" = "$word" ]; then
516 __git_has_doubledash
()
519 while [ $c -lt $COMP_CWORD ]; do
520 if [ "--" = "${COMP_WORDS[c]}" ]; then
528 __git_whitespacelist
="nowarn warn error error-all fix"
532 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
533 if [ -d "$dir"/rebase-apply
]; then
534 __gitcomp
"--skip --resolved --abort"
539 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
544 --signoff --utf8 --binary --3way --interactive
554 local cur
="${COMP_WORDS[COMP_CWORD]}"
557 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
562 --stat --numstat --summary --check --index
563 --cached --index-info --reverse --reject --unidiff-zero
564 --apply --no-add --exclude=
565 --whitespace= --inaccurate-eof --verbose
574 __git_has_doubledash
&& return
576 local cur
="${COMP_WORDS[COMP_CWORD]}"
580 --interactive --refresh --patch --update --dry-run
581 --ignore-errors --intent-to-add
590 local cur
="${COMP_WORDS[COMP_CWORD]}"
593 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
597 __gitcomp
"$(__git_remotes)" "" "${cur##--remote=}"
602 --format= --list --verbose
603 --prefix= --remote= --exec=
613 __git_has_doubledash
&& return
615 local subcommands
="start bad good skip reset visualize replay log run"
616 local subcommand
="$(__git_find_subcommand "$subcommands")"
617 if [ -z "$subcommand" ]; then
618 __gitcomp
"$subcommands"
622 case "$subcommand" in
624 __gitcomp
"$(__git_refs)"
634 local i c
=1 only_local_ref
="n" has_r
="n"
636 while [ $c -lt $COMP_CWORD ]; do
639 -d|
-m) only_local_ref
="y" ;;
645 case "${COMP_WORDS[COMP_CWORD]}" in
646 --*=*) COMPREPLY
=() ;;
649 --color --no-color --verbose --abbrev= --no-abbrev
650 --track --no-track --contains --merged --no-merged
654 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
655 __gitcomp
"$(__git_heads)"
657 __gitcomp
"$(__git_refs)"
665 local cmd
="${COMP_WORDS[2]}"
666 case "$COMP_CWORD" in
668 __gitcomp
"create list-heads verify unbundle"
676 __git_complete_revlist
685 __git_has_doubledash
&& return
687 __gitcomp
"$(__git_refs)"
692 __gitcomp
"$(__git_refs)"
697 local cur
="${COMP_WORDS[COMP_CWORD]}"
700 __gitcomp
"--edit --no-commit"
703 __gitcomp
"$(__git_refs)"
710 __git_has_doubledash
&& return
712 local cur
="${COMP_WORDS[COMP_CWORD]}"
715 __gitcomp
"--dry-run --quiet"
724 local cur
="${COMP_WORDS[COMP_CWORD]}"
749 __git_has_doubledash
&& return
751 local cur
="${COMP_WORDS[COMP_CWORD]}"
755 --all --author= --signoff --verify --no-verify
756 --edit --amend --include --only --interactive
765 local cur
="${COMP_WORDS[COMP_CWORD]}"
769 --all --tags --contains --abbrev= --candidates=
770 --exact-match --debug --long --match --always
774 __gitcomp
"$(__git_refs)"
779 __git_has_doubledash
&& return
781 local cur
="${COMP_WORDS[COMP_CWORD]}"
784 __gitcomp
"--cached --stat --numstat --shortstat --summary
785 --patch-with-stat --name-only --name-status --color
786 --no-color --color-words --no-renames --check
787 --full-index --binary --abbrev --diff-filter=
788 --find-copies-harder --pickaxe-all --pickaxe-regex
789 --text --ignore-space-at-eol --ignore-space-change
790 --ignore-all-space --exit-code --quiet --ext-diff
792 --no-prefix --src-prefix= --dst-prefix=
793 --base --ours --theirs
794 --inter-hunk-context=
804 local cur
="${COMP_WORDS[COMP_CWORD]}"
806 if [ "$COMP_CWORD" = 2 ]; then
807 __gitcomp
"$(__git_remotes)"
812 case "$COMP_WORDBREAKS" in
814 *) pfx
="${cur%%:*}:" ;;
816 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
819 __gitcomp
"$(__git_refs2 "${COMP_WORDS[2]}")"
827 local cur
="${COMP_WORDS[COMP_CWORD]}"
831 --stdout --attach --thread
833 --numbered --start-number
838 --full-index --binary
841 --no-prefix --src-prefix= --dst-prefix=
846 __git_complete_revlist
851 local cur
="${COMP_WORDS[COMP_CWORD]}"
854 __gitcomp
"--prune --aggressive"
863 __git_has_doubledash
&& return
865 local cur
="${COMP_WORDS[COMP_CWORD]}"
870 --text --ignore-case --word-regexp --invert-match
872 --extended-regexp --basic-regexp --fixed-strings
873 --files-with-matches --name-only
874 --files-without-match
876 --and --or --not --all-match
886 local cur
="${COMP_WORDS[COMP_CWORD]}"
889 __gitcomp
"--all --info --man --web"
893 __gitcomp
"$(__git_all_commands)
894 attributes cli core-tutorial cvs-migration
895 diffcore gitk glossary hooks ignore modules
896 repository-layout tutorial tutorial-2
903 local cur
="${COMP_WORDS[COMP_CWORD]}"
907 false true umask group all world everybody
908 " "" "${cur##--shared=}"
912 __gitcomp
"--quiet --bare --template= --shared --shared="
921 __git_has_doubledash
&& return
923 local cur
="${COMP_WORDS[COMP_CWORD]}"
926 __gitcomp
"--cached --deleted --modified --others --ignored
927 --stage --directory --no-empty-directory --unmerged
928 --killed --exclude= --exclude-from=
929 --exclude-per-directory= --exclude-standard
930 --error-unmatch --with-tree= --full-name
931 --abbrev --ignored --exclude-per-directory
941 __gitcomp
"$(__git_remotes)"
951 __git_has_doubledash
&& return
953 local cur
="${COMP_WORDS[COMP_CWORD]}"
957 oneline short medium full fuller email raw
958 " "" "${cur##--pretty=}"
963 relative iso8601 rfc2822 short local default
964 " "" "${cur##--date=}"
969 --max-count= --max-age= --since= --after=
970 --min-age= --before= --until=
971 --root --topo-order --date-order --reverse
973 --abbrev-commit --abbrev=
974 --relative-date --date=
975 --author= --committer= --grep=
977 --pretty= --name-status --name-only --raw
979 --left-right --cherry-pick
981 --stat --numstat --shortstat
982 --decorate --diff-filter=
983 --color-words --walk-reflogs
984 --parents --children --full-history
986 --inter-hunk-context=
991 __git_complete_revlist
996 local cur
="${COMP_WORDS[COMP_CWORD]}"
997 case "${COMP_WORDS[COMP_CWORD-1]}" in
999 __gitcomp
"$(__git_merge_strategies)"
1004 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1009 --no-commit --no-stat --log --no-log --squash --strategy
1013 __gitcomp
"$(__git_refs)"
1018 local cur
="${COMP_WORDS[COMP_CWORD]}"
1022 kdiff3 tkdiff meld xxdiff emerge
1023 vimdiff gvimdiff ecmerge opendiff
1024 " "" "${cur##--tool=}"
1037 __gitcomp
"$(__git_refs)"
1042 local cur
="${COMP_WORDS[COMP_CWORD]}"
1045 __gitcomp
"--dry-run"
1054 __gitcomp
"--tags --all --stdin"
1059 local cur
="${COMP_WORDS[COMP_CWORD]}"
1061 if [ "$COMP_CWORD" = 2 ]; then
1062 __gitcomp
"$(__git_remotes)"
1064 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")"
1070 local cur
="${COMP_WORDS[COMP_CWORD]}"
1072 if [ "$COMP_CWORD" = 2 ]; then
1073 __gitcomp
"$(__git_remotes)"
1078 case "$COMP_WORDBREAKS" in
1080 *) pfx
="${cur%%:*}:" ;;
1083 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1086 __gitcomp
"$(__git_refs)" + "${cur#+}"
1089 __gitcomp
"$(__git_refs)"
1097 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1098 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1099 __gitcomp
"--continue --skip --abort"
1102 case "${COMP_WORDS[COMP_CWORD-1]}" in
1104 __gitcomp
"$(__git_merge_strategies)"
1109 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1113 __gitcomp
"--onto --merge --strategy --interactive"
1116 __gitcomp
"$(__git_refs)"
1121 local cur
="${COMP_WORDS[COMP_CWORD]}"
1124 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1125 --dry-run --envelope-sender --from --identity
1126 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1127 --no-suppress-from --no-thread --quiet
1128 --signed-off-by-cc --smtp-pass --smtp-server
1129 --smtp-server-port --smtp-ssl --smtp-user --subject
1130 --suppress-cc --suppress-from --thread --to
1131 --validate --no-validate"
1140 local cur
="${COMP_WORDS[COMP_CWORD]}"
1141 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1144 __gitcomp
"$(__git_remotes)"
1148 __gitcomp
"$(__git_refs)"
1152 local remote
="${prv#remote.}"
1153 remote
="${remote%.fetch}"
1154 __gitcomp
"$(__git_refs_remotes "$remote")"
1158 local remote
="${prv#remote.}"
1159 remote
="${remote%.push}"
1160 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1161 for-each-ref --format='%(refname):%(refname)' \
1165 pull.twohead|pull.octopus
)
1166 __gitcomp
"$(__git_merge_strategies)"
1169 color.branch|color.
diff|color.status
)
1170 __gitcomp
"always never auto"
1175 normal black red green yellow blue magenta cyan white
1176 bold dim ul blink reverse
1188 --global --system --file=
1189 --list --replace-all
1190 --get --get-all --get-regexp
1191 --add --unset --unset-all
1192 --remove-section --rename-section
1197 local pfx
="${cur%.*}."
1199 __gitcomp
"remote merge mergeoptions" "$pfx" "$cur"
1203 local pfx
="${cur%.*}."
1205 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1209 local pfx
="${cur%.*}."
1212 url proxy fetch push mirror skipDefaultUpdate
1213 receivepack uploadpack tagopt
1218 local pfx
="${cur%.*}."
1220 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1226 branch.autosetupmerge
1227 branch.autosetuprebase
1230 color.branch.current
1241 color.diff.whitespace
1243 color.interactive.header
1244 color.interactive.help
1245 color.interactive.prompt
1249 color.status.changed
1251 color.status.nobranch
1252 color.status.untracked
1253 color.status.updated
1259 core.deltaBaseCacheLimit
1263 core.fsyncobjectfiles
1265 core.ignoreCygwinFSTricks
1267 core.logAllRefUpdates
1268 core.loosecompression
1270 core.packedGitWindowSize
1272 core.preferSymlinkRefs
1275 core.repositoryFormatVersion
1277 core.sharedRepository
1280 core.warnAmbiguousRefs
1283 diff.autorefreshindex
1300 gc.reflogexpireunreachable
1304 gitcvs.dbTableNamePrefix
1314 gui.copyblamethreshold
1318 gui.matchtrackingbranch
1319 gui.newbranchtemplate
1320 gui.pruneduringfetch
1321 gui.spellingdictionary
1337 i18n.logOutputEncoding
1352 mergetool.keepBackup
1354 pack.deltaCacheLimit
1364 receive.denyCurrentBranch
1366 receive.denyNonFastForwards
1369 repack.usedeltabaseoffset
1373 status.relativePaths
1374 status.showUntrackedFiles
1376 transfer.unpackLimit
1387 local subcommands
="add rm show prune update"
1388 local subcommand
="$(__git_find_subcommand "$subcommands")"
1389 if [ -z "$subcommand" ]; then
1390 __gitcomp
"$subcommands"
1394 case "$subcommand" in
1396 __gitcomp
"$(__git_remotes)"
1399 local i c
='' IFS
=$
'\n'
1400 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1418 __git_has_doubledash
&& return
1420 local cur
="${COMP_WORDS[COMP_CWORD]}"
1423 __gitcomp
"--merge --mixed --hard --soft"
1427 __gitcomp
"$(__git_refs)"
1432 local cur
="${COMP_WORDS[COMP_CWORD]}"
1435 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1439 __gitcomp
"$(__git_refs)"
1444 __git_has_doubledash
&& return
1446 local cur
="${COMP_WORDS[COMP_CWORD]}"
1449 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1458 __git_has_doubledash
&& return
1460 local cur
="${COMP_WORDS[COMP_CWORD]}"
1464 --max-count= --max-age= --since= --after=
1465 --min-age= --before= --until=
1467 --author= --committer= --grep=
1470 --numbered --summary
1475 __git_complete_revlist
1480 __git_has_doubledash
&& return
1482 local cur
="${COMP_WORDS[COMP_CWORD]}"
1486 oneline short medium full fuller email raw
1487 " "" "${cur##--pretty=}"
1491 __gitcomp
"--pretty="
1500 local cur
="${COMP_WORDS[COMP_CWORD]}"
1504 --all --remotes --topo-order --current --more=
1505 --list --independent --merge-base --no-name
1506 --sha1-name --topics --reflog
1511 __git_complete_revlist
1516 local subcommands
='save list show apply clear drop pop create branch'
1517 local subcommand
="$(__git_find_subcommand "$subcommands")"
1518 if [ -z "$subcommand" ]; then
1519 __gitcomp
"$subcommands"
1521 local cur
="${COMP_WORDS[COMP_CWORD]}"
1522 case "$subcommand,$cur" in
1524 __gitcomp
"--keep-index"
1529 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1532 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1533 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1534 | sed -n -e 's/:.*//p')"
1545 __git_has_doubledash
&& return
1547 local subcommands
="add status init update summary foreach sync"
1548 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1549 local cur
="${COMP_WORDS[COMP_CWORD]}"
1552 __gitcomp
"--quiet --cached"
1555 __gitcomp
"$subcommands"
1565 init fetch clone rebase dcommit log find-rev
1566 set-tree commit-diff info create-ignore propget
1567 proplist show-ignore show-externals
1569 local subcommand
="$(__git_find_subcommand "$subcommands")"
1570 if [ -z "$subcommand" ]; then
1571 __gitcomp
"$subcommands"
1573 local remote_opts
="--username= --config-dir= --no-auth-cache"
1575 --follow-parent --authors-file= --repack=
1576 --no-metadata --use-svm-props --use-svnsync-props
1577 --log-window-size= --no-checkout --quiet
1578 --repack-flags --user-log-author $remote_opts
1581 --template= --shared= --trunk= --tags=
1582 --branches= --stdlayout --minimize-url
1583 --no-metadata --use-svm-props --use-svnsync-props
1584 --rewrite-root= $remote_opts
1587 --edit --rmdir --find-copies-harder --copy-similarity=
1590 local cur
="${COMP_WORDS[COMP_CWORD]}"
1591 case "$subcommand,$cur" in
1593 __gitcomp
"--revision= --fetch-all $fc_opts"
1596 __gitcomp
"--revision= $fc_opts $init_opts"
1599 __gitcomp
"$init_opts"
1603 --merge --strategy= --verbose --dry-run
1604 --fetch-all --no-rebase $cmt_opts $fc_opts
1608 __gitcomp
"--stdin $cmt_opts $fc_opts"
1610 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1612 __gitcomp
"--revision="
1616 --limit= --revision= --verbose --incremental
1617 --oneline --show-commit --non-recursive
1623 --merge --verbose --strategy= --local
1624 --fetch-all $fc_opts
1628 __gitcomp
"--message= --file= --revision= $cmt_opts"
1643 while [ $c -lt $COMP_CWORD ]; do
1644 i
="${COMP_WORDS[c]}"
1647 __gitcomp
"$(__git_tags)"
1657 case "${COMP_WORDS[COMP_CWORD-1]}" in
1663 __gitcomp
"$(__git_tags)"
1669 __gitcomp
"$(__git_refs)"
1676 local i c
=1 command __git_dir
1678 while [ $c -lt $COMP_CWORD ]; do
1679 i
="${COMP_WORDS[c]}"
1681 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1682 --bare) __git_dir
="." ;;
1683 --version|
-p|
--paginate) ;;
1684 --help) command="help"; break ;;
1685 *) command="$i"; break ;;
1690 if [ -z "$command" ]; then
1691 case "${COMP_WORDS[COMP_CWORD]}" in
1692 --*=*) COMPREPLY
=() ;;
1704 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1709 local expansion
=$
(__git_aliased_command
"$command")
1710 [ "$expansion" ] && command="$expansion"
1715 apply
) _git_apply
;;
1716 archive
) _git_archive
;;
1717 bisect
) _git_bisect
;;
1718 bundle
) _git_bundle
;;
1719 branch
) _git_branch
;;
1720 checkout
) _git_checkout
;;
1721 cherry
) _git_cherry
;;
1722 cherry-pick
) _git_cherry_pick
;;
1723 clean
) _git_clean
;;
1724 clone
) _git_clone
;;
1725 commit
) _git_commit
;;
1726 config
) _git_config
;;
1727 describe
) _git_describe
;;
1729 fetch
) _git_fetch
;;
1730 format-patch
) _git_format_patch
;;
1736 ls-files
) _git_ls_files
;;
1737 ls-remote
) _git_ls_remote
;;
1738 ls-tree
) _git_ls_tree
;;
1740 mergetool
) _git_mergetool
;;
1741 merge-base
) _git_merge_base
;;
1743 name-rev
) _git_name_rev
;;
1746 rebase
) _git_rebase
;;
1747 remote
) _git_remote
;;
1748 reset) _git_reset
;;
1749 revert
) _git_revert
;;
1751 send-email
) _git_send_email
;;
1752 shortlog
) _git_shortlog
;;
1754 show-branch
) _git_show_branch
;;
1755 stash
) _git_stash
;;
1757 submodule
) _git_submodule
;;
1760 whatchanged
) _git_log
;;
1767 __git_has_doubledash
&& return
1769 local cur
="${COMP_WORDS[COMP_CWORD]}"
1770 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1772 if [ -f $g/MERGE_HEAD
]; then
1777 __gitcomp
"--not --all $merge"
1781 __git_complete_revlist
1784 complete
-o bashdefault
-o default
-o nospace
-F _git git
2>/dev
/null \
1785 || complete
-o default
-o nospace
-F _git git
1786 complete
-o bashdefault
-o default
-o nospace
-F _gitk gitk
2>/dev
/null \
1787 || complete
-o default
-o nospace
-F _gitk gitk
1789 # The following are necessary only for Cygwin, and only are needed
1790 # when the user has tab-completed the executable name and consequently
1791 # included the '.exe' suffix.
1793 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1794 complete
-o bashdefault
-o default
-o nospace
-F _git git.exe
2>/dev
/null \
1795 || complete
-o default
-o nospace
-F _git git.exe