2 # bash completion support for core Git.
4 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
6 # Distributed under the GNU General Public License, version 2.0.
8 # The contained completion routines provide support for completing:
10 # *) local and remote branch names
11 # *) local and remote tag names
12 # *) .git/remotes file names
13 # *) git 'subcommands'
14 # *) tree paths within 'ref:path/to/file' expressions
15 # *) common --long-options
17 # To use these routines:
19 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
20 # 2) Added the following line to your .bashrc:
21 # source ~/.git-completion.sh
23 # 3) You may want to make sure the git executable is available
24 # in your PATH before this script is sourced, as some caching
25 # is performed while the script loads. If git isn't found
26 # at source time then all lookups will be done on demand,
27 # which may be slightly slower.
29 # 4) Consider changing your PS1 to also show the current branch:
30 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
32 # The argument to __git_ps1 will be displayed only if you
33 # are currently in a git repository. The %s token will be
34 # the name of the current branch.
38 # *) Read Documentation/SubmittingPatches
39 # *) Send all patches to the current maintainer:
41 # "Shawn O. Pearce" <spearce@spearce.org>
43 # *) Always CC the Git mailing list:
48 case "$COMP_WORDBREAKS" in
50 *) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
56 if [ -n "$__git_dir" ]; then
58 elif [ -d .git ]; then
61 git rev-parse --git-dir 2>/dev/null
63 elif [ -d "$1/.git" ]; then
72 local g="$(git rev-parse --git-dir 2>/dev/null)"
76 if [ -d "$g/rebase-apply" ]
78 if test -f "$g/rebase-apply/rebasing"
81 elif test -f "$g/rebase-apply/applying"
87 b="$(git symbolic-ref HEAD 2>/dev/null)"
88 elif [ -f "$g/rebase-merge/interactive" ]
91 b="$(cat "$g/rebase-merge/head-name")"
92 elif [ -d "$g/rebase-merge" ]
95 b="$(cat "$g/rebase-merge/head-name")"
96 elif [ -f "$g/MERGE_HEAD" ]
99 b="$(git symbolic-ref HEAD 2>/dev/null)"
101 if [ -f "$g/BISECT_LOG" ]
105 if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
107 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
109 b="$(cut -c1-7 "$g/HEAD")..."
115 printf "$1" "${b##refs/heads/}$r"
117 printf " (%s)" "${b##refs/heads/}$r"
124 local c IFS=' '$'\t'$'\n'
127 --*=*) printf %s$'\n' "$c$2" ;;
128 *.) printf %s$'\n' "$c$2" ;;
129 *) printf %s$'\n' "$c$2 " ;;
136 local cur="${COMP_WORDS[COMP_CWORD]}"
137 if [ $# -gt 2 ]; then
146 COMPREPLY=($(compgen -P "$2" \
147 -W "$(__gitcomp_1 "$1" "$4")" \
155 local cmd i is_hash=y dir="$(__gitdir "$1")"
156 if [ -d "$dir" ]; then
157 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
161 for i in $(git ls-remote "$1" 2>/dev/null); do
162 case "$is_hash,$i" in
165 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
166 n,*) is_hash=y; echo "$i" ;;
173 local cmd i is_hash=y dir="$(__gitdir "$1")"
174 if [ -d "$dir" ]; then
175 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
179 for i in $(git ls-remote "$1" 2>/dev/null); do
180 case "$is_hash,$i" in
183 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
184 n,*) is_hash=y; echo "$i" ;;
191 local i is_hash=y dir="$(__gitdir "$1")"
192 local cur="${COMP_WORDS[COMP_CWORD]}" format refs
193 if [ -d "$dir" ]; then
200 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
201 format="refname:short"
202 refs="refs/tags refs/heads refs/remotes"
205 git --git-dir="$dir" for-each-ref --format="%($format)" \
209 for i in $(git ls-remote "$dir" 2>/dev/null); do
210 case "$is_hash,$i" in
213 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
214 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
215 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
216 n,*) is_hash=y; echo "$i" ;;
224 for i in $(__git_refs "$1"); do
229 __git_refs_remotes ()
231 local cmd i is_hash=y
232 for i in $(git ls-remote "$1" 2>/dev/null); do
233 case "$is_hash,$i" in
236 echo "$i:refs/remotes/$1/${i#refs/heads/}"
240 n,refs/tags/*) is_hash=y;;
248 local i ngoff IFS=$'\n' d="$(__gitdir)"
249 shopt -q nullglob || ngoff=1
251 for i in "$d/remotes"/*; do
252 echo ${i#$d/remotes/}
254 [ "$ngoff" ] && shopt -u nullglob
255 for i in $(git --git-dir="$d" config --list); do
265 __git_merge_strategies ()
267 if [ -n "$__git_merge_strategylist" ]; then
268 echo "$__git_merge_strategylist"
271 git merge -s help 2>&1 |
272 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
280 __git_merge_strategylist=
281 __git_merge_strategylist=$(__git_merge_strategies 2>/dev/null)
283 __git_complete_file ()
285 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
302 case "$COMP_WORDBREAKS" in
304 *) pfx="$ref:$pfx" ;;
308 COMPREPLY=($(compgen -P "$pfx" \
309 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
310 | sed '/^100... blob /{
326 __gitcomp "$(__git_refs)"
331 __git_complete_revlist ()
333 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
338 __gitcomp "$(__git_refs)" "$pfx" "$cur"
343 __gitcomp "$(__git_refs)" "$pfx" "$cur"
346 __gitcomp "$(__git_refs)"
351 __git_all_commands ()
353 if [ -n "$__git_all_commandlist" ]; then
354 echo "$__git_all_commandlist"
358 for i in $(git help -a|egrep '^ ')
361 *--*) : helper pattern;;
366 __git_all_commandlist=
367 __git_all_commandlist="$(__git_all_commands 2>/dev/null)"
369 __git_porcelain_commands ()
371 if [ -n "$__git_porcelain_commandlist" ]; then
372 echo "$__git_porcelain_commandlist"
376 for i in "help" $(__git_all_commands)
379 *--*) : helper pattern;;
380 applymbox) : ask gittus;;
381 applypatch) : ask gittus;;
382 archimport) : import;;
383 cat-file) : plumbing;;
384 check-attr) : plumbing;;
385 check-ref-format) : plumbing;;
386 checkout-index) : plumbing;;
387 commit-tree) : plumbing;;
388 count-objects) : infrequent;;
389 cvsexportcommit) : export;;
390 cvsimport) : import;;
391 cvsserver) : daemon;;
393 diff-files) : plumbing;;
394 diff-index) : plumbing;;
395 diff-tree) : plumbing;;
396 fast-import) : import;;
397 fast-export) : export;;
398 fsck-objects) : plumbing;;
399 fetch-pack) : plumbing;;
400 fmt-merge-msg) : plumbing;;
401 for-each-ref) : plumbing;;
402 hash-object) : plumbing;;
403 http-*) : transport;;
404 index-pack) : plumbing;;
405 init-db) : deprecated;;
406 local-fetch) : plumbing;;
407 lost-found) : infrequent;;
408 ls-files) : plumbing;;
409 ls-remote) : plumbing;;
410 ls-tree) : plumbing;;
411 mailinfo) : plumbing;;
412 mailsplit) : plumbing;;
413 merge-*) : plumbing;;
416 pack-objects) : plumbing;;
417 pack-redundant) : plumbing;;
418 pack-refs) : plumbing;;
419 parse-remote) : plumbing;;
420 patch-id) : plumbing;;
421 peek-remote) : plumbing;;
423 prune-packed) : plumbing;;
424 quiltimport) : import;;
425 read-tree) : plumbing;;
426 receive-pack) : plumbing;;
428 repo-config) : deprecated;;
430 rev-list) : plumbing;;
431 rev-parse) : plumbing;;
432 runstatus) : plumbing;;
433 sh-setup) : internal;;
435 show-ref) : plumbing;;
436 send-pack) : plumbing;;
437 show-index) : plumbing;;
439 stripspace) : plumbing;;
440 symbolic-ref) : plumbing;;
441 tar-tree) : deprecated;;
442 unpack-file) : plumbing;;
443 unpack-objects) : plumbing;;
444 update-index) : plumbing;;
445 update-ref) : plumbing;;
446 update-server-info) : daemon;;
447 upload-archive) : plumbing;;
448 upload-pack) : plumbing;;
449 write-tree) : plumbing;;
451 verify-pack) : infrequent;;
452 verify-tag) : plumbing;;
457 __git_porcelain_commandlist=
458 __git_porcelain_commandlist="$(__git_porcelain_commands 2>/dev/null)"
463 for i in $(git --git-dir="$(__gitdir)" config --list); do
473 __git_aliased_command ()
475 local word cmdline=$(git --git-dir="$(__gitdir)" \
476 config --get "alias.$1")
477 for word in $cmdline; do
478 if [ "${word##-*}" ]; then
485 __git_find_subcommand ()
487 local word subcommand c=1
489 while [ $c -lt $COMP_CWORD ]; do
490 word="${COMP_WORDS[c]}"
491 for subcommand in $1; do
492 if [ "$subcommand" = "$word" ]; then
501 __git_has_doubledash ()
504 while [ $c -lt $COMP_CWORD ]; do
505 if [ "--" = "${COMP_WORDS[c]}" ]; then
513 __git_whitespacelist="nowarn warn error error-all fix"
517 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
518 if [ -d "$dir"/rebase-apply ]; then
519 __gitcomp "--skip --resolved --abort"
524 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
529 --signoff --utf8 --binary --3way --interactive
539 local cur="${COMP_WORDS[COMP_CWORD]}"
542 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
547 --stat --numstat --summary --check --index
548 --cached --index-info --reverse --reject --unidiff-zero
549 --apply --no-add --exclude=
550 --whitespace= --inaccurate-eof --verbose
559 __git_has_doubledash && return
561 local cur="${COMP_WORDS[COMP_CWORD]}"
565 --interactive --refresh --patch --update --dry-run
575 local cur="${COMP_WORDS[COMP_CWORD]}"
578 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
582 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
587 --format= --list --verbose
588 --prefix= --remote= --exec=
598 __git_has_doubledash && return
600 local subcommands="start bad good skip reset visualize replay log run"
601 local subcommand="$(__git_find_subcommand "$subcommands")"
602 if [ -z "$subcommand" ]; then
603 __gitcomp "$subcommands"
607 case "$subcommand" in
609 __gitcomp "$(__git_refs)"
619 local i c=1 only_local_ref="n" has_r="n"
621 while [ $c -lt $COMP_CWORD ]; do
624 -d|-m) only_local_ref="y" ;;
630 case "${COMP_WORDS[COMP_CWORD]}" in
631 --*=*) COMPREPLY=() ;;
634 --color --no-color --verbose --abbrev= --no-abbrev
635 --track --no-track --contains --merged --no-merged
639 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
640 __gitcomp "$(__git_heads)"
642 __gitcomp "$(__git_refs)"
650 local cmd="${COMP_WORDS[2]}"
651 case "$COMP_CWORD" in
653 __gitcomp "create list-heads verify unbundle"
661 __git_complete_revlist
670 __git_has_doubledash && return
672 __gitcomp "$(__git_refs)"
677 __gitcomp "$(__git_refs)"
682 local cur="${COMP_WORDS[COMP_CWORD]}"
685 __gitcomp "--edit --no-commit"
688 __gitcomp "$(__git_refs)"
695 __git_has_doubledash && return
697 local cur="${COMP_WORDS[COMP_CWORD]}"
700 __gitcomp "--dry-run --quiet"
709 local cur="${COMP_WORDS[COMP_CWORD]}"
734 __git_has_doubledash && return
736 local cur="${COMP_WORDS[COMP_CWORD]}"
740 --all --author= --signoff --verify --no-verify
741 --edit --amend --include --only --interactive
750 local cur="${COMP_WORDS[COMP_CWORD]}"
754 --all --tags --contains --abbrev= --candidates=
755 --exact-match --debug --long --match --always
759 __gitcomp "$(__git_refs)"
764 __git_has_doubledash && return
766 local cur="${COMP_WORDS[COMP_CWORD]}"
769 __gitcomp "--cached --stat --numstat --shortstat --summary
770 --patch-with-stat --name-only --name-status --color
771 --no-color --color-words --no-renames --check
772 --full-index --binary --abbrev --diff-filter=
773 --find-copies-harder --pickaxe-all --pickaxe-regex
774 --text --ignore-space-at-eol --ignore-space-change
775 --ignore-all-space --exit-code --quiet --ext-diff
777 --no-prefix --src-prefix= --dst-prefix=
778 --base --ours --theirs
788 local cur="${COMP_WORDS[COMP_CWORD]}"
790 if [ "$COMP_CWORD" = 2 ]; then
791 __gitcomp "$(__git_remotes)"
796 case "$COMP_WORDBREAKS" in
798 *) pfx="${cur%%:*}:" ;;
800 __gitcomp "$(__git_refs)" "$pfx" "${cur#*:}"
803 __gitcomp "$(__git_refs2 "${COMP_WORDS[2]}")"
811 local cur="${COMP_WORDS[COMP_CWORD]}"
815 --stdout --attach --thread
817 --numbered --start-number
822 --full-index --binary
825 --no-prefix --src-prefix= --dst-prefix=
830 __git_complete_revlist
835 local cur="${COMP_WORDS[COMP_CWORD]}"
838 __gitcomp "--prune --aggressive"
847 __git_has_doubledash && return
849 local cur="${COMP_WORDS[COMP_CWORD]}"
854 --text --ignore-case --word-regexp --invert-match
856 --extended-regexp --basic-regexp --fixed-strings
857 --files-with-matches --name-only
858 --files-without-match
860 --and --or --not --all-match
870 local cur="${COMP_WORDS[COMP_CWORD]}"
873 __gitcomp "--all --info --man --web"
877 __gitcomp "$(__git_all_commands)
878 attributes cli core-tutorial cvs-migration
879 diffcore gitk glossary hooks ignore modules
880 repository-layout tutorial tutorial-2
887 local cur="${COMP_WORDS[COMP_CWORD]}"
891 false true umask group all world everybody
892 " "" "${cur##--shared=}"
896 __gitcomp "--quiet --bare --template= --shared --shared="
905 __git_has_doubledash && return
907 local cur="${COMP_WORDS[COMP_CWORD]}"
910 __gitcomp "--cached --deleted --modified --others --ignored
911 --stage --directory --no-empty-directory --unmerged
912 --killed --exclude= --exclude-from=
913 --exclude-per-directory= --exclude-standard
914 --error-unmatch --with-tree= --full-name
915 --abbrev --ignored --exclude-per-directory
925 __gitcomp "$(__git_remotes)"
935 __git_has_doubledash && return
937 local cur="${COMP_WORDS[COMP_CWORD]}"
941 oneline short medium full fuller email raw
942 " "" "${cur##--pretty=}"
947 relative iso8601 rfc2822 short local default
948 " "" "${cur##--date=}"
953 --max-count= --max-age= --since= --after=
954 --min-age= --before= --until=
955 --root --topo-order --date-order --reverse
957 --abbrev-commit --abbrev=
958 --relative-date --date=
959 --author= --committer= --grep=
961 --pretty= --name-status --name-only --raw
963 --left-right --cherry-pick
965 --stat --numstat --shortstat
966 --decorate --diff-filter=
967 --color-words --walk-reflogs
968 --parents --children --full-history
974 __git_complete_revlist
979 local cur="${COMP_WORDS[COMP_CWORD]}"
980 case "${COMP_WORDS[COMP_CWORD-1]}" in
982 __gitcomp "$(__git_merge_strategies)"
987 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
992 --no-commit --no-stat --log --no-log --squash --strategy
996 __gitcomp "$(__git_refs)"
1001 local cur="${COMP_WORDS[COMP_CWORD]}"
1005 kdiff3 tkdiff meld xxdiff emerge
1006 vimdiff gvimdiff ecmerge opendiff
1007 " "" "${cur##--tool=}"
1020 __gitcomp "$(__git_refs)"
1025 local cur="${COMP_WORDS[COMP_CWORD]}"
1028 __gitcomp "--dry-run"
1037 __gitcomp "--tags --all --stdin"
1042 local cur="${COMP_WORDS[COMP_CWORD]}"
1044 if [ "$COMP_CWORD" = 2 ]; then
1045 __gitcomp "$(__git_remotes)"
1047 __gitcomp "$(__git_refs "${COMP_WORDS[2]}")"
1053 local cur="${COMP_WORDS[COMP_CWORD]}"
1055 if [ "$COMP_CWORD" = 2 ]; then
1056 __gitcomp "$(__git_remotes)"
1061 case "$COMP_WORDBREAKS" in
1063 *) pfx="${cur%%:*}:" ;;
1066 __gitcomp "$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1069 __gitcomp "$(__git_refs)" + "${cur#+}"
1072 __gitcomp "$(__git_refs)"
1080 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1081 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1082 __gitcomp "--continue --skip --abort"
1085 case "${COMP_WORDS[COMP_CWORD-1]}" in
1087 __gitcomp "$(__git_merge_strategies)"
1092 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
1096 __gitcomp "--onto --merge --strategy --interactive"
1099 __gitcomp "$(__git_refs)"
1104 local cur="${COMP_WORDS[COMP_CWORD]}"
1107 __gitcomp "--bcc --cc --cc-cmd --chain-reply-to --compose
1108 --dry-run --envelope-sender --from --identity
1109 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1110 --no-suppress-from --no-thread --quiet
1111 --signed-off-by-cc --smtp-pass --smtp-server
1112 --smtp-server-port --smtp-ssl --smtp-user --subject
1113 --suppress-cc --suppress-from --thread --to
1114 --validate --no-validate"
1123 local cur="${COMP_WORDS[COMP_CWORD]}"
1124 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1127 __gitcomp "$(__git_remotes)"
1131 __gitcomp "$(__git_refs)"
1135 local remote="${prv#remote.}"
1136 remote="${remote%.fetch}"
1137 __gitcomp "$(__git_refs_remotes "$remote")"
1141 local remote="${prv#remote.}"
1142 remote="${remote%.push}"
1143 __gitcomp "$(git --git-dir="$(__gitdir)" \
1144 for-each-ref --format='%(refname):%(refname)' \
1148 pull.twohead|pull.octopus)
1149 __gitcomp "$(__git_merge_strategies)"
1152 color.branch|color.diff|color.status)
1153 __gitcomp "always never auto"
1158 black red green yellow blue magenta cyan white
1159 bold dim ul blink reverse
1171 --global --system --file=
1172 --list --replace-all
1173 --get --get-all --get-regexp
1174 --add --unset --unset-all
1175 --remove-section --rename-section
1180 local pfx="${cur%.*}."
1182 __gitcomp "remote merge" "$pfx" "$cur"
1186 local pfx="${cur%.*}."
1188 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1192 local pfx="${cur%.*}."
1195 url fetch push skipDefaultUpdate
1196 receivepack uploadpack tagopt
1201 local pfx="${cur%.*}."
1203 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1211 color.branch.current
1222 color.diff.whitespace
1226 color.status.changed
1228 color.status.untracked
1233 core.logAllRefUpdates
1234 core.loosecompression
1236 core.packedGitWindowSize
1237 core.preferSymlinkRefs
1238 core.repositoryFormatVersion
1239 core.sharedRepository
1240 core.warnAmbiguousRefs
1245 format.subjectprefix
1248 gc.reflogexpireunreachable
1255 gitcvs.dbtablenameprefix
1269 i18n.logOutputEncoding
1275 pack.deltaCacheLimit
1282 receive.denyNonFastForwards
1284 repack.useDeltaBaseOffset
1287 transfer.unpackLimit
1297 local subcommands="add rm show prune update"
1298 local subcommand="$(__git_find_subcommand "$subcommands")"
1299 if [ -z "$subcommand" ]; then
1300 __gitcomp "$subcommands"
1304 case "$subcommand" in
1306 __gitcomp "$(__git_remotes)"
1309 local i c='' IFS=$'\n'
1310 for i in $(git --git-dir="$(__gitdir)" config --list); do
1328 __git_has_doubledash && return
1330 local cur="${COMP_WORDS[COMP_CWORD]}"
1333 __gitcomp "--mixed --hard --soft"
1337 __gitcomp "$(__git_refs)"
1342 local cur="${COMP_WORDS[COMP_CWORD]}"
1345 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1349 __gitcomp "$(__git_refs)"
1354 __git_has_doubledash && return
1356 local cur="${COMP_WORDS[COMP_CWORD]}"
1359 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1368 __git_has_doubledash && return
1370 local cur="${COMP_WORDS[COMP_CWORD]}"
1374 --max-count= --max-age= --since= --after=
1375 --min-age= --before= --until=
1377 --author= --committer= --grep=
1380 --numbered --summary
1385 __git_complete_revlist
1390 __git_has_doubledash && return
1392 local cur="${COMP_WORDS[COMP_CWORD]}"
1396 oneline short medium full fuller email raw
1397 " "" "${cur##--pretty=}"
1401 __gitcomp "--pretty="
1410 local cur="${COMP_WORDS[COMP_CWORD]}"
1414 --all --remotes --topo-order --current --more=
1415 --list --independent --merge-base --no-name
1416 --sha1-name --topics --reflog
1421 __git_complete_revlist
1426 local subcommands='save list show apply clear drop pop create branch'
1427 local subcommand="$(__git_find_subcommand "$subcommands")"
1428 if [ -z "$subcommand" ]; then
1429 __gitcomp "$subcommands"
1431 local cur="${COMP_WORDS[COMP_CWORD]}"
1432 case "$subcommand,$cur" in
1434 __gitcomp "--keep-index"
1439 show,--*|drop,--*|pop,--*|branch,--*)
1442 show,*|apply,*|drop,*|pop,*|branch,*)
1443 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1444 | sed -n -e 's/:.*//p')"
1455 __git_has_doubledash && return
1457 local subcommands="add status init update summary foreach sync"
1458 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1459 local cur="${COMP_WORDS[COMP_CWORD]}"
1462 __gitcomp "--quiet --cached"
1465 __gitcomp "$subcommands"
1475 init fetch clone rebase dcommit log find-rev
1476 set-tree commit-diff info create-ignore propget
1477 proplist show-ignore show-externals
1479 local subcommand="$(__git_find_subcommand "$subcommands")"
1480 if [ -z "$subcommand" ]; then
1481 __gitcomp "$subcommands"
1483 local remote_opts="--username= --config-dir= --no-auth-cache"
1485 --follow-parent --authors-file= --repack=
1486 --no-metadata --use-svm-props --use-svnsync-props
1487 --log-window-size= --no-checkout --quiet
1488 --repack-flags --user-log-author $remote_opts
1491 --template= --shared= --trunk= --tags=
1492 --branches= --stdlayout --minimize-url
1493 --no-metadata --use-svm-props --use-svnsync-props
1494 --rewrite-root= $remote_opts
1497 --edit --rmdir --find-copies-harder --copy-similarity=
1500 local cur="${COMP_WORDS[COMP_CWORD]}"
1501 case "$subcommand,$cur" in
1503 __gitcomp "--revision= --fetch-all $fc_opts"
1506 __gitcomp "--revision= $fc_opts $init_opts"
1509 __gitcomp "$init_opts"
1513 --merge --strategy= --verbose --dry-run
1514 --fetch-all --no-rebase $cmt_opts $fc_opts
1518 __gitcomp "--stdin $cmt_opts $fc_opts"
1520 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1522 __gitcomp "--revision="
1526 --limit= --revision= --verbose --incremental
1527 --oneline --show-commit --non-recursive
1533 --merge --verbose --strategy= --local
1534 --fetch-all $fc_opts
1538 __gitcomp "--message= --file= --revision= $cmt_opts"
1553 while [ $c -lt $COMP_CWORD ]; do
1554 i="${COMP_WORDS[c]}"
1557 __gitcomp "$(__git_tags)"
1567 case "${COMP_WORDS[COMP_CWORD-1]}" in
1573 __gitcomp "$(__git_tags)"
1579 __gitcomp "$(__git_refs)"
1586 local i c=1 command __git_dir
1588 while [ $c -lt $COMP_CWORD ]; do
1589 i="${COMP_WORDS[c]}"
1591 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1592 --bare) __git_dir="." ;;
1593 --version|-p|--paginate) ;;
1594 --help) command="help"; break ;;
1595 *) command="$i"; break ;;
1600 if [ -z "$command" ]; then
1601 case "${COMP_WORDS[COMP_CWORD]}" in
1602 --*=*) COMPREPLY=() ;;
1614 *) __gitcomp "$(__git_porcelain_commands) $(__git_aliases)" ;;
1619 local expansion=$(__git_aliased_command "$command")
1620 [ "$expansion" ] && command="$expansion"
1625 apply) _git_apply ;;
1626 archive) _git_archive ;;
1627 bisect) _git_bisect ;;
1628 bundle) _git_bundle ;;
1629 branch) _git_branch ;;
1630 checkout) _git_checkout ;;
1631 cherry) _git_cherry ;;
1632 cherry-pick) _git_cherry_pick ;;
1633 clean) _git_clean ;;
1634 clone) _git_clone ;;
1635 commit) _git_commit ;;
1636 config) _git_config ;;
1637 describe) _git_describe ;;
1639 fetch) _git_fetch ;;
1640 format-patch) _git_format_patch ;;
1646 ls-files) _git_ls_files ;;
1647 ls-remote) _git_ls_remote ;;
1648 ls-tree) _git_ls_tree ;;
1650 mergetool) _git_mergetool;;
1651 merge-base) _git_merge_base ;;
1653 name-rev) _git_name_rev ;;
1656 rebase) _git_rebase ;;
1657 remote) _git_remote ;;
1658 reset) _git_reset ;;
1659 revert) _git_revert ;;
1661 send-email) _git_send_email ;;
1662 shortlog) _git_shortlog ;;
1664 show-branch) _git_show_branch ;;
1665 stash) _git_stash ;;
1666 submodule) _git_submodule ;;
1669 whatchanged) _git_log ;;
1676 __git_has_doubledash && return
1678 local cur="${COMP_WORDS[COMP_CWORD]}"
1679 local g="$(git rev-parse --git-dir 2>/dev/null)"
1681 if [ -f $g/MERGE_HEAD ]; then
1686 __gitcomp "--not --all $merge"
1690 __git_complete_revlist
1693 complete -o default -o nospace -F _git git
1694 complete -o default -o nospace -F _gitk gitk
1696 # The following are necessary only for Cygwin, and only are needed
1697 # when the user has tab-completed the executable name and consequently
1698 # included the '.exe' suffix.
1700 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1701 complete -o default -o nospace -F _git git.exe