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
648 --color --no-color --verbose --abbrev= --no-abbrev
649 --track --no-track --contains --merged --no-merged
653 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
654 __gitcomp
"$(__git_heads)"
656 __gitcomp
"$(__git_refs)"
664 local cmd
="${COMP_WORDS[2]}"
665 case "$COMP_CWORD" in
667 __gitcomp
"create list-heads verify unbundle"
675 __git_complete_revlist
684 __git_has_doubledash
&& return
686 __gitcomp
"$(__git_refs)"
691 __gitcomp
"$(__git_refs)"
696 local cur
="${COMP_WORDS[COMP_CWORD]}"
699 __gitcomp
"--edit --no-commit"
702 __gitcomp
"$(__git_refs)"
709 __git_has_doubledash
&& return
711 local cur
="${COMP_WORDS[COMP_CWORD]}"
714 __gitcomp
"--dry-run --quiet"
723 local cur
="${COMP_WORDS[COMP_CWORD]}"
748 __git_has_doubledash
&& return
750 local cur
="${COMP_WORDS[COMP_CWORD]}"
754 --all --author= --signoff --verify --no-verify
755 --edit --amend --include --only --interactive
764 local cur
="${COMP_WORDS[COMP_CWORD]}"
768 --all --tags --contains --abbrev= --candidates=
769 --exact-match --debug --long --match --always
773 __gitcomp
"$(__git_refs)"
778 __git_has_doubledash
&& return
780 local cur
="${COMP_WORDS[COMP_CWORD]}"
783 __gitcomp
"--cached --stat --numstat --shortstat --summary
784 --patch-with-stat --name-only --name-status --color
785 --no-color --color-words --no-renames --check
786 --full-index --binary --abbrev --diff-filter=
787 --find-copies-harder --pickaxe-all --pickaxe-regex
788 --text --ignore-space-at-eol --ignore-space-change
789 --ignore-all-space --exit-code --quiet --ext-diff
791 --no-prefix --src-prefix= --dst-prefix=
792 --base --ours --theirs
793 --inter-hunk-context=
803 local cur
="${COMP_WORDS[COMP_CWORD]}"
805 if [ "$COMP_CWORD" = 2 ]; then
806 __gitcomp
"$(__git_remotes)"
811 case "$COMP_WORDBREAKS" in
813 *) pfx
="${cur%%:*}:" ;;
815 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
818 __gitcomp
"$(__git_refs2 "${COMP_WORDS[2]}")"
826 local cur
="${COMP_WORDS[COMP_CWORD]}"
830 --stdout --attach --thread
832 --numbered --start-number
837 --full-index --binary
840 --no-prefix --src-prefix= --dst-prefix=
841 --inline --suffix= --ignore-if-in-upstream
847 __git_complete_revlist
852 local cur
="${COMP_WORDS[COMP_CWORD]}"
855 __gitcomp
"--prune --aggressive"
864 __git_has_doubledash
&& return
866 local cur
="${COMP_WORDS[COMP_CWORD]}"
871 --text --ignore-case --word-regexp --invert-match
873 --extended-regexp --basic-regexp --fixed-strings
874 --files-with-matches --name-only
875 --files-without-match
877 --and --or --not --all-match
887 local cur
="${COMP_WORDS[COMP_CWORD]}"
890 __gitcomp
"--all --info --man --web"
894 __gitcomp
"$(__git_all_commands)
895 attributes cli core-tutorial cvs-migration
896 diffcore gitk glossary hooks ignore modules
897 repository-layout tutorial tutorial-2
904 local cur
="${COMP_WORDS[COMP_CWORD]}"
908 false true umask group all world everybody
909 " "" "${cur##--shared=}"
913 __gitcomp
"--quiet --bare --template= --shared --shared="
922 __git_has_doubledash
&& return
924 local cur
="${COMP_WORDS[COMP_CWORD]}"
927 __gitcomp
"--cached --deleted --modified --others --ignored
928 --stage --directory --no-empty-directory --unmerged
929 --killed --exclude= --exclude-from=
930 --exclude-per-directory= --exclude-standard
931 --error-unmatch --with-tree= --full-name
932 --abbrev --ignored --exclude-per-directory
942 __gitcomp
"$(__git_remotes)"
952 __git_has_doubledash
&& return
954 local cur
="${COMP_WORDS[COMP_CWORD]}"
958 oneline short medium full fuller email raw
959 " "" "${cur##--pretty=}"
964 relative iso8601 rfc2822 short local default
965 " "" "${cur##--date=}"
970 --max-count= --max-age= --since= --after=
971 --min-age= --before= --until=
972 --root --topo-order --date-order --reverse
974 --abbrev-commit --abbrev=
975 --relative-date --date=
976 --author= --committer= --grep=
978 --pretty= --name-status --name-only --raw
980 --left-right --cherry-pick
982 --stat --numstat --shortstat
983 --decorate --diff-filter=
984 --color-words --walk-reflogs
985 --parents --children --full-history
987 --inter-hunk-context=
992 __git_complete_revlist
997 local cur
="${COMP_WORDS[COMP_CWORD]}"
998 case "${COMP_WORDS[COMP_CWORD-1]}" in
1000 __gitcomp
"$(__git_merge_strategies)"
1005 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1010 --no-commit --no-stat --log --no-log --squash --strategy
1014 __gitcomp
"$(__git_refs)"
1019 local cur
="${COMP_WORDS[COMP_CWORD]}"
1023 kdiff3 tkdiff meld xxdiff emerge
1024 vimdiff gvimdiff ecmerge opendiff
1025 " "" "${cur##--tool=}"
1038 __gitcomp
"$(__git_refs)"
1043 local cur
="${COMP_WORDS[COMP_CWORD]}"
1046 __gitcomp
"--dry-run"
1055 __gitcomp
"--tags --all --stdin"
1060 local cur
="${COMP_WORDS[COMP_CWORD]}"
1062 if [ "$COMP_CWORD" = 2 ]; then
1063 __gitcomp
"$(__git_remotes)"
1065 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")"
1071 local cur
="${COMP_WORDS[COMP_CWORD]}"
1073 if [ "$COMP_CWORD" = 2 ]; then
1074 __gitcomp
"$(__git_remotes)"
1079 case "$COMP_WORDBREAKS" in
1081 *) pfx
="${cur%%:*}:" ;;
1084 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1087 __gitcomp
"$(__git_refs)" + "${cur#+}"
1090 __gitcomp
"$(__git_refs)"
1098 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1099 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1100 __gitcomp
"--continue --skip --abort"
1103 case "${COMP_WORDS[COMP_CWORD-1]}" in
1105 __gitcomp
"$(__git_merge_strategies)"
1110 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1114 __gitcomp
"--onto --merge --strategy --interactive"
1117 __gitcomp
"$(__git_refs)"
1122 local cur
="${COMP_WORDS[COMP_CWORD]}"
1125 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1126 --dry-run --envelope-sender --from --identity
1127 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1128 --no-suppress-from --no-thread --quiet
1129 --signed-off-by-cc --smtp-pass --smtp-server
1130 --smtp-server-port --smtp-ssl --smtp-user --subject
1131 --suppress-cc --suppress-from --thread --to
1132 --validate --no-validate"
1141 local cur
="${COMP_WORDS[COMP_CWORD]}"
1142 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1145 __gitcomp
"$(__git_remotes)"
1149 __gitcomp
"$(__git_refs)"
1153 local remote
="${prv#remote.}"
1154 remote
="${remote%.fetch}"
1155 __gitcomp
"$(__git_refs_remotes "$remote")"
1159 local remote
="${prv#remote.}"
1160 remote
="${remote%.push}"
1161 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1162 for-each-ref --format='%(refname):%(refname)' \
1166 pull.twohead|pull.octopus
)
1167 __gitcomp
"$(__git_merge_strategies)"
1170 color.branch|color.
diff|color.status
)
1171 __gitcomp
"always never auto"
1176 normal black red green yellow blue magenta cyan white
1177 bold dim ul blink reverse
1189 --global --system --file=
1190 --list --replace-all
1191 --get --get-all --get-regexp
1192 --add --unset --unset-all
1193 --remove-section --rename-section
1198 local pfx
="${cur%.*}."
1200 __gitcomp
"remote merge mergeoptions" "$pfx" "$cur"
1204 local pfx
="${cur%.*}."
1206 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1210 local pfx
="${cur%.*}."
1213 url proxy fetch push mirror skipDefaultUpdate
1214 receivepack uploadpack tagopt
1219 local pfx
="${cur%.*}."
1221 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1227 branch.autosetupmerge
1228 branch.autosetuprebase
1231 color.branch.current
1242 color.diff.whitespace
1244 color.interactive.header
1245 color.interactive.help
1246 color.interactive.prompt
1250 color.status.changed
1252 color.status.nobranch
1253 color.status.untracked
1254 color.status.updated
1260 core.deltaBaseCacheLimit
1264 core.fsyncobjectfiles
1266 core.ignoreCygwinFSTricks
1268 core.logAllRefUpdates
1269 core.loosecompression
1271 core.packedGitWindowSize
1273 core.preferSymlinkRefs
1276 core.repositoryFormatVersion
1278 core.sharedRepository
1281 core.warnAmbiguousRefs
1284 diff.autorefreshindex
1301 gc.reflogexpireunreachable
1305 gitcvs.dbTableNamePrefix
1315 gui.copyblamethreshold
1319 gui.matchtrackingbranch
1320 gui.newbranchtemplate
1321 gui.pruneduringfetch
1322 gui.spellingdictionary
1338 i18n.logOutputEncoding
1353 mergetool.keepBackup
1355 pack.deltaCacheLimit
1365 receive.denyCurrentBranch
1367 receive.denyNonFastForwards
1370 repack.usedeltabaseoffset
1374 status.relativePaths
1375 status.showUntrackedFiles
1377 transfer.unpackLimit
1388 local subcommands
="add rm show prune update"
1389 local subcommand
="$(__git_find_subcommand "$subcommands")"
1390 if [ -z "$subcommand" ]; then
1391 __gitcomp
"$subcommands"
1395 case "$subcommand" in
1397 __gitcomp
"$(__git_remotes)"
1400 local i c
='' IFS
=$
'\n'
1401 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1419 __git_has_doubledash
&& return
1421 local cur
="${COMP_WORDS[COMP_CWORD]}"
1424 __gitcomp
"--merge --mixed --hard --soft"
1428 __gitcomp
"$(__git_refs)"
1433 local cur
="${COMP_WORDS[COMP_CWORD]}"
1436 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1440 __gitcomp
"$(__git_refs)"
1445 __git_has_doubledash
&& return
1447 local cur
="${COMP_WORDS[COMP_CWORD]}"
1450 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1459 __git_has_doubledash
&& return
1461 local cur
="${COMP_WORDS[COMP_CWORD]}"
1465 --max-count= --max-age= --since= --after=
1466 --min-age= --before= --until=
1468 --author= --committer= --grep=
1471 --numbered --summary
1476 __git_complete_revlist
1481 __git_has_doubledash
&& return
1483 local cur
="${COMP_WORDS[COMP_CWORD]}"
1487 oneline short medium full fuller email raw
1488 " "" "${cur##--pretty=}"
1492 __gitcomp
"--pretty="
1501 local cur
="${COMP_WORDS[COMP_CWORD]}"
1505 --all --remotes --topo-order --current --more=
1506 --list --independent --merge-base --no-name
1507 --sha1-name --topics --reflog
1512 __git_complete_revlist
1517 local subcommands
='save list show apply clear drop pop create branch'
1518 local subcommand
="$(__git_find_subcommand "$subcommands")"
1519 if [ -z "$subcommand" ]; then
1520 __gitcomp
"$subcommands"
1522 local cur
="${COMP_WORDS[COMP_CWORD]}"
1523 case "$subcommand,$cur" in
1525 __gitcomp
"--keep-index"
1530 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1533 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1534 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1535 | sed -n -e 's/:.*//p')"
1546 __git_has_doubledash
&& return
1548 local subcommands
="add status init update summary foreach sync"
1549 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1550 local cur
="${COMP_WORDS[COMP_CWORD]}"
1553 __gitcomp
"--quiet --cached"
1556 __gitcomp
"$subcommands"
1566 init fetch clone rebase dcommit log find-rev
1567 set-tree commit-diff info create-ignore propget
1568 proplist show-ignore show-externals
1570 local subcommand
="$(__git_find_subcommand "$subcommands")"
1571 if [ -z "$subcommand" ]; then
1572 __gitcomp
"$subcommands"
1574 local remote_opts
="--username= --config-dir= --no-auth-cache"
1576 --follow-parent --authors-file= --repack=
1577 --no-metadata --use-svm-props --use-svnsync-props
1578 --log-window-size= --no-checkout --quiet
1579 --repack-flags --user-log-author $remote_opts
1582 --template= --shared= --trunk= --tags=
1583 --branches= --stdlayout --minimize-url
1584 --no-metadata --use-svm-props --use-svnsync-props
1585 --rewrite-root= $remote_opts
1588 --edit --rmdir --find-copies-harder --copy-similarity=
1591 local cur
="${COMP_WORDS[COMP_CWORD]}"
1592 case "$subcommand,$cur" in
1594 __gitcomp
"--revision= --fetch-all $fc_opts"
1597 __gitcomp
"--revision= $fc_opts $init_opts"
1600 __gitcomp
"$init_opts"
1604 --merge --strategy= --verbose --dry-run
1605 --fetch-all --no-rebase $cmt_opts $fc_opts
1609 __gitcomp
"--stdin $cmt_opts $fc_opts"
1611 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1613 __gitcomp
"--revision="
1617 --limit= --revision= --verbose --incremental
1618 --oneline --show-commit --non-recursive
1624 --merge --verbose --strategy= --local
1625 --fetch-all $fc_opts
1629 __gitcomp
"--message= --file= --revision= $cmt_opts"
1644 while [ $c -lt $COMP_CWORD ]; do
1645 i
="${COMP_WORDS[c]}"
1648 __gitcomp
"$(__git_tags)"
1658 case "${COMP_WORDS[COMP_CWORD-1]}" in
1664 __gitcomp
"$(__git_tags)"
1670 __gitcomp
"$(__git_refs)"
1677 local i c
=1 command __git_dir
1679 while [ $c -lt $COMP_CWORD ]; do
1680 i
="${COMP_WORDS[c]}"
1682 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1683 --bare) __git_dir
="." ;;
1684 --version|
-p|
--paginate) ;;
1685 --help) command="help"; break ;;
1686 *) command="$i"; break ;;
1691 if [ -z "$command" ]; then
1692 case "${COMP_WORDS[COMP_CWORD]}" in
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