fast-import: put marks reading in its own function
[alt-git.git] / contrib / completion / git-completion.bash
blob11bf17a86cf472a8939ad965d2552660061fd240
1 #!bash
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) Consider changing your PS1 to also show the current branch:
25 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
27 # The argument to __git_ps1 will be displayed only if you
28 # are currently in a git repository. The %s token will be
29 # the name of the current branch.
31 # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty
32 # value, unstaged (*) and staged (+) changes will be shown next
33 # to the branch name. You can configure this per-repository
34 # with the bash.showDirtyState variable, which defaults to true
35 # once GIT_PS1_SHOWDIRTYSTATE is enabled.
37 # You can also see if currently something is stashed, by setting
38 # GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
39 # then a '$' will be shown next to the branch name.
41 # If you would like to see if there're untracked files, then you can
42 # set GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're
43 # untracked files, then a '%' will be shown next to the branch name.
45 # To submit patches:
47 # *) Read Documentation/SubmittingPatches
48 # *) Send all patches to the current maintainer:
50 # "Shawn O. Pearce" <spearce@spearce.org>
52 # *) Always CC the Git mailing list:
54 # git@vger.kernel.org
57 case "$COMP_WORDBREAKS" in
58 *:*) : great ;;
59 *) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
60 esac
62 # __gitdir accepts 0 or 1 arguments (i.e., location)
63 # returns location of .git repo
64 __gitdir ()
66 if [ -z "${1-}" ]; then
67 if [ -n "${__git_dir-}" ]; then
68 echo "$__git_dir"
69 elif [ -d .git ]; then
70 echo .git
71 else
72 git rev-parse --git-dir 2>/dev/null
74 elif [ -d "$1/.git" ]; then
75 echo "$1/.git"
76 else
77 echo "$1"
81 # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
82 # returns text to add to bash PS1 prompt (includes branch name)
83 __git_ps1 ()
85 local g="$(__gitdir)"
86 if [ -n "$g" ]; then
87 local r
88 local b
89 if [ -f "$g/rebase-merge/interactive" ]; then
90 r="|REBASE-i"
91 b="$(cat "$g/rebase-merge/head-name")"
92 elif [ -d "$g/rebase-merge" ]; then
93 r="|REBASE-m"
94 b="$(cat "$g/rebase-merge/head-name")"
95 else
96 if [ -d "$g/rebase-apply" ]; then
97 if [ -f "$g/rebase-apply/rebasing" ]; then
98 r="|REBASE"
99 elif [ -f "$g/rebase-apply/applying" ]; then
100 r="|AM"
101 else
102 r="|AM/REBASE"
104 elif [ -f "$g/MERGE_HEAD" ]; then
105 r="|MERGING"
106 elif [ -f "$g/BISECT_LOG" ]; then
107 r="|BISECTING"
110 b="$(git symbolic-ref HEAD 2>/dev/null)" || {
112 b="$(
113 case "${GIT_PS1_DESCRIBE_STYLE-}" in
114 (contains)
115 git describe --contains HEAD ;;
116 (branch)
117 git describe --contains --all HEAD ;;
118 (describe)
119 git describe HEAD ;;
120 (* | default)
121 git describe --exact-match HEAD ;;
122 esac 2>/dev/null)" ||
124 b="$(cut -c1-7 "$g/HEAD" 2>/dev/null)..." ||
125 b="unknown"
126 b="($b)"
130 local w
131 local i
132 local s
133 local u
134 local c
136 if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
137 if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
138 c="BARE:"
139 else
140 b="GIT_DIR!"
142 elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
143 if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
144 if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
145 git diff --no-ext-diff --ignore-submodules \
146 --quiet --exit-code || w="*"
147 if git rev-parse --quiet --verify HEAD >/dev/null; then
148 git diff-index --cached --quiet \
149 --ignore-submodules HEAD -- || i="+"
150 else
151 i="#"
155 if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
156 git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
159 if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ]; then
160 if [ -n "$(git ls-files --others --exclude-standard)" ]; then
161 u="%"
166 if [ -n "${1-}" ]; then
167 printf "$1" "$c${b##refs/heads/}$w$i$s$u$r"
168 else
169 printf " (%s)" "$c${b##refs/heads/}$w$i$s$u$r"
174 # __gitcomp_1 requires 2 arguments
175 __gitcomp_1 ()
177 local c IFS=' '$'\t'$'\n'
178 for c in $1; do
179 case "$c$2" in
180 --*=*) printf %s$'\n' "$c$2" ;;
181 *.) printf %s$'\n' "$c$2" ;;
182 *) printf %s$'\n' "$c$2 " ;;
183 esac
184 done
187 # __gitcomp accepts 1, 2, 3, or 4 arguments
188 # generates completion reply with compgen
189 __gitcomp ()
191 local cur="${COMP_WORDS[COMP_CWORD]}"
192 if [ $# -gt 2 ]; then
193 cur="$3"
195 case "$cur" in
196 --*=)
197 COMPREPLY=()
200 local IFS=$'\n'
201 COMPREPLY=($(compgen -P "${2-}" \
202 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
203 -- "$cur"))
205 esac
208 # __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
209 __git_heads ()
211 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
212 if [ -d "$dir" ]; then
213 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
214 refs/heads
215 return
217 for i in $(git ls-remote "${1-}" 2>/dev/null); do
218 case "$is_hash,$i" in
219 y,*) is_hash=n ;;
220 n,*^{}) is_hash=y ;;
221 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
222 n,*) is_hash=y; echo "$i" ;;
223 esac
224 done
227 # __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
228 __git_tags ()
230 local cmd i is_hash=y dir="$(__gitdir "${1-}")"
231 if [ -d "$dir" ]; then
232 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
233 refs/tags
234 return
236 for i in $(git ls-remote "${1-}" 2>/dev/null); do
237 case "$is_hash,$i" in
238 y,*) is_hash=n ;;
239 n,*^{}) is_hash=y ;;
240 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
241 n,*) is_hash=y; echo "$i" ;;
242 esac
243 done
246 # __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
247 __git_refs ()
249 local i is_hash=y dir="$(__gitdir "${1-}")"
250 local cur="${COMP_WORDS[COMP_CWORD]}" format refs
251 if [ -d "$dir" ]; then
252 case "$cur" in
253 refs|refs/*)
254 format="refname"
255 refs="${cur%/*}"
258 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
259 format="refname:short"
260 refs="refs/tags refs/heads refs/remotes"
262 esac
263 git --git-dir="$dir" for-each-ref --format="%($format)" \
264 $refs
265 return
267 for i in $(git ls-remote "$dir" 2>/dev/null); do
268 case "$is_hash,$i" in
269 y,*) is_hash=n ;;
270 n,*^{}) is_hash=y ;;
271 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
272 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
273 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
274 n,*) is_hash=y; echo "$i" ;;
275 esac
276 done
279 # __git_refs2 requires 1 argument (to pass to __git_refs)
280 __git_refs2 ()
282 local i
283 for i in $(__git_refs "$1"); do
284 echo "$i:$i"
285 done
288 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
289 __git_refs_remotes ()
291 local cmd i is_hash=y
292 for i in $(git ls-remote "$1" 2>/dev/null); do
293 case "$is_hash,$i" in
294 n,refs/heads/*)
295 is_hash=y
296 echo "$i:refs/remotes/$1/${i#refs/heads/}"
298 y,*) is_hash=n ;;
299 n,*^{}) is_hash=y ;;
300 n,refs/tags/*) is_hash=y;;
301 n,*) is_hash=y; ;;
302 esac
303 done
306 __git_remotes ()
308 local i ngoff IFS=$'\n' d="$(__gitdir)"
309 shopt -q nullglob || ngoff=1
310 shopt -s nullglob
311 for i in "$d/remotes"/*; do
312 echo ${i#$d/remotes/}
313 done
314 [ "$ngoff" ] && shopt -u nullglob
315 for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
316 i="${i#remote.}"
317 echo "${i/.url*/}"
318 done
321 __git_list_merge_strategies ()
323 git merge -s help 2>&1 |
324 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
325 s/\.$//
326 s/.*://
327 s/^[ ]*//
328 s/[ ]*$//
333 __git_merge_strategies=
334 # 'git merge -s help' (and thus detection of the merge strategy
335 # list) fails, unfortunately, if run outside of any git working
336 # tree. __git_merge_strategies is set to the empty string in
337 # that case, and the detection will be repeated the next time it
338 # is needed.
339 __git_compute_merge_strategies ()
341 : ${__git_merge_strategies:=$(__git_list_merge_strategies)}
344 __git_complete_file ()
346 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
347 case "$cur" in
348 ?*:*)
349 ref="${cur%%:*}"
350 cur="${cur#*:}"
351 case "$cur" in
352 ?*/*)
353 pfx="${cur%/*}"
354 cur="${cur##*/}"
355 ls="$ref:$pfx"
356 pfx="$pfx/"
359 ls="$ref"
361 esac
363 case "$COMP_WORDBREAKS" in
364 *:*) : great ;;
365 *) pfx="$ref:$pfx" ;;
366 esac
368 local IFS=$'\n'
369 COMPREPLY=($(compgen -P "$pfx" \
370 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
371 | sed '/^100... blob /{
372 s,^.* ,,
373 s,$, ,
375 /^120000 blob /{
376 s,^.* ,,
377 s,$, ,
379 /^040000 tree /{
380 s,^.* ,,
381 s,$,/,
383 s/^.* //')" \
384 -- "$cur"))
387 __gitcomp "$(__git_refs)"
389 esac
392 __git_complete_revlist ()
394 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
395 case "$cur" in
396 *...*)
397 pfx="${cur%...*}..."
398 cur="${cur#*...}"
399 __gitcomp "$(__git_refs)" "$pfx" "$cur"
401 *..*)
402 pfx="${cur%..*}.."
403 cur="${cur#*..}"
404 __gitcomp "$(__git_refs)" "$pfx" "$cur"
407 __gitcomp "$(__git_refs)"
409 esac
412 __git_complete_remote_or_refspec ()
414 local cmd="${COMP_WORDS[1]}"
415 local cur="${COMP_WORDS[COMP_CWORD]}"
416 local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
417 while [ $c -lt $COMP_CWORD ]; do
418 i="${COMP_WORDS[c]}"
419 case "$i" in
420 --all|--mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
421 -*) ;;
422 *) remote="$i"; break ;;
423 esac
424 c=$((++c))
425 done
426 if [ -z "$remote" ]; then
427 __gitcomp "$(__git_remotes)"
428 return
430 if [ $no_complete_refspec = 1 ]; then
431 COMPREPLY=()
432 return
434 [ "$remote" = "." ] && remote=
435 case "$cur" in
436 *:*)
437 case "$COMP_WORDBREAKS" in
438 *:*) : great ;;
439 *) pfx="${cur%%:*}:" ;;
440 esac
441 cur="${cur#*:}"
442 lhs=0
445 pfx="+"
446 cur="${cur#+}"
448 esac
449 case "$cmd" in
450 fetch)
451 if [ $lhs = 1 ]; then
452 __gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
453 else
454 __gitcomp "$(__git_refs)" "$pfx" "$cur"
457 pull)
458 if [ $lhs = 1 ]; then
459 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
460 else
461 __gitcomp "$(__git_refs)" "$pfx" "$cur"
464 push)
465 if [ $lhs = 1 ]; then
466 __gitcomp "$(__git_refs)" "$pfx" "$cur"
467 else
468 __gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
471 esac
474 __git_complete_strategy ()
476 __git_compute_merge_strategies
477 case "${COMP_WORDS[COMP_CWORD-1]}" in
478 -s|--strategy)
479 __gitcomp "$__git_merge_strategies"
480 return 0
481 esac
482 local cur="${COMP_WORDS[COMP_CWORD]}"
483 case "$cur" in
484 --strategy=*)
485 __gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
486 return 0
488 esac
489 return 1
492 __git_list_all_commands ()
494 local i IFS=" "$'\n'
495 for i in $(git help -a|egrep '^ [a-zA-Z0-9]')
497 case $i in
498 *--*) : helper pattern;;
499 *) echo $i;;
500 esac
501 done
504 __git_all_commands=
505 __git_compute_all_commands ()
507 : ${__git_all_commands:=$(__git_list_all_commands)}
510 __git_list_porcelain_commands ()
512 local i IFS=" "$'\n'
513 __git_compute_all_commands
514 for i in "help" $__git_all_commands
516 case $i in
517 *--*) : helper pattern;;
518 applymbox) : ask gittus;;
519 applypatch) : ask gittus;;
520 archimport) : import;;
521 cat-file) : plumbing;;
522 check-attr) : plumbing;;
523 check-ref-format) : plumbing;;
524 checkout-index) : plumbing;;
525 commit-tree) : plumbing;;
526 count-objects) : infrequent;;
527 cvsexportcommit) : export;;
528 cvsimport) : import;;
529 cvsserver) : daemon;;
530 daemon) : daemon;;
531 diff-files) : plumbing;;
532 diff-index) : plumbing;;
533 diff-tree) : plumbing;;
534 fast-import) : import;;
535 fast-export) : export;;
536 fsck-objects) : plumbing;;
537 fetch-pack) : plumbing;;
538 fmt-merge-msg) : plumbing;;
539 for-each-ref) : plumbing;;
540 hash-object) : plumbing;;
541 http-*) : transport;;
542 index-pack) : plumbing;;
543 init-db) : deprecated;;
544 local-fetch) : plumbing;;
545 lost-found) : infrequent;;
546 ls-files) : plumbing;;
547 ls-remote) : plumbing;;
548 ls-tree) : plumbing;;
549 mailinfo) : plumbing;;
550 mailsplit) : plumbing;;
551 merge-*) : plumbing;;
552 mktree) : plumbing;;
553 mktag) : plumbing;;
554 pack-objects) : plumbing;;
555 pack-redundant) : plumbing;;
556 pack-refs) : plumbing;;
557 parse-remote) : plumbing;;
558 patch-id) : plumbing;;
559 peek-remote) : plumbing;;
560 prune) : plumbing;;
561 prune-packed) : plumbing;;
562 quiltimport) : import;;
563 read-tree) : plumbing;;
564 receive-pack) : plumbing;;
565 reflog) : plumbing;;
566 repo-config) : deprecated;;
567 rerere) : plumbing;;
568 rev-list) : plumbing;;
569 rev-parse) : plumbing;;
570 runstatus) : plumbing;;
571 sh-setup) : internal;;
572 shell) : daemon;;
573 show-ref) : plumbing;;
574 send-pack) : plumbing;;
575 show-index) : plumbing;;
576 ssh-*) : transport;;
577 stripspace) : plumbing;;
578 symbolic-ref) : plumbing;;
579 tar-tree) : deprecated;;
580 unpack-file) : plumbing;;
581 unpack-objects) : plumbing;;
582 update-index) : plumbing;;
583 update-ref) : plumbing;;
584 update-server-info) : daemon;;
585 upload-archive) : plumbing;;
586 upload-pack) : plumbing;;
587 write-tree) : plumbing;;
588 var) : infrequent;;
589 verify-pack) : infrequent;;
590 verify-tag) : plumbing;;
591 *) echo $i;;
592 esac
593 done
596 __git_porcelain_commands=
597 __git_compute_porcelain_commands ()
599 __git_compute_all_commands
600 : ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}
603 __git_aliases ()
605 local i IFS=$'\n'
606 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
607 case "$i" in
608 alias.*)
609 i="${i#alias.}"
610 echo "${i/ */}"
612 esac
613 done
616 # __git_aliased_command requires 1 argument
617 __git_aliased_command ()
619 local word cmdline=$(git --git-dir="$(__gitdir)" \
620 config --get "alias.$1")
621 for word in $cmdline; do
622 if [ "${word##-*}" ]; then
623 echo $word
624 return
626 done
629 # __git_find_on_cmdline requires 1 argument
630 __git_find_on_cmdline ()
632 local word subcommand c=1
634 while [ $c -lt $COMP_CWORD ]; do
635 word="${COMP_WORDS[c]}"
636 for subcommand in $1; do
637 if [ "$subcommand" = "$word" ]; then
638 echo "$subcommand"
639 return
641 done
642 c=$((++c))
643 done
646 __git_has_doubledash ()
648 local c=1
649 while [ $c -lt $COMP_CWORD ]; do
650 if [ "--" = "${COMP_WORDS[c]}" ]; then
651 return 0
653 c=$((++c))
654 done
655 return 1
658 __git_whitespacelist="nowarn warn error error-all fix"
660 _git_am ()
662 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
663 if [ -d "$dir"/rebase-apply ]; then
664 __gitcomp "--skip --resolved --abort"
665 return
667 case "$cur" in
668 --whitespace=*)
669 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
670 return
672 --*)
673 __gitcomp "
674 --3way --committer-date-is-author-date --ignore-date
675 --ignore-whitespace --ignore-space-change
676 --interactive --keep --no-utf8 --signoff --utf8
677 --whitespace= --scissors
679 return
680 esac
681 COMPREPLY=()
684 _git_apply ()
686 local cur="${COMP_WORDS[COMP_CWORD]}"
687 case "$cur" in
688 --whitespace=*)
689 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
690 return
692 --*)
693 __gitcomp "
694 --stat --numstat --summary --check --index
695 --cached --index-info --reverse --reject --unidiff-zero
696 --apply --no-add --exclude=
697 --ignore-whitespace --ignore-space-change
698 --whitespace= --inaccurate-eof --verbose
700 return
701 esac
702 COMPREPLY=()
705 _git_add ()
707 __git_has_doubledash && return
709 local cur="${COMP_WORDS[COMP_CWORD]}"
710 case "$cur" in
711 --*)
712 __gitcomp "
713 --interactive --refresh --patch --update --dry-run
714 --ignore-errors --intent-to-add
716 return
717 esac
718 COMPREPLY=()
721 _git_archive ()
723 local cur="${COMP_WORDS[COMP_CWORD]}"
724 case "$cur" in
725 --format=*)
726 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
727 return
729 --remote=*)
730 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
731 return
733 --*)
734 __gitcomp "
735 --format= --list --verbose
736 --prefix= --remote= --exec=
738 return
740 esac
741 __git_complete_file
744 _git_bisect ()
746 __git_has_doubledash && return
748 local subcommands="start bad good skip reset visualize replay log run"
749 local subcommand="$(__git_find_on_cmdline "$subcommands")"
750 if [ -z "$subcommand" ]; then
751 __gitcomp "$subcommands"
752 return
755 case "$subcommand" in
756 bad|good|reset|skip)
757 __gitcomp "$(__git_refs)"
760 COMPREPLY=()
762 esac
765 _git_branch ()
767 local i c=1 only_local_ref="n" has_r="n"
769 while [ $c -lt $COMP_CWORD ]; do
770 i="${COMP_WORDS[c]}"
771 case "$i" in
772 -d|-m) only_local_ref="y" ;;
773 -r) has_r="y" ;;
774 esac
775 c=$((++c))
776 done
778 case "${COMP_WORDS[COMP_CWORD]}" in
779 --*)
780 __gitcomp "
781 --color --no-color --verbose --abbrev= --no-abbrev
782 --track --no-track --contains --merged --no-merged
786 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
787 __gitcomp "$(__git_heads)"
788 else
789 __gitcomp "$(__git_refs)"
792 esac
795 _git_bundle ()
797 local cmd="${COMP_WORDS[2]}"
798 case "$COMP_CWORD" in
800 __gitcomp "create list-heads verify unbundle"
803 # looking for a file
806 case "$cmd" in
807 create)
808 __git_complete_revlist
810 esac
812 esac
815 _git_checkout ()
817 __git_has_doubledash && return
819 local cur="${COMP_WORDS[COMP_CWORD]}"
820 case "$cur" in
821 --conflict=*)
822 __gitcomp "diff3 merge" "" "${cur##--conflict=}"
824 --*)
825 __gitcomp "
826 --quiet --ours --theirs --track --no-track --merge
827 --conflict= --patch
831 __gitcomp "$(__git_refs)"
833 esac
836 _git_cherry ()
838 __gitcomp "$(__git_refs)"
841 _git_cherry_pick ()
843 local cur="${COMP_WORDS[COMP_CWORD]}"
844 case "$cur" in
845 --*)
846 __gitcomp "--edit --no-commit"
849 __gitcomp "$(__git_refs)"
851 esac
854 _git_clean ()
856 __git_has_doubledash && return
858 local cur="${COMP_WORDS[COMP_CWORD]}"
859 case "$cur" in
860 --*)
861 __gitcomp "--dry-run --quiet"
862 return
864 esac
865 COMPREPLY=()
868 _git_clone ()
870 local cur="${COMP_WORDS[COMP_CWORD]}"
871 case "$cur" in
872 --*)
873 __gitcomp "
874 --local
875 --no-hardlinks
876 --shared
877 --reference
878 --quiet
879 --no-checkout
880 --bare
881 --mirror
882 --origin
883 --upload-pack
884 --template=
885 --depth
887 return
889 esac
890 COMPREPLY=()
893 _git_commit ()
895 __git_has_doubledash && return
897 local cur="${COMP_WORDS[COMP_CWORD]}"
898 case "$cur" in
899 --*)
900 __gitcomp "
901 --all --author= --signoff --verify --no-verify
902 --edit --amend --include --only --interactive
903 --dry-run
905 return
906 esac
907 COMPREPLY=()
910 _git_describe ()
912 local cur="${COMP_WORDS[COMP_CWORD]}"
913 case "$cur" in
914 --*)
915 __gitcomp "
916 --all --tags --contains --abbrev= --candidates=
917 --exact-match --debug --long --match --always
919 return
920 esac
921 __gitcomp "$(__git_refs)"
924 __git_diff_common_options="--stat --numstat --shortstat --summary
925 --patch-with-stat --name-only --name-status --color
926 --no-color --color-words --no-renames --check
927 --full-index --binary --abbrev --diff-filter=
928 --find-copies-harder
929 --text --ignore-space-at-eol --ignore-space-change
930 --ignore-all-space --exit-code --quiet --ext-diff
931 --no-ext-diff
932 --no-prefix --src-prefix= --dst-prefix=
933 --inter-hunk-context=
934 --patience
935 --raw
936 --dirstat --dirstat= --dirstat-by-file
937 --dirstat-by-file= --cumulative
940 _git_diff ()
942 __git_has_doubledash && return
944 local cur="${COMP_WORDS[COMP_CWORD]}"
945 case "$cur" in
946 --*)
947 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
948 --base --ours --theirs
949 $__git_diff_common_options
951 return
953 esac
954 __git_complete_file
957 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
958 tkdiff vimdiff gvimdiff xxdiff araxis p4merge
961 _git_difftool ()
963 __git_has_doubledash && return
965 local cur="${COMP_WORDS[COMP_CWORD]}"
966 case "$cur" in
967 --tool=*)
968 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
969 return
971 --*)
972 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
973 --base --ours --theirs
974 --no-renames --diff-filter= --find-copies-harder
975 --relative --ignore-submodules
976 --tool="
977 return
979 esac
980 __git_complete_file
983 __git_fetch_options="
984 --quiet --verbose --append --upload-pack --force --keep --depth=
985 --tags --no-tags
988 _git_fetch ()
990 local cur="${COMP_WORDS[COMP_CWORD]}"
991 case "$cur" in
992 --*)
993 __gitcomp "$__git_fetch_options"
994 return
996 esac
997 __git_complete_remote_or_refspec
1000 _git_format_patch ()
1002 local cur="${COMP_WORDS[COMP_CWORD]}"
1003 case "$cur" in
1004 --thread=*)
1005 __gitcomp "
1006 deep shallow
1007 " "" "${cur##--thread=}"
1008 return
1010 --*)
1011 __gitcomp "
1012 --stdout --attach --no-attach --thread --thread=
1013 --output-directory
1014 --numbered --start-number
1015 --numbered-files
1016 --keep-subject
1017 --signoff
1018 --in-reply-to= --cc=
1019 --full-index --binary
1020 --not --all
1021 --cover-letter
1022 --no-prefix --src-prefix= --dst-prefix=
1023 --inline --suffix= --ignore-if-in-upstream
1024 --subject-prefix=
1026 return
1028 esac
1029 __git_complete_revlist
1032 _git_fsck ()
1034 local cur="${COMP_WORDS[COMP_CWORD]}"
1035 case "$cur" in
1036 --*)
1037 __gitcomp "
1038 --tags --root --unreachable --cache --no-reflogs --full
1039 --strict --verbose --lost-found
1041 return
1043 esac
1044 COMPREPLY=()
1047 _git_gc ()
1049 local cur="${COMP_WORDS[COMP_CWORD]}"
1050 case "$cur" in
1051 --*)
1052 __gitcomp "--prune --aggressive"
1053 return
1055 esac
1056 COMPREPLY=()
1059 _git_grep ()
1061 __git_has_doubledash && return
1063 local cur="${COMP_WORDS[COMP_CWORD]}"
1064 case "$cur" in
1065 --*)
1066 __gitcomp "
1067 --cached
1068 --text --ignore-case --word-regexp --invert-match
1069 --full-name
1070 --extended-regexp --basic-regexp --fixed-strings
1071 --files-with-matches --name-only
1072 --files-without-match
1073 --max-depth
1074 --count
1075 --and --or --not --all-match
1077 return
1079 esac
1081 __gitcomp "$(__git_refs)"
1084 _git_help ()
1086 local cur="${COMP_WORDS[COMP_CWORD]}"
1087 case "$cur" in
1088 --*)
1089 __gitcomp "--all --info --man --web"
1090 return
1092 esac
1093 __git_compute_all_commands
1094 __gitcomp "$__git_all_commands
1095 attributes cli core-tutorial cvs-migration
1096 diffcore gitk glossary hooks ignore modules
1097 repository-layout tutorial tutorial-2
1098 workflows
1102 _git_init ()
1104 local cur="${COMP_WORDS[COMP_CWORD]}"
1105 case "$cur" in
1106 --shared=*)
1107 __gitcomp "
1108 false true umask group all world everybody
1109 " "" "${cur##--shared=}"
1110 return
1112 --*)
1113 __gitcomp "--quiet --bare --template= --shared --shared="
1114 return
1116 esac
1117 COMPREPLY=()
1120 _git_ls_files ()
1122 __git_has_doubledash && return
1124 local cur="${COMP_WORDS[COMP_CWORD]}"
1125 case "$cur" in
1126 --*)
1127 __gitcomp "--cached --deleted --modified --others --ignored
1128 --stage --directory --no-empty-directory --unmerged
1129 --killed --exclude= --exclude-from=
1130 --exclude-per-directory= --exclude-standard
1131 --error-unmatch --with-tree= --full-name
1132 --abbrev --ignored --exclude-per-directory
1134 return
1136 esac
1137 COMPREPLY=()
1140 _git_ls_remote ()
1142 __gitcomp "$(__git_remotes)"
1145 _git_ls_tree ()
1147 __git_complete_file
1150 # Options that go well for log, shortlog and gitk
1151 __git_log_common_options="
1152 --not --all
1153 --branches --tags --remotes
1154 --first-parent --merges --no-merges
1155 --max-count=
1156 --max-age= --since= --after=
1157 --min-age= --until= --before=
1159 # Options that go well for log and gitk (not shortlog)
1160 __git_log_gitk_options="
1161 --dense --sparse --full-history
1162 --simplify-merges --simplify-by-decoration
1163 --left-right
1165 # Options that go well for log and shortlog (not gitk)
1166 __git_log_shortlog_options="
1167 --author= --committer= --grep=
1168 --all-match
1171 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1172 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1174 _git_log ()
1176 __git_has_doubledash && return
1178 local cur="${COMP_WORDS[COMP_CWORD]}"
1179 local g="$(git rev-parse --git-dir 2>/dev/null)"
1180 local merge=""
1181 if [ -f "$g/MERGE_HEAD" ]; then
1182 merge="--merge"
1184 case "$cur" in
1185 --pretty=*)
1186 __gitcomp "$__git_log_pretty_formats
1187 " "" "${cur##--pretty=}"
1188 return
1190 --format=*)
1191 __gitcomp "$__git_log_pretty_formats
1192 " "" "${cur##--format=}"
1193 return
1195 --date=*)
1196 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1197 return
1199 --decorate=*)
1200 __gitcomp "long short" "" "${cur##--decorate=}"
1201 return
1203 --*)
1204 __gitcomp "
1205 $__git_log_common_options
1206 $__git_log_shortlog_options
1207 $__git_log_gitk_options
1208 --root --topo-order --date-order --reverse
1209 --follow --full-diff
1210 --abbrev-commit --abbrev=
1211 --relative-date --date=
1212 --pretty= --format= --oneline
1213 --cherry-pick
1214 --graph
1215 --decorate --decorate=
1216 --walk-reflogs
1217 --parents --children
1218 $merge
1219 $__git_diff_common_options
1220 --pickaxe-all --pickaxe-regex
1222 return
1224 esac
1225 __git_complete_revlist
1228 __git_merge_options="
1229 --no-commit --no-stat --log --no-log --squash --strategy
1230 --commit --stat --no-squash --ff --no-ff --ff-only
1233 _git_merge ()
1235 __git_complete_strategy && return
1237 local cur="${COMP_WORDS[COMP_CWORD]}"
1238 case "$cur" in
1239 --*)
1240 __gitcomp "$__git_merge_options"
1241 return
1242 esac
1243 __gitcomp "$(__git_refs)"
1246 _git_mergetool ()
1248 local cur="${COMP_WORDS[COMP_CWORD]}"
1249 case "$cur" in
1250 --tool=*)
1251 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1252 return
1254 --*)
1255 __gitcomp "--tool="
1256 return
1258 esac
1259 COMPREPLY=()
1262 _git_merge_base ()
1264 __gitcomp "$(__git_refs)"
1267 _git_mv ()
1269 local cur="${COMP_WORDS[COMP_CWORD]}"
1270 case "$cur" in
1271 --*)
1272 __gitcomp "--dry-run"
1273 return
1275 esac
1276 COMPREPLY=()
1279 _git_name_rev ()
1281 __gitcomp "--tags --all --stdin"
1284 _git_pull ()
1286 __git_complete_strategy && return
1288 local cur="${COMP_WORDS[COMP_CWORD]}"
1289 case "$cur" in
1290 --*)
1291 __gitcomp "
1292 --rebase --no-rebase
1293 $__git_merge_options
1294 $__git_fetch_options
1296 return
1298 esac
1299 __git_complete_remote_or_refspec
1302 _git_push ()
1304 local cur="${COMP_WORDS[COMP_CWORD]}"
1305 case "${COMP_WORDS[COMP_CWORD-1]}" in
1306 --repo)
1307 __gitcomp "$(__git_remotes)"
1308 return
1309 esac
1310 case "$cur" in
1311 --repo=*)
1312 __gitcomp "$(__git_remotes)" "" "${cur##--repo=}"
1313 return
1315 --*)
1316 __gitcomp "
1317 --all --mirror --tags --dry-run --force --verbose
1318 --receive-pack= --repo=
1320 return
1322 esac
1323 __git_complete_remote_or_refspec
1326 _git_rebase ()
1328 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1329 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1330 __gitcomp "--continue --skip --abort"
1331 return
1333 __git_complete_strategy && return
1334 case "$cur" in
1335 --whitespace=*)
1336 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
1337 return
1339 --*)
1340 __gitcomp "
1341 --onto --merge --strategy --interactive
1342 --preserve-merges --stat --no-stat
1343 --committer-date-is-author-date --ignore-date
1344 --ignore-whitespace --whitespace=
1347 return
1348 esac
1349 __gitcomp "$(__git_refs)"
1352 __git_send_email_confirm_options="always never auto cc compose"
1353 __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
1355 _git_send_email ()
1357 local cur="${COMP_WORDS[COMP_CWORD]}"
1358 case "$cur" in
1359 --confirm=*)
1360 __gitcomp "
1361 $__git_send_email_confirm_options
1362 " "" "${cur##--confirm=}"
1363 return
1365 --suppress-cc=*)
1366 __gitcomp "
1367 $__git_send_email_suppresscc_options
1368 " "" "${cur##--suppress-cc=}"
1370 return
1372 --smtp-encryption=*)
1373 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1374 return
1376 --*)
1377 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1378 --compose --confirm= --dry-run --envelope-sender
1379 --from --identity
1380 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1381 --no-suppress-from --no-thread --quiet
1382 --signed-off-by-cc --smtp-pass --smtp-server
1383 --smtp-server-port --smtp-encryption= --smtp-user
1384 --subject --suppress-cc= --suppress-from --thread --to
1385 --validate --no-validate"
1386 return
1388 esac
1389 COMPREPLY=()
1392 __git_config_get_set_variables ()
1394 local prevword word config_file= c=$COMP_CWORD
1395 while [ $c -gt 1 ]; do
1396 word="${COMP_WORDS[c]}"
1397 case "$word" in
1398 --global|--system|--file=*)
1399 config_file="$word"
1400 break
1402 -f|--file)
1403 config_file="$word $prevword"
1404 break
1406 esac
1407 prevword=$word
1408 c=$((--c))
1409 done
1411 git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
1412 while read line
1414 case "$line" in
1415 *.*=*)
1416 echo "${line/=*/}"
1418 esac
1419 done
1422 _git_config ()
1424 local cur="${COMP_WORDS[COMP_CWORD]}"
1425 local prv="${COMP_WORDS[COMP_CWORD-1]}"
1426 case "$prv" in
1427 branch.*.remote)
1428 __gitcomp "$(__git_remotes)"
1429 return
1431 branch.*.merge)
1432 __gitcomp "$(__git_refs)"
1433 return
1435 remote.*.fetch)
1436 local remote="${prv#remote.}"
1437 remote="${remote%.fetch}"
1438 __gitcomp "$(__git_refs_remotes "$remote")"
1439 return
1441 remote.*.push)
1442 local remote="${prv#remote.}"
1443 remote="${remote%.push}"
1444 __gitcomp "$(git --git-dir="$(__gitdir)" \
1445 for-each-ref --format='%(refname):%(refname)' \
1446 refs/heads)"
1447 return
1449 pull.twohead|pull.octopus)
1450 __git_compute_merge_strategies
1451 __gitcomp "$__git_merge_strategies"
1452 return
1454 color.branch|color.diff|color.interactive|\
1455 color.showbranch|color.status|color.ui)
1456 __gitcomp "always never auto"
1457 return
1459 color.pager)
1460 __gitcomp "false true"
1461 return
1463 color.*.*)
1464 __gitcomp "
1465 normal black red green yellow blue magenta cyan white
1466 bold dim ul blink reverse
1468 return
1470 help.format)
1471 __gitcomp "man info web html"
1472 return
1474 log.date)
1475 __gitcomp "$__git_log_date_formats"
1476 return
1478 sendemail.aliasesfiletype)
1479 __gitcomp "mutt mailrc pine elm gnus"
1480 return
1482 sendemail.confirm)
1483 __gitcomp "$__git_send_email_confirm_options"
1484 return
1486 sendemail.suppresscc)
1487 __gitcomp "$__git_send_email_suppresscc_options"
1488 return
1490 --get|--get-all|--unset|--unset-all)
1491 __gitcomp "$(__git_config_get_set_variables)"
1492 return
1494 *.*)
1495 COMPREPLY=()
1496 return
1498 esac
1499 case "$cur" in
1500 --*)
1501 __gitcomp "
1502 --global --system --file=
1503 --list --replace-all
1504 --get --get-all --get-regexp
1505 --add --unset --unset-all
1506 --remove-section --rename-section
1508 return
1510 branch.*.*)
1511 local pfx="${cur%.*}."
1512 cur="${cur##*.}"
1513 __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur"
1514 return
1516 branch.*)
1517 local pfx="${cur%.*}."
1518 cur="${cur#*.}"
1519 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1520 return
1522 guitool.*.*)
1523 local pfx="${cur%.*}."
1524 cur="${cur##*.}"
1525 __gitcomp "
1526 argprompt cmd confirm needsfile noconsole norescan
1527 prompt revprompt revunmerged title
1528 " "$pfx" "$cur"
1529 return
1531 difftool.*.*)
1532 local pfx="${cur%.*}."
1533 cur="${cur##*.}"
1534 __gitcomp "cmd path" "$pfx" "$cur"
1535 return
1537 man.*.*)
1538 local pfx="${cur%.*}."
1539 cur="${cur##*.}"
1540 __gitcomp "cmd path" "$pfx" "$cur"
1541 return
1543 mergetool.*.*)
1544 local pfx="${cur%.*}."
1545 cur="${cur##*.}"
1546 __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
1547 return
1549 pager.*)
1550 local pfx="${cur%.*}."
1551 cur="${cur#*.}"
1552 __git_compute_all_commands
1553 __gitcomp "$__git_all_commands" "$pfx" "$cur"
1554 return
1556 remote.*.*)
1557 local pfx="${cur%.*}."
1558 cur="${cur##*.}"
1559 __gitcomp "
1560 url proxy fetch push mirror skipDefaultUpdate
1561 receivepack uploadpack tagopt pushurl
1562 " "$pfx" "$cur"
1563 return
1565 remote.*)
1566 local pfx="${cur%.*}."
1567 cur="${cur#*.}"
1568 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1569 return
1571 url.*.*)
1572 local pfx="${cur%.*}."
1573 cur="${cur##*.}"
1574 __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur"
1575 return
1577 esac
1578 __gitcomp "
1579 add.ignore-errors
1580 alias.
1581 apply.ignorewhitespace
1582 apply.whitespace
1583 branch.autosetupmerge
1584 branch.autosetuprebase
1585 clean.requireForce
1586 color.branch
1587 color.branch.current
1588 color.branch.local
1589 color.branch.plain
1590 color.branch.remote
1591 color.diff
1592 color.diff.commit
1593 color.diff.frag
1594 color.diff.meta
1595 color.diff.new
1596 color.diff.old
1597 color.diff.plain
1598 color.diff.whitespace
1599 color.grep
1600 color.grep.external
1601 color.grep.match
1602 color.interactive
1603 color.interactive.header
1604 color.interactive.help
1605 color.interactive.prompt
1606 color.pager
1607 color.showbranch
1608 color.status
1609 color.status.added
1610 color.status.changed
1611 color.status.header
1612 color.status.nobranch
1613 color.status.untracked
1614 color.status.updated
1615 color.ui
1616 commit.template
1617 core.autocrlf
1618 core.bare
1619 core.compression
1620 core.createObject
1621 core.deltaBaseCacheLimit
1622 core.editor
1623 core.excludesfile
1624 core.fileMode
1625 core.fsyncobjectfiles
1626 core.gitProxy
1627 core.ignoreCygwinFSTricks
1628 core.ignoreStat
1629 core.logAllRefUpdates
1630 core.loosecompression
1631 core.packedGitLimit
1632 core.packedGitWindowSize
1633 core.pager
1634 core.preferSymlinkRefs
1635 core.preloadindex
1636 core.quotepath
1637 core.repositoryFormatVersion
1638 core.safecrlf
1639 core.sharedRepository
1640 core.symlinks
1641 core.trustctime
1642 core.warnAmbiguousRefs
1643 core.whitespace
1644 core.worktree
1645 diff.autorefreshindex
1646 diff.external
1647 diff.mnemonicprefix
1648 diff.renameLimit
1649 diff.renameLimit.
1650 diff.renames
1651 diff.suppressBlankEmpty
1652 diff.tool
1653 diff.wordRegex
1654 difftool.
1655 difftool.prompt
1656 fetch.unpackLimit
1657 format.attach
1658 format.cc
1659 format.headers
1660 format.numbered
1661 format.pretty
1662 format.signoff
1663 format.subjectprefix
1664 format.suffix
1665 format.thread
1666 gc.aggressiveWindow
1667 gc.auto
1668 gc.autopacklimit
1669 gc.packrefs
1670 gc.pruneexpire
1671 gc.reflogexpire
1672 gc.reflogexpireunreachable
1673 gc.rerereresolved
1674 gc.rerereunresolved
1675 gitcvs.allbinary
1676 gitcvs.commitmsgannotation
1677 gitcvs.dbTableNamePrefix
1678 gitcvs.dbdriver
1679 gitcvs.dbname
1680 gitcvs.dbpass
1681 gitcvs.dbuser
1682 gitcvs.enabled
1683 gitcvs.logfile
1684 gitcvs.usecrlfattr
1685 guitool.
1686 gui.blamehistoryctx
1687 gui.commitmsgwidth
1688 gui.copyblamethreshold
1689 gui.diffcontext
1690 gui.encoding
1691 gui.fastcopyblame
1692 gui.matchtrackingbranch
1693 gui.newbranchtemplate
1694 gui.pruneduringfetch
1695 gui.spellingdictionary
1696 gui.trustmtime
1697 help.autocorrect
1698 help.browser
1699 help.format
1700 http.lowSpeedLimit
1701 http.lowSpeedTime
1702 http.maxRequests
1703 http.noEPSV
1704 http.proxy
1705 http.sslCAInfo
1706 http.sslCAPath
1707 http.sslCert
1708 http.sslKey
1709 http.sslVerify
1710 i18n.commitEncoding
1711 i18n.logOutputEncoding
1712 imap.folder
1713 imap.host
1714 imap.pass
1715 imap.port
1716 imap.preformattedHTML
1717 imap.sslverify
1718 imap.tunnel
1719 imap.user
1720 instaweb.browser
1721 instaweb.httpd
1722 instaweb.local
1723 instaweb.modulepath
1724 instaweb.port
1725 interactive.singlekey
1726 log.date
1727 log.showroot
1728 mailmap.file
1729 man.
1730 man.viewer
1731 merge.conflictstyle
1732 merge.log
1733 merge.renameLimit
1734 merge.stat
1735 merge.tool
1736 merge.verbosity
1737 mergetool.
1738 mergetool.keepBackup
1739 mergetool.prompt
1740 pack.compression
1741 pack.deltaCacheLimit
1742 pack.deltaCacheSize
1743 pack.depth
1744 pack.indexVersion
1745 pack.packSizeLimit
1746 pack.threads
1747 pack.window
1748 pack.windowMemory
1749 pager.
1750 pull.octopus
1751 pull.twohead
1752 push.default
1753 rebase.stat
1754 receive.denyCurrentBranch
1755 receive.denyDeletes
1756 receive.denyNonFastForwards
1757 receive.fsckObjects
1758 receive.unpackLimit
1759 repack.usedeltabaseoffset
1760 rerere.autoupdate
1761 rerere.enabled
1762 sendemail.aliasesfile
1763 sendemail.aliasesfiletype
1764 sendemail.bcc
1765 sendemail.cc
1766 sendemail.cccmd
1767 sendemail.chainreplyto
1768 sendemail.confirm
1769 sendemail.envelopesender
1770 sendemail.multiedit
1771 sendemail.signedoffbycc
1772 sendemail.smtpencryption
1773 sendemail.smtppass
1774 sendemail.smtpserver
1775 sendemail.smtpserverport
1776 sendemail.smtpuser
1777 sendemail.suppresscc
1778 sendemail.suppressfrom
1779 sendemail.thread
1780 sendemail.to
1781 sendemail.validate
1782 showbranch.default
1783 status.relativePaths
1784 status.showUntrackedFiles
1785 tar.umask
1786 transfer.unpackLimit
1787 url.
1788 user.email
1789 user.name
1790 user.signingkey
1791 web.browser
1792 branch. remote.
1796 _git_remote ()
1798 local subcommands="add rename rm show prune update set-head"
1799 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1800 if [ -z "$subcommand" ]; then
1801 __gitcomp "$subcommands"
1802 return
1805 case "$subcommand" in
1806 rename|rm|show|prune)
1807 __gitcomp "$(__git_remotes)"
1809 update)
1810 local i c='' IFS=$'\n'
1811 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
1812 i="${i#remotes.}"
1813 c="$c ${i/ */}"
1814 done
1815 __gitcomp "$c"
1818 COMPREPLY=()
1820 esac
1823 _git_replace ()
1825 __gitcomp "$(__git_refs)"
1828 _git_reset ()
1830 __git_has_doubledash && return
1832 local cur="${COMP_WORDS[COMP_CWORD]}"
1833 case "$cur" in
1834 --*)
1835 __gitcomp "--merge --mixed --hard --soft --patch"
1836 return
1838 esac
1839 __gitcomp "$(__git_refs)"
1842 _git_revert ()
1844 local cur="${COMP_WORDS[COMP_CWORD]}"
1845 case "$cur" in
1846 --*)
1847 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1848 return
1850 esac
1851 __gitcomp "$(__git_refs)"
1854 _git_rm ()
1856 __git_has_doubledash && return
1858 local cur="${COMP_WORDS[COMP_CWORD]}"
1859 case "$cur" in
1860 --*)
1861 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1862 return
1864 esac
1865 COMPREPLY=()
1868 _git_shortlog ()
1870 __git_has_doubledash && return
1872 local cur="${COMP_WORDS[COMP_CWORD]}"
1873 case "$cur" in
1874 --*)
1875 __gitcomp "
1876 $__git_log_common_options
1877 $__git_log_shortlog_options
1878 --numbered --summary
1880 return
1882 esac
1883 __git_complete_revlist
1886 _git_show ()
1888 __git_has_doubledash && return
1890 local cur="${COMP_WORDS[COMP_CWORD]}"
1891 case "$cur" in
1892 --pretty=*)
1893 __gitcomp "$__git_log_pretty_formats
1894 " "" "${cur##--pretty=}"
1895 return
1897 --format=*)
1898 __gitcomp "$__git_log_pretty_formats
1899 " "" "${cur##--format=}"
1900 return
1902 --*)
1903 __gitcomp "--pretty= --format= --abbrev-commit --oneline
1904 $__git_diff_common_options
1906 return
1908 esac
1909 __git_complete_file
1912 _git_show_branch ()
1914 local cur="${COMP_WORDS[COMP_CWORD]}"
1915 case "$cur" in
1916 --*)
1917 __gitcomp "
1918 --all --remotes --topo-order --current --more=
1919 --list --independent --merge-base --no-name
1920 --color --no-color
1921 --sha1-name --sparse --topics --reflog
1923 return
1925 esac
1926 __git_complete_revlist
1929 _git_stash ()
1931 local cur="${COMP_WORDS[COMP_CWORD]}"
1932 local save_opts='--keep-index --no-keep-index --quiet --patch'
1933 local subcommands='save list show apply clear drop pop create branch'
1934 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1935 if [ -z "$subcommand" ]; then
1936 case "$cur" in
1937 --*)
1938 __gitcomp "$save_opts"
1941 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
1942 __gitcomp "$subcommands"
1943 else
1944 COMPREPLY=()
1947 esac
1948 else
1949 case "$subcommand,$cur" in
1950 save,--*)
1951 __gitcomp "$save_opts"
1953 apply,--*|pop,--*)
1954 __gitcomp "--index --quiet"
1956 show,--*|drop,--*|branch,--*)
1957 COMPREPLY=()
1959 show,*|apply,*|drop,*|pop,*|branch,*)
1960 __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1961 | sed -n -e 's/:.*//p')"
1964 COMPREPLY=()
1966 esac
1970 _git_submodule ()
1972 __git_has_doubledash && return
1974 local subcommands="add status init update summary foreach sync"
1975 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
1976 local cur="${COMP_WORDS[COMP_CWORD]}"
1977 case "$cur" in
1978 --*)
1979 __gitcomp "--quiet --cached"
1982 __gitcomp "$subcommands"
1984 esac
1985 return
1989 _git_svn ()
1991 local subcommands="
1992 init fetch clone rebase dcommit log find-rev
1993 set-tree commit-diff info create-ignore propget
1994 proplist show-ignore show-externals branch tag blame
1995 migrate
1997 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1998 if [ -z "$subcommand" ]; then
1999 __gitcomp "$subcommands"
2000 else
2001 local remote_opts="--username= --config-dir= --no-auth-cache"
2002 local fc_opts="
2003 --follow-parent --authors-file= --repack=
2004 --no-metadata --use-svm-props --use-svnsync-props
2005 --log-window-size= --no-checkout --quiet
2006 --repack-flags --use-log-author --localtime
2007 --ignore-paths= $remote_opts
2009 local init_opts="
2010 --template= --shared= --trunk= --tags=
2011 --branches= --stdlayout --minimize-url
2012 --no-metadata --use-svm-props --use-svnsync-props
2013 --rewrite-root= --prefix= --use-log-author
2014 --add-author-from $remote_opts
2016 local cmt_opts="
2017 --edit --rmdir --find-copies-harder --copy-similarity=
2020 local cur="${COMP_WORDS[COMP_CWORD]}"
2021 case "$subcommand,$cur" in
2022 fetch,--*)
2023 __gitcomp "--revision= --fetch-all $fc_opts"
2025 clone,--*)
2026 __gitcomp "--revision= $fc_opts $init_opts"
2028 init,--*)
2029 __gitcomp "$init_opts"
2031 dcommit,--*)
2032 __gitcomp "
2033 --merge --strategy= --verbose --dry-run
2034 --fetch-all --no-rebase --commit-url
2035 --revision $cmt_opts $fc_opts
2038 set-tree,--*)
2039 __gitcomp "--stdin $cmt_opts $fc_opts"
2041 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
2042 show-externals,--*)
2043 __gitcomp "--revision="
2045 log,--*)
2046 __gitcomp "
2047 --limit= --revision= --verbose --incremental
2048 --oneline --show-commit --non-recursive
2049 --authors-file= --color
2052 rebase,--*)
2053 __gitcomp "
2054 --merge --verbose --strategy= --local
2055 --fetch-all --dry-run $fc_opts
2058 commit-diff,--*)
2059 __gitcomp "--message= --file= --revision= $cmt_opts"
2061 info,--*)
2062 __gitcomp "--url"
2064 branch,--*)
2065 __gitcomp "--dry-run --message --tag"
2067 tag,--*)
2068 __gitcomp "--dry-run --message"
2070 blame,--*)
2071 __gitcomp "--git-format"
2073 migrate,--*)
2074 __gitcomp "
2075 --config-dir= --ignore-paths= --minimize
2076 --no-auth-cache --username=
2080 COMPREPLY=()
2082 esac
2086 _git_tag ()
2088 local i c=1 f=0
2089 while [ $c -lt $COMP_CWORD ]; do
2090 i="${COMP_WORDS[c]}"
2091 case "$i" in
2092 -d|-v)
2093 __gitcomp "$(__git_tags)"
2094 return
2099 esac
2100 c=$((++c))
2101 done
2103 case "${COMP_WORDS[COMP_CWORD-1]}" in
2104 -m|-F)
2105 COMPREPLY=()
2107 -*|tag)
2108 if [ $f = 1 ]; then
2109 __gitcomp "$(__git_tags)"
2110 else
2111 COMPREPLY=()
2115 __gitcomp "$(__git_refs)"
2117 esac
2120 _git ()
2122 local i c=1 command __git_dir
2124 while [ $c -lt $COMP_CWORD ]; do
2125 i="${COMP_WORDS[c]}"
2126 case "$i" in
2127 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2128 --bare) __git_dir="." ;;
2129 --version|-p|--paginate) ;;
2130 --help) command="help"; break ;;
2131 *) command="$i"; break ;;
2132 esac
2133 c=$((++c))
2134 done
2136 if [ -z "$command" ]; then
2137 case "${COMP_WORDS[COMP_CWORD]}" in
2138 --*) __gitcomp "
2139 --paginate
2140 --no-pager
2141 --git-dir=
2142 --bare
2143 --version
2144 --exec-path
2145 --html-path
2146 --work-tree=
2147 --help
2150 *) __git_compute_porcelain_commands
2151 __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
2152 esac
2153 return
2156 local expansion=$(__git_aliased_command "$command")
2157 [ "$expansion" ] && command="$expansion"
2159 case "$command" in
2160 am) _git_am ;;
2161 add) _git_add ;;
2162 apply) _git_apply ;;
2163 archive) _git_archive ;;
2164 bisect) _git_bisect ;;
2165 bundle) _git_bundle ;;
2166 branch) _git_branch ;;
2167 checkout) _git_checkout ;;
2168 cherry) _git_cherry ;;
2169 cherry-pick) _git_cherry_pick ;;
2170 clean) _git_clean ;;
2171 clone) _git_clone ;;
2172 commit) _git_commit ;;
2173 config) _git_config ;;
2174 describe) _git_describe ;;
2175 diff) _git_diff ;;
2176 difftool) _git_difftool ;;
2177 fetch) _git_fetch ;;
2178 format-patch) _git_format_patch ;;
2179 fsck) _git_fsck ;;
2180 gc) _git_gc ;;
2181 grep) _git_grep ;;
2182 help) _git_help ;;
2183 init) _git_init ;;
2184 log) _git_log ;;
2185 ls-files) _git_ls_files ;;
2186 ls-remote) _git_ls_remote ;;
2187 ls-tree) _git_ls_tree ;;
2188 merge) _git_merge;;
2189 mergetool) _git_mergetool;;
2190 merge-base) _git_merge_base ;;
2191 mv) _git_mv ;;
2192 name-rev) _git_name_rev ;;
2193 pull) _git_pull ;;
2194 push) _git_push ;;
2195 rebase) _git_rebase ;;
2196 remote) _git_remote ;;
2197 replace) _git_replace ;;
2198 reset) _git_reset ;;
2199 revert) _git_revert ;;
2200 rm) _git_rm ;;
2201 send-email) _git_send_email ;;
2202 shortlog) _git_shortlog ;;
2203 show) _git_show ;;
2204 show-branch) _git_show_branch ;;
2205 stash) _git_stash ;;
2206 stage) _git_add ;;
2207 submodule) _git_submodule ;;
2208 svn) _git_svn ;;
2209 tag) _git_tag ;;
2210 whatchanged) _git_log ;;
2211 *) COMPREPLY=() ;;
2212 esac
2215 _gitk ()
2217 __git_has_doubledash && return
2219 local cur="${COMP_WORDS[COMP_CWORD]}"
2220 local g="$(__gitdir)"
2221 local merge=""
2222 if [ -f "$g/MERGE_HEAD" ]; then
2223 merge="--merge"
2225 case "$cur" in
2226 --*)
2227 __gitcomp "
2228 $__git_log_common_options
2229 $__git_log_gitk_options
2230 $merge
2232 return
2234 esac
2235 __git_complete_revlist
2238 complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \
2239 || complete -o default -o nospace -F _git git
2240 complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \
2241 || complete -o default -o nospace -F _gitk gitk
2243 # The following are necessary only for Cygwin, and only are needed
2244 # when the user has tab-completed the executable name and consequently
2245 # included the '.exe' suffix.
2247 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2248 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
2249 || complete -o default -o nospace -F _git git.exe