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)"
950 __git_log_pretty_formats
="oneline short medium full fuller email raw format:"
954 __git_has_doubledash
&& return
956 local cur
="${COMP_WORDS[COMP_CWORD]}"
959 __gitcomp
"$__git_log_pretty_formats
960 " "" "${cur##--pretty=}"
965 relative iso8601 rfc2822 short local default
966 " "" "${cur##--date=}"
971 --max-count= --max-age= --since= --after=
972 --min-age= --before= --until=
973 --root --topo-order --date-order --reverse
975 --abbrev-commit --abbrev=
976 --relative-date --date=
977 --author= --committer= --grep=
979 --pretty= --name-status --name-only --raw
981 --left-right --cherry-pick
983 --stat --numstat --shortstat
984 --decorate --diff-filter=
985 --color-words --walk-reflogs
986 --parents --children --full-history
988 --inter-hunk-context=
993 __git_complete_revlist
998 local cur
="${COMP_WORDS[COMP_CWORD]}"
999 case "${COMP_WORDS[COMP_CWORD-1]}" in
1001 __gitcomp
"$(__git_merge_strategies)"
1006 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1011 --no-commit --no-stat --log --no-log --squash --strategy
1015 __gitcomp
"$(__git_refs)"
1020 local cur
="${COMP_WORDS[COMP_CWORD]}"
1024 kdiff3 tkdiff meld xxdiff emerge
1025 vimdiff gvimdiff ecmerge opendiff
1026 " "" "${cur##--tool=}"
1039 __gitcomp
"$(__git_refs)"
1044 local cur
="${COMP_WORDS[COMP_CWORD]}"
1047 __gitcomp
"--dry-run"
1056 __gitcomp
"--tags --all --stdin"
1061 local cur
="${COMP_WORDS[COMP_CWORD]}"
1063 if [ "$COMP_CWORD" = 2 ]; then
1064 __gitcomp
"$(__git_remotes)"
1066 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")"
1072 local cur
="${COMP_WORDS[COMP_CWORD]}"
1074 if [ "$COMP_CWORD" = 2 ]; then
1075 __gitcomp
"$(__git_remotes)"
1080 case "$COMP_WORDBREAKS" in
1082 *) pfx
="${cur%%:*}:" ;;
1085 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1088 __gitcomp
"$(__git_refs)" + "${cur#+}"
1091 __gitcomp
"$(__git_refs)"
1099 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1100 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1101 __gitcomp
"--continue --skip --abort"
1104 case "${COMP_WORDS[COMP_CWORD-1]}" in
1106 __gitcomp
"$(__git_merge_strategies)"
1111 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1115 __gitcomp
"--onto --merge --strategy --interactive"
1118 __gitcomp
"$(__git_refs)"
1123 local cur
="${COMP_WORDS[COMP_CWORD]}"
1126 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1127 --dry-run --envelope-sender --from --identity
1128 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1129 --no-suppress-from --no-thread --quiet
1130 --signed-off-by-cc --smtp-pass --smtp-server
1131 --smtp-server-port --smtp-ssl --smtp-user --subject
1132 --suppress-cc --suppress-from --thread --to
1133 --validate --no-validate"
1142 local cur
="${COMP_WORDS[COMP_CWORD]}"
1143 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1146 __gitcomp
"$(__git_remotes)"
1150 __gitcomp
"$(__git_refs)"
1154 local remote
="${prv#remote.}"
1155 remote
="${remote%.fetch}"
1156 __gitcomp
"$(__git_refs_remotes "$remote")"
1160 local remote
="${prv#remote.}"
1161 remote
="${remote%.push}"
1162 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1163 for-each-ref --format='%(refname):%(refname)' \
1167 pull.twohead|pull.octopus
)
1168 __gitcomp
"$(__git_merge_strategies)"
1171 color.branch|color.
diff|color.status
)
1172 __gitcomp
"always never auto"
1177 normal black red green yellow blue magenta cyan white
1178 bold dim ul blink reverse
1190 --global --system --file=
1191 --list --replace-all
1192 --get --get-all --get-regexp
1193 --add --unset --unset-all
1194 --remove-section --rename-section
1199 local pfx
="${cur%.*}."
1201 __gitcomp
"remote merge mergeoptions" "$pfx" "$cur"
1205 local pfx
="${cur%.*}."
1207 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1211 local pfx
="${cur%.*}."
1214 url proxy fetch push mirror skipDefaultUpdate
1215 receivepack uploadpack tagopt
1220 local pfx
="${cur%.*}."
1222 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1228 branch.autosetupmerge
1229 branch.autosetuprebase
1232 color.branch.current
1243 color.diff.whitespace
1245 color.interactive.header
1246 color.interactive.help
1247 color.interactive.prompt
1251 color.status.changed
1253 color.status.nobranch
1254 color.status.untracked
1255 color.status.updated
1261 core.deltaBaseCacheLimit
1265 core.fsyncobjectfiles
1267 core.ignoreCygwinFSTricks
1269 core.logAllRefUpdates
1270 core.loosecompression
1272 core.packedGitWindowSize
1274 core.preferSymlinkRefs
1277 core.repositoryFormatVersion
1279 core.sharedRepository
1282 core.warnAmbiguousRefs
1285 diff.autorefreshindex
1302 gc.reflogexpireunreachable
1306 gitcvs.dbTableNamePrefix
1316 gui.copyblamethreshold
1320 gui.matchtrackingbranch
1321 gui.newbranchtemplate
1322 gui.pruneduringfetch
1323 gui.spellingdictionary
1339 i18n.logOutputEncoding
1354 mergetool.keepBackup
1356 pack.deltaCacheLimit
1366 receive.denyCurrentBranch
1368 receive.denyNonFastForwards
1371 repack.usedeltabaseoffset
1375 status.relativePaths
1376 status.showUntrackedFiles
1378 transfer.unpackLimit
1389 local subcommands
="add rm show prune update"
1390 local subcommand
="$(__git_find_subcommand "$subcommands")"
1391 if [ -z "$subcommand" ]; then
1392 __gitcomp
"$subcommands"
1396 case "$subcommand" in
1398 __gitcomp
"$(__git_remotes)"
1401 local i c
='' IFS
=$
'\n'
1402 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1420 __git_has_doubledash
&& return
1422 local cur
="${COMP_WORDS[COMP_CWORD]}"
1425 __gitcomp
"--merge --mixed --hard --soft"
1429 __gitcomp
"$(__git_refs)"
1434 local cur
="${COMP_WORDS[COMP_CWORD]}"
1437 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1441 __gitcomp
"$(__git_refs)"
1446 __git_has_doubledash
&& return
1448 local cur
="${COMP_WORDS[COMP_CWORD]}"
1451 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1460 __git_has_doubledash
&& return
1462 local cur
="${COMP_WORDS[COMP_CWORD]}"
1466 --max-count= --max-age= --since= --after=
1467 --min-age= --before= --until=
1469 --author= --committer= --grep=
1472 --numbered --summary
1477 __git_complete_revlist
1482 __git_has_doubledash
&& return
1484 local cur
="${COMP_WORDS[COMP_CWORD]}"
1487 __gitcomp
"$__git_log_pretty_formats
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