Merge branch 'ct/autoconf-htmldir'
[git/mingw.git] / contrib / completion / git-completion.bash
blob5770b6f2d01c6d08c337a2901bba276f3d99f2d0
1 #!bash
3 # bash/zsh 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) Add the following line to your .bashrc/.zshrc:
22 # source ~/.git-completion.sh
23 # 3) Consider changing your PS1 to also show the current branch,
24 # see git-prompt.sh for details.
26 case "$COMP_WORDBREAKS" in
27 *:*) : great ;;
28 *) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
29 esac
31 # __gitdir accepts 0 or 1 arguments (i.e., location)
32 # returns location of .git repo
33 __gitdir ()
35 # Note: this function is duplicated in git-prompt.sh
36 # When updating it, make sure you update the other one to match.
37 if [ -z "${1-}" ]; then
38 if [ -n "${__git_dir-}" ]; then
39 echo "$__git_dir"
40 elif [ -n "${GIT_DIR-}" ]; then
41 test -d "${GIT_DIR-}" || return 1
42 echo "$GIT_DIR"
43 elif [ -d .git ]; then
44 echo .git
45 else
46 git rev-parse --git-dir 2>/dev/null
48 elif [ -d "$1/.git" ]; then
49 echo "$1/.git"
50 else
51 echo "$1"
55 __gitcomp_1 ()
57 local c IFS=$' \t\n'
58 for c in $1; do
59 c="$c$2"
60 case $c in
61 --*=*|*.) ;;
62 *) c="$c " ;;
63 esac
64 printf '%s\n' "$c"
65 done
68 # The following function is based on code from:
70 # bash_completion - programmable completion functions for bash 3.2+
72 # Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
73 # © 2009-2010, Bash Completion Maintainers
74 # <bash-completion-devel@lists.alioth.debian.org>
76 # This program is free software; you can redistribute it and/or modify
77 # it under the terms of the GNU General Public License as published by
78 # the Free Software Foundation; either version 2, or (at your option)
79 # any later version.
81 # This program is distributed in the hope that it will be useful,
82 # but WITHOUT ANY WARRANTY; without even the implied warranty of
83 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84 # GNU General Public License for more details.
86 # You should have received a copy of the GNU General Public License
87 # along with this program; if not, write to the Free Software Foundation,
88 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
90 # The latest version of this software can be obtained here:
92 # http://bash-completion.alioth.debian.org/
94 # RELEASE: 2.x
96 # This function can be used to access a tokenized list of words
97 # on the command line:
99 # __git_reassemble_comp_words_by_ref '=:'
100 # if test "${words_[cword_-1]}" = -w
101 # then
102 # ...
103 # fi
105 # The argument should be a collection of characters from the list of
106 # word completion separators (COMP_WORDBREAKS) to treat as ordinary
107 # characters.
109 # This is roughly equivalent to going back in time and setting
110 # COMP_WORDBREAKS to exclude those characters. The intent is to
111 # make option types like --date=<type> and <rev>:<path> easy to
112 # recognize by treating each shell word as a single token.
114 # It is best not to set COMP_WORDBREAKS directly because the value is
115 # shared with other completion scripts. By the time the completion
116 # function gets called, COMP_WORDS has already been populated so local
117 # changes to COMP_WORDBREAKS have no effect.
119 # Output: words_, cword_, cur_.
121 __git_reassemble_comp_words_by_ref()
123 local exclude i j first
124 # Which word separators to exclude?
125 exclude="${1//[^$COMP_WORDBREAKS]}"
126 cword_=$COMP_CWORD
127 if [ -z "$exclude" ]; then
128 words_=("${COMP_WORDS[@]}")
129 return
131 # List of word completion separators has shrunk;
132 # re-assemble words to complete.
133 for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
134 # Append each nonempty word consisting of just
135 # word separator characters to the current word.
136 first=t
137 while
138 [ $i -gt 0 ] &&
139 [ -n "${COMP_WORDS[$i]}" ] &&
140 # word consists of excluded word separators
141 [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
143 # Attach to the previous token,
144 # unless the previous token is the command name.
145 if [ $j -ge 2 ] && [ -n "$first" ]; then
146 ((j--))
148 first=
149 words_[$j]=${words_[j]}${COMP_WORDS[i]}
150 if [ $i = $COMP_CWORD ]; then
151 cword_=$j
153 if (($i < ${#COMP_WORDS[@]} - 1)); then
154 ((i++))
155 else
156 # Done.
157 return
159 done
160 words_[$j]=${words_[j]}${COMP_WORDS[i]}
161 if [ $i = $COMP_CWORD ]; then
162 cword_=$j
164 done
167 if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
168 _get_comp_words_by_ref ()
170 local exclude cur_ words_ cword_
171 if [ "$1" = "-n" ]; then
172 exclude=$2
173 shift 2
175 __git_reassemble_comp_words_by_ref "$exclude"
176 cur_=${words_[cword_]}
177 while [ $# -gt 0 ]; do
178 case "$1" in
179 cur)
180 cur=$cur_
182 prev)
183 prev=${words_[$cword_-1]}
185 words)
186 words=("${words_[@]}")
188 cword)
189 cword=$cword_
191 esac
192 shift
193 done
197 # Generates completion reply with compgen, appending a space to possible
198 # completion words, if necessary.
199 # It accepts 1 to 4 arguments:
200 # 1: List of possible completion words.
201 # 2: A prefix to be added to each possible completion word (optional).
202 # 3: Generate possible completion matches for this word (optional).
203 # 4: A suffix to be appended to each possible completion word (optional).
204 __gitcomp ()
206 local cur_="${3-$cur}"
208 case "$cur_" in
209 --*=)
210 COMPREPLY=()
213 local IFS=$'\n'
214 COMPREPLY=($(compgen -P "${2-}" \
215 -W "$(__gitcomp_1 "${1-}" "${4-}")" \
216 -- "$cur_"))
218 esac
221 # Generates completion reply with compgen from newline-separated possible
222 # completion words by appending a space to all of them.
223 # It accepts 1 to 4 arguments:
224 # 1: List of possible completion words, separated by a single newline.
225 # 2: A prefix to be added to each possible completion word (optional).
226 # 3: Generate possible completion matches for this word (optional).
227 # 4: A suffix to be appended to each possible completion word instead of
228 # the default space (optional). If specified but empty, nothing is
229 # appended.
230 __gitcomp_nl ()
232 local IFS=$'\n'
233 COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
236 __git_heads ()
238 local dir="$(__gitdir)"
239 if [ -d "$dir" ]; then
240 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
241 refs/heads
242 return
246 __git_tags ()
248 local dir="$(__gitdir)"
249 if [ -d "$dir" ]; then
250 git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
251 refs/tags
252 return
256 # __git_refs accepts 0, 1 (to pass to __gitdir), or 2 arguments
257 # presence of 2nd argument means use the guess heuristic employed
258 # by checkout for tracking branches
259 __git_refs ()
261 local i hash dir="$(__gitdir "${1-}")" track="${2-}"
262 local format refs
263 if [ -d "$dir" ]; then
264 case "$cur" in
265 refs|refs/*)
266 format="refname"
267 refs="${cur%/*}"
268 track=""
271 for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD; do
272 if [ -e "$dir/$i" ]; then echo $i; fi
273 done
274 format="refname:short"
275 refs="refs/tags refs/heads refs/remotes"
277 esac
278 git --git-dir="$dir" for-each-ref --format="%($format)" \
279 $refs
280 if [ -n "$track" ]; then
281 # employ the heuristic used by git checkout
282 # Try to find a remote branch that matches the completion word
283 # but only output if the branch name is unique
284 local ref entry
285 git --git-dir="$dir" for-each-ref --shell --format="ref=%(refname:short)" \
286 "refs/remotes/" | \
287 while read -r entry; do
288 eval "$entry"
289 ref="${ref#*/}"
290 if [[ "$ref" == "$cur"* ]]; then
291 echo "$ref"
293 done | sort | uniq -u
295 return
297 case "$cur" in
298 refs|refs/*)
299 git ls-remote "$dir" "$cur*" 2>/dev/null | \
300 while read -r hash i; do
301 case "$i" in
302 *^{}) ;;
303 *) echo "$i" ;;
304 esac
305 done
308 git ls-remote "$dir" HEAD ORIG_HEAD 'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev/null | \
309 while read -r hash i; do
310 case "$i" in
311 *^{}) ;;
312 refs/*) echo "${i#refs/*/}" ;;
313 *) echo "$i" ;;
314 esac
315 done
317 esac
320 # __git_refs2 requires 1 argument (to pass to __git_refs)
321 __git_refs2 ()
323 local i
324 for i in $(__git_refs "$1"); do
325 echo "$i:$i"
326 done
329 # __git_refs_remotes requires 1 argument (to pass to ls-remote)
330 __git_refs_remotes ()
332 local i hash
333 git ls-remote "$1" 'refs/heads/*' 2>/dev/null | \
334 while read -r hash i; do
335 echo "$i:refs/remotes/$1/${i#refs/heads/}"
336 done
339 __git_remotes ()
341 local i IFS=$'\n' d="$(__gitdir)"
342 test -d "$d/remotes" && ls -1 "$d/remotes"
343 for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
344 i="${i#remote.}"
345 echo "${i/.url*/}"
346 done
349 __git_list_merge_strategies ()
351 git merge -s help 2>&1 |
352 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
353 s/\.$//
354 s/.*://
355 s/^[ ]*//
356 s/[ ]*$//
361 __git_merge_strategies=
362 # 'git merge -s help' (and thus detection of the merge strategy
363 # list) fails, unfortunately, if run outside of any git working
364 # tree. __git_merge_strategies is set to the empty string in
365 # that case, and the detection will be repeated the next time it
366 # is needed.
367 __git_compute_merge_strategies ()
369 test -n "$__git_merge_strategies" ||
370 __git_merge_strategies=$(__git_list_merge_strategies)
373 __git_complete_revlist_file ()
375 local pfx ls ref cur_="$cur"
376 case "$cur_" in
377 *..?*:*)
378 return
380 ?*:*)
381 ref="${cur_%%:*}"
382 cur_="${cur_#*:}"
383 case "$cur_" in
384 ?*/*)
385 pfx="${cur_%/*}"
386 cur_="${cur_##*/}"
387 ls="$ref:$pfx"
388 pfx="$pfx/"
391 ls="$ref"
393 esac
395 case "$COMP_WORDBREAKS" in
396 *:*) : great ;;
397 *) pfx="$ref:$pfx" ;;
398 esac
400 __gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" 2>/dev/null \
401 | sed '/^100... blob /{
402 s,^.* ,,
403 s,$, ,
405 /^120000 blob /{
406 s,^.* ,,
407 s,$, ,
409 /^040000 tree /{
410 s,^.* ,,
411 s,$,/,
413 s/^.* //')" \
414 "$pfx" "$cur_" ""
416 *...*)
417 pfx="${cur_%...*}..."
418 cur_="${cur_#*...}"
419 __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
421 *..*)
422 pfx="${cur_%..*}.."
423 cur_="${cur_#*..}"
424 __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
427 __gitcomp_nl "$(__git_refs)"
429 esac
433 __git_complete_file ()
435 __git_complete_revlist_file
438 __git_complete_revlist ()
440 __git_complete_revlist_file
443 __git_complete_remote_or_refspec ()
445 local cur_="$cur" cmd="${words[1]}"
446 local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
447 if [ "$cmd" = "remote" ]; then
448 ((c++))
450 while [ $c -lt $cword ]; do
451 i="${words[c]}"
452 case "$i" in
453 --mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
454 --all)
455 case "$cmd" in
456 push) no_complete_refspec=1 ;;
457 fetch)
458 COMPREPLY=()
459 return
461 *) ;;
462 esac
464 -*) ;;
465 *) remote="$i"; break ;;
466 esac
467 ((c++))
468 done
469 if [ -z "$remote" ]; then
470 __gitcomp_nl "$(__git_remotes)"
471 return
473 if [ $no_complete_refspec = 1 ]; then
474 COMPREPLY=()
475 return
477 [ "$remote" = "." ] && remote=
478 case "$cur_" in
479 *:*)
480 case "$COMP_WORDBREAKS" in
481 *:*) : great ;;
482 *) pfx="${cur_%%:*}:" ;;
483 esac
484 cur_="${cur_#*:}"
485 lhs=0
488 pfx="+"
489 cur_="${cur_#+}"
491 esac
492 case "$cmd" in
493 fetch)
494 if [ $lhs = 1 ]; then
495 __gitcomp_nl "$(__git_refs2 "$remote")" "$pfx" "$cur_"
496 else
497 __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
500 pull|remote)
501 if [ $lhs = 1 ]; then
502 __gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
503 else
504 __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
507 push)
508 if [ $lhs = 1 ]; then
509 __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
510 else
511 __gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
514 esac
517 __git_complete_strategy ()
519 __git_compute_merge_strategies
520 case "$prev" in
521 -s|--strategy)
522 __gitcomp "$__git_merge_strategies"
523 return 0
524 esac
525 case "$cur" in
526 --strategy=*)
527 __gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
528 return 0
530 esac
531 return 1
534 __git_commands () {
535 if test -n "${GIT_TESTING_COMMAND_COMPLETION:-}"
536 then
537 printf "%s" "${GIT_TESTING_COMMAND_COMPLETION}"
538 else
539 git help -a|egrep '^ [a-zA-Z0-9]'
543 __git_list_all_commands ()
545 local i IFS=" "$'\n'
546 for i in $(__git_commands)
548 case $i in
549 *--*) : helper pattern;;
550 *) echo $i;;
551 esac
552 done
555 __git_all_commands=
556 __git_compute_all_commands ()
558 test -n "$__git_all_commands" ||
559 __git_all_commands=$(__git_list_all_commands)
562 __git_list_porcelain_commands ()
564 local i IFS=" "$'\n'
565 __git_compute_all_commands
566 for i in $__git_all_commands
568 case $i in
569 *--*) : helper pattern;;
570 applymbox) : ask gittus;;
571 applypatch) : ask gittus;;
572 archimport) : import;;
573 cat-file) : plumbing;;
574 check-attr) : plumbing;;
575 check-ignore) : plumbing;;
576 check-ref-format) : plumbing;;
577 checkout-index) : plumbing;;
578 commit-tree) : plumbing;;
579 count-objects) : infrequent;;
580 credential-cache) : credentials helper;;
581 credential-store) : credentials helper;;
582 cvsexportcommit) : export;;
583 cvsimport) : import;;
584 cvsserver) : daemon;;
585 daemon) : daemon;;
586 diff-files) : plumbing;;
587 diff-index) : plumbing;;
588 diff-tree) : plumbing;;
589 fast-import) : import;;
590 fast-export) : export;;
591 fsck-objects) : plumbing;;
592 fetch-pack) : plumbing;;
593 fmt-merge-msg) : plumbing;;
594 for-each-ref) : plumbing;;
595 hash-object) : plumbing;;
596 http-*) : transport;;
597 index-pack) : plumbing;;
598 init-db) : deprecated;;
599 local-fetch) : plumbing;;
600 lost-found) : infrequent;;
601 ls-files) : plumbing;;
602 ls-remote) : plumbing;;
603 ls-tree) : plumbing;;
604 mailinfo) : plumbing;;
605 mailsplit) : plumbing;;
606 merge-*) : plumbing;;
607 mktree) : plumbing;;
608 mktag) : plumbing;;
609 pack-objects) : plumbing;;
610 pack-redundant) : plumbing;;
611 pack-refs) : plumbing;;
612 parse-remote) : plumbing;;
613 patch-id) : plumbing;;
614 peek-remote) : plumbing;;
615 prune) : plumbing;;
616 prune-packed) : plumbing;;
617 quiltimport) : import;;
618 read-tree) : plumbing;;
619 receive-pack) : plumbing;;
620 remote-*) : transport;;
621 repo-config) : deprecated;;
622 rerere) : plumbing;;
623 rev-list) : plumbing;;
624 rev-parse) : plumbing;;
625 runstatus) : plumbing;;
626 sh-setup) : internal;;
627 shell) : daemon;;
628 show-ref) : plumbing;;
629 send-pack) : plumbing;;
630 show-index) : plumbing;;
631 ssh-*) : transport;;
632 stripspace) : plumbing;;
633 symbolic-ref) : plumbing;;
634 tar-tree) : deprecated;;
635 unpack-file) : plumbing;;
636 unpack-objects) : plumbing;;
637 update-index) : plumbing;;
638 update-ref) : plumbing;;
639 update-server-info) : daemon;;
640 upload-archive) : plumbing;;
641 upload-pack) : plumbing;;
642 write-tree) : plumbing;;
643 var) : infrequent;;
644 verify-pack) : infrequent;;
645 verify-tag) : plumbing;;
646 *) echo $i;;
647 esac
648 done
651 __git_porcelain_commands=
652 __git_compute_porcelain_commands ()
654 __git_compute_all_commands
655 test -n "$__git_porcelain_commands" ||
656 __git_porcelain_commands=$(__git_list_porcelain_commands)
659 __git_pretty_aliases ()
661 local i IFS=$'\n'
662 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
663 case "$i" in
664 pretty.*)
665 i="${i#pretty.}"
666 echo "${i/ */}"
668 esac
669 done
672 __git_aliases ()
674 local i IFS=$'\n'
675 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
676 case "$i" in
677 alias.*)
678 i="${i#alias.}"
679 echo "${i/ */}"
681 esac
682 done
685 # __git_aliased_command requires 1 argument
686 __git_aliased_command ()
688 local word cmdline=$(git --git-dir="$(__gitdir)" \
689 config --get "alias.$1")
690 for word in $cmdline; do
691 case "$word" in
692 \!gitk|gitk)
693 echo "gitk"
694 return
696 \!*) : shell command alias ;;
697 -*) : option ;;
698 *=*) : setting env ;;
699 git) : git itself ;;
701 echo "$word"
702 return
703 esac
704 done
707 # __git_find_on_cmdline requires 1 argument
708 __git_find_on_cmdline ()
710 local word subcommand c=1
711 while [ $c -lt $cword ]; do
712 word="${words[c]}"
713 for subcommand in $1; do
714 if [ "$subcommand" = "$word" ]; then
715 echo "$subcommand"
716 return
718 done
719 ((c++))
720 done
723 __git_has_doubledash ()
725 local c=1
726 while [ $c -lt $cword ]; do
727 if [ "--" = "${words[c]}" ]; then
728 return 0
730 ((c++))
731 done
732 return 1
735 __git_whitespacelist="nowarn warn error error-all fix"
737 _git_am ()
739 local dir="$(__gitdir)"
740 if [ -d "$dir"/rebase-apply ]; then
741 __gitcomp "--skip --continue --resolved --abort"
742 return
744 case "$cur" in
745 --whitespace=*)
746 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
747 return
749 --*)
750 __gitcomp "
751 --3way --committer-date-is-author-date --ignore-date
752 --ignore-whitespace --ignore-space-change
753 --interactive --keep --no-utf8 --signoff --utf8
754 --whitespace= --scissors
756 return
757 esac
758 COMPREPLY=()
761 _git_apply ()
763 case "$cur" in
764 --whitespace=*)
765 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
766 return
768 --*)
769 __gitcomp "
770 --stat --numstat --summary --check --index
771 --cached --index-info --reverse --reject --unidiff-zero
772 --apply --no-add --exclude=
773 --ignore-whitespace --ignore-space-change
774 --whitespace= --inaccurate-eof --verbose
776 return
777 esac
778 COMPREPLY=()
781 _git_add ()
783 __git_has_doubledash && return
785 case "$cur" in
786 --*)
787 __gitcomp "
788 --interactive --refresh --patch --update --dry-run
789 --ignore-errors --intent-to-add
791 return
792 esac
793 COMPREPLY=()
796 _git_archive ()
798 case "$cur" in
799 --format=*)
800 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
801 return
803 --remote=*)
804 __gitcomp_nl "$(__git_remotes)" "" "${cur##--remote=}"
805 return
807 --*)
808 __gitcomp "
809 --format= --list --verbose
810 --prefix= --remote= --exec=
812 return
814 esac
815 __git_complete_file
818 _git_bisect ()
820 __git_has_doubledash && return
822 local subcommands="start bad good skip reset visualize replay log run"
823 local subcommand="$(__git_find_on_cmdline "$subcommands")"
824 if [ -z "$subcommand" ]; then
825 if [ -f "$(__gitdir)"/BISECT_START ]; then
826 __gitcomp "$subcommands"
827 else
828 __gitcomp "replay start"
830 return
833 case "$subcommand" in
834 bad|good|reset|skip|start)
835 __gitcomp_nl "$(__git_refs)"
838 COMPREPLY=()
840 esac
843 _git_branch ()
845 local i c=1 only_local_ref="n" has_r="n"
847 while [ $c -lt $cword ]; do
848 i="${words[c]}"
849 case "$i" in
850 -d|-m) only_local_ref="y" ;;
851 -r) has_r="y" ;;
852 esac
853 ((c++))
854 done
856 case "$cur" in
857 --set-upstream-to=*)
858 __gitcomp "$(__git_refs)" "" "${cur##--set-upstream-to=}"
860 --*)
861 __gitcomp "
862 --color --no-color --verbose --abbrev= --no-abbrev
863 --track --no-track --contains --merged --no-merged
864 --set-upstream-to= --edit-description --list
865 --unset-upstream
869 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
870 __gitcomp_nl "$(__git_heads)"
871 else
872 __gitcomp_nl "$(__git_refs)"
875 esac
878 _git_bundle ()
880 local cmd="${words[2]}"
881 case "$cword" in
883 __gitcomp "create list-heads verify unbundle"
886 # looking for a file
889 case "$cmd" in
890 create)
891 __git_complete_revlist
893 esac
895 esac
898 _git_checkout ()
900 __git_has_doubledash && return
902 case "$cur" in
903 --conflict=*)
904 __gitcomp "diff3 merge" "" "${cur##--conflict=}"
906 --*)
907 __gitcomp "
908 --quiet --ours --theirs --track --no-track --merge
909 --conflict= --orphan --patch
913 # check if --track, --no-track, or --no-guess was specified
914 # if so, disable DWIM mode
915 local flags="--track --no-track --no-guess" track=1
916 if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
917 track=''
919 __gitcomp_nl "$(__git_refs '' $track)"
921 esac
924 _git_cherry ()
926 __gitcomp "$(__git_refs)"
929 _git_cherry_pick ()
931 case "$cur" in
932 --*)
933 __gitcomp "--edit --no-commit"
936 __gitcomp_nl "$(__git_refs)"
938 esac
941 _git_clean ()
943 __git_has_doubledash && return
945 case "$cur" in
946 --*)
947 __gitcomp "--dry-run --quiet"
948 return
950 esac
951 COMPREPLY=()
954 _git_clone ()
956 case "$cur" in
957 --*)
958 __gitcomp "
959 --local
960 --no-hardlinks
961 --shared
962 --reference
963 --quiet
964 --no-checkout
965 --bare
966 --mirror
967 --origin
968 --upload-pack
969 --template=
970 --depth
971 --single-branch
972 --branch
974 return
976 esac
977 COMPREPLY=()
980 _git_commit ()
982 __git_has_doubledash && return
984 case "$prev" in
985 -c|-C)
986 __gitcomp_nl "$(__git_refs)" "" "${cur}"
987 return
989 esac
991 case "$cur" in
992 --cleanup=*)
993 __gitcomp "default strip verbatim whitespace
994 " "" "${cur##--cleanup=}"
995 return
997 --reuse-message=*|--reedit-message=*|\
998 --fixup=*|--squash=*)
999 __gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
1000 return
1002 --untracked-files=*)
1003 __gitcomp "all no normal" "" "${cur##--untracked-files=}"
1004 return
1006 --*)
1007 __gitcomp "
1008 --all --author= --signoff --verify --no-verify
1009 --edit --no-edit
1010 --amend --include --only --interactive
1011 --dry-run --reuse-message= --reedit-message=
1012 --reset-author --file= --message= --template=
1013 --cleanup= --untracked-files --untracked-files=
1014 --verbose --quiet --fixup= --squash=
1016 return
1017 esac
1018 COMPREPLY=()
1021 _git_describe ()
1023 case "$cur" in
1024 --*)
1025 __gitcomp "
1026 --all --tags --contains --abbrev= --candidates=
1027 --exact-match --debug --long --match --always
1029 return
1030 esac
1031 __gitcomp_nl "$(__git_refs)"
1034 __git_diff_common_options="--stat --numstat --shortstat --summary
1035 --patch-with-stat --name-only --name-status --color
1036 --no-color --color-words --no-renames --check
1037 --full-index --binary --abbrev --diff-filter=
1038 --find-copies-harder
1039 --text --ignore-space-at-eol --ignore-space-change
1040 --ignore-all-space --exit-code --quiet --ext-diff
1041 --no-ext-diff
1042 --no-prefix --src-prefix= --dst-prefix=
1043 --inter-hunk-context=
1044 --patience
1045 --raw
1046 --dirstat --dirstat= --dirstat-by-file
1047 --dirstat-by-file= --cumulative
1050 _git_diff ()
1052 __git_has_doubledash && return
1054 case "$cur" in
1055 --*)
1056 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
1057 --base --ours --theirs --no-index
1058 $__git_diff_common_options
1060 return
1062 esac
1063 __git_complete_revlist_file
1066 __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
1067 tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
1070 _git_difftool ()
1072 __git_has_doubledash && return
1074 case "$cur" in
1075 --tool=*)
1076 __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
1077 return
1079 --*)
1080 __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
1081 --base --ours --theirs
1082 --no-renames --diff-filter= --find-copies-harder
1083 --relative --ignore-submodules
1084 --tool="
1085 return
1087 esac
1088 __git_complete_file
1091 __git_fetch_options="
1092 --quiet --verbose --append --upload-pack --force --keep --depth=
1093 --tags --no-tags --all --prune --dry-run
1096 _git_fetch ()
1098 case "$cur" in
1099 --*)
1100 __gitcomp "$__git_fetch_options"
1101 return
1103 esac
1104 __git_complete_remote_or_refspec
1107 __git_format_patch_options="
1108 --stdout --attach --no-attach --thread --thread= --output-directory
1109 --numbered --start-number --numbered-files --keep-subject --signoff
1110 --signature --no-signature --in-reply-to= --cc= --full-index --binary
1111 --not --all --cover-letter --no-prefix --src-prefix= --dst-prefix=
1112 --inline --suffix= --ignore-if-in-upstream --subject-prefix=
1115 _git_format_patch ()
1117 case "$cur" in
1118 --thread=*)
1119 __gitcomp "
1120 deep shallow
1121 " "" "${cur##--thread=}"
1122 return
1124 --*)
1125 __gitcomp "$__git_format_patch_options"
1126 return
1128 esac
1129 __git_complete_revlist
1132 _git_fsck ()
1134 case "$cur" in
1135 --*)
1136 __gitcomp "
1137 --tags --root --unreachable --cache --no-reflogs --full
1138 --strict --verbose --lost-found
1140 return
1142 esac
1143 COMPREPLY=()
1146 _git_gc ()
1148 case "$cur" in
1149 --*)
1150 __gitcomp "--prune --aggressive"
1151 return
1153 esac
1154 COMPREPLY=()
1157 _git_gitk ()
1159 _gitk
1162 __git_match_ctag() {
1163 awk "/^${1////\\/}/ { print \$1 }" "$2"
1166 _git_grep ()
1168 __git_has_doubledash && return
1170 case "$cur" in
1171 --*)
1172 __gitcomp "
1173 --cached
1174 --text --ignore-case --word-regexp --invert-match
1175 --full-name --line-number
1176 --extended-regexp --basic-regexp --fixed-strings
1177 --perl-regexp
1178 --files-with-matches --name-only
1179 --files-without-match
1180 --max-depth
1181 --count
1182 --and --or --not --all-match
1184 return
1186 esac
1188 case "$cword,$prev" in
1189 2,*|*,-*)
1190 if test -r tags; then
1191 __gitcomp_nl "$(__git_match_ctag "$cur" tags)"
1192 return
1195 esac
1197 __gitcomp_nl "$(__git_refs)"
1200 _git_help ()
1202 case "$cur" in
1203 --*)
1204 __gitcomp "--all --info --man --web"
1205 return
1207 esac
1208 __git_compute_all_commands
1209 __gitcomp "$__git_all_commands $(__git_aliases)
1210 attributes cli core-tutorial cvs-migration
1211 diffcore gitk glossary hooks ignore modules
1212 namespaces repository-layout tutorial tutorial-2
1213 workflows
1217 _git_init ()
1219 case "$cur" in
1220 --shared=*)
1221 __gitcomp "
1222 false true umask group all world everybody
1223 " "" "${cur##--shared=}"
1224 return
1226 --*)
1227 __gitcomp "--quiet --bare --template= --shared --shared="
1228 return
1230 esac
1231 COMPREPLY=()
1234 _git_ls_files ()
1236 __git_has_doubledash && return
1238 case "$cur" in
1239 --*)
1240 __gitcomp "--cached --deleted --modified --others --ignored
1241 --stage --directory --no-empty-directory --unmerged
1242 --killed --exclude= --exclude-from=
1243 --exclude-per-directory= --exclude-standard
1244 --error-unmatch --with-tree= --full-name
1245 --abbrev --ignored --exclude-per-directory
1247 return
1249 esac
1250 COMPREPLY=()
1253 _git_ls_remote ()
1255 __gitcomp_nl "$(__git_remotes)"
1258 _git_ls_tree ()
1260 __git_complete_file
1263 # Options that go well for log, shortlog and gitk
1264 __git_log_common_options="
1265 --not --all
1266 --branches --tags --remotes
1267 --first-parent --merges --no-merges
1268 --max-count=
1269 --max-age= --since= --after=
1270 --min-age= --until= --before=
1271 --min-parents= --max-parents=
1272 --no-min-parents --no-max-parents
1274 # Options that go well for log and gitk (not shortlog)
1275 __git_log_gitk_options="
1276 --dense --sparse --full-history
1277 --simplify-merges --simplify-by-decoration
1278 --left-right --notes --no-notes
1280 # Options that go well for log and shortlog (not gitk)
1281 __git_log_shortlog_options="
1282 --author= --committer= --grep=
1283 --all-match
1286 __git_log_pretty_formats="oneline short medium full fuller email raw format:"
1287 __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
1289 _git_log ()
1291 __git_has_doubledash && return
1293 local g="$(git rev-parse --git-dir 2>/dev/null)"
1294 local merge=""
1295 if [ -f "$g/MERGE_HEAD" ]; then
1296 merge="--merge"
1298 case "$cur" in
1299 --pretty=*|--format=*)
1300 __gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
1301 " "" "${cur#*=}"
1302 return
1304 --date=*)
1305 __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
1306 return
1308 --decorate=*)
1309 __gitcomp "long short" "" "${cur##--decorate=}"
1310 return
1312 --*)
1313 __gitcomp "
1314 $__git_log_common_options
1315 $__git_log_shortlog_options
1316 $__git_log_gitk_options
1317 --root --topo-order --date-order --reverse
1318 --follow --full-diff
1319 --abbrev-commit --abbrev=
1320 --relative-date --date=
1321 --pretty= --format= --oneline
1322 --cherry-pick
1323 --graph
1324 --decorate --decorate=
1325 --walk-reflogs
1326 --parents --children
1327 $merge
1328 $__git_diff_common_options
1329 --pickaxe-all --pickaxe-regex
1331 return
1333 esac
1334 __git_complete_revlist
1337 __git_merge_options="
1338 --no-commit --no-stat --log --no-log --squash --strategy
1339 --commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
1342 _git_merge ()
1344 __git_complete_strategy && return
1346 case "$cur" in
1347 --*)
1348 __gitcomp "$__git_merge_options"
1349 return
1350 esac
1351 __gitcomp_nl "$(__git_refs)"
1354 _git_mergetool ()
1356 case "$cur" in
1357 --tool=*)
1358 __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
1359 return
1361 --*)
1362 __gitcomp "--tool="
1363 return
1365 esac
1366 COMPREPLY=()
1369 _git_merge_base ()
1371 __gitcomp_nl "$(__git_refs)"
1374 _git_mv ()
1376 case "$cur" in
1377 --*)
1378 __gitcomp "--dry-run"
1379 return
1381 esac
1382 COMPREPLY=()
1385 _git_name_rev ()
1387 __gitcomp "--tags --all --stdin"
1390 _git_notes ()
1392 local subcommands='add append copy edit list prune remove show'
1393 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1395 case "$subcommand,$cur" in
1396 ,--*)
1397 __gitcomp '--ref'
1400 case "$prev" in
1401 --ref)
1402 __gitcomp_nl "$(__git_refs)"
1405 __gitcomp "$subcommands --ref"
1407 esac
1409 add,--reuse-message=*|append,--reuse-message=*|\
1410 add,--reedit-message=*|append,--reedit-message=*)
1411 __gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
1413 add,--*|append,--*)
1414 __gitcomp '--file= --message= --reedit-message=
1415 --reuse-message='
1417 copy,--*)
1418 __gitcomp '--stdin'
1420 prune,--*)
1421 __gitcomp '--dry-run --verbose'
1423 prune,*)
1426 case "$prev" in
1427 -m|-F)
1430 __gitcomp_nl "$(__git_refs)"
1432 esac
1434 esac
1437 _git_pull ()
1439 __git_complete_strategy && return
1441 case "$cur" in
1442 --*)
1443 __gitcomp "
1444 --rebase --no-rebase
1445 $__git_merge_options
1446 $__git_fetch_options
1448 return
1450 esac
1451 __git_complete_remote_or_refspec
1454 _git_push ()
1456 case "$prev" in
1457 --repo)
1458 __gitcomp_nl "$(__git_remotes)"
1459 return
1460 esac
1461 case "$cur" in
1462 --repo=*)
1463 __gitcomp_nl "$(__git_remotes)" "" "${cur##--repo=}"
1464 return
1466 --*)
1467 __gitcomp "
1468 --all --mirror --tags --dry-run --force --verbose
1469 --receive-pack= --repo= --set-upstream
1471 return
1473 esac
1474 __git_complete_remote_or_refspec
1477 _git_rebase ()
1479 local dir="$(__gitdir)"
1480 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1481 __gitcomp "--continue --skip --abort"
1482 return
1484 __git_complete_strategy && return
1485 case "$cur" in
1486 --whitespace=*)
1487 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
1488 return
1490 --*)
1491 __gitcomp "
1492 --onto --merge --strategy --interactive
1493 --preserve-merges --stat --no-stat
1494 --committer-date-is-author-date --ignore-date
1495 --ignore-whitespace --whitespace=
1496 --autosquash
1499 return
1500 esac
1501 __gitcomp_nl "$(__git_refs)"
1504 _git_reflog ()
1506 local subcommands="show delete expire"
1507 local subcommand="$(__git_find_on_cmdline "$subcommands")"
1509 if [ -z "$subcommand" ]; then
1510 __gitcomp "$subcommands"
1511 else
1512 __gitcomp_nl "$(__git_refs)"
1516 __git_send_email_confirm_options="always never auto cc compose"
1517 __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
1519 _git_send_email ()
1521 case "$cur" in
1522 --confirm=*)
1523 __gitcomp "
1524 $__git_send_email_confirm_options
1525 " "" "${cur##--confirm=}"
1526 return
1528 --suppress-cc=*)
1529 __gitcomp "
1530 $__git_send_email_suppresscc_options
1531 " "" "${cur##--suppress-cc=}"
1533 return
1535 --smtp-encryption=*)
1536 __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
1537 return
1539 --thread=*)
1540 __gitcomp "
1541 deep shallow
1542 " "" "${cur##--thread=}"
1543 return
1545 --*)
1546 __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
1547 --compose --confirm= --dry-run --envelope-sender
1548 --from --identity
1549 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1550 --no-suppress-from --no-thread --quiet
1551 --signed-off-by-cc --smtp-pass --smtp-server
1552 --smtp-server-port --smtp-encryption= --smtp-user
1553 --subject --suppress-cc= --suppress-from --thread --to
1554 --validate --no-validate
1555 $__git_format_patch_options"
1556 return
1558 esac
1559 __git_complete_revlist
1562 _git_stage ()
1564 _git_add
1567 __git_config_get_set_variables ()
1569 local prevword word config_file= c=$cword
1570 while [ $c -gt 1 ]; do
1571 word="${words[c]}"
1572 case "$word" in
1573 --global|--system|--file=*)
1574 config_file="$word"
1575 break
1577 -f|--file)
1578 config_file="$word $prevword"
1579 break
1581 esac
1582 prevword=$word
1583 c=$((--c))
1584 done
1586 git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
1587 while read -r line
1589 case "$line" in
1590 *.*=*)
1591 echo "${line/=*/}"
1593 esac
1594 done
1597 _git_config ()
1599 case "$prev" in
1600 branch.*.remote)
1601 __gitcomp_nl "$(__git_remotes)"
1602 return
1604 branch.*.merge)
1605 __gitcomp_nl "$(__git_refs)"
1606 return
1608 remote.*.fetch)
1609 local remote="${prev#remote.}"
1610 remote="${remote%.fetch}"
1611 if [ -z "$cur" ]; then
1612 COMPREPLY=("refs/heads/")
1613 return
1615 __gitcomp_nl "$(__git_refs_remotes "$remote")"
1616 return
1618 remote.*.push)
1619 local remote="${prev#remote.}"
1620 remote="${remote%.push}"
1621 __gitcomp_nl "$(git --git-dir="$(__gitdir)" \
1622 for-each-ref --format='%(refname):%(refname)' \
1623 refs/heads)"
1624 return
1626 pull.twohead|pull.octopus)
1627 __git_compute_merge_strategies
1628 __gitcomp "$__git_merge_strategies"
1629 return
1631 color.branch|color.diff|color.interactive|\
1632 color.showbranch|color.status|color.ui)
1633 __gitcomp "always never auto"
1634 return
1636 color.pager)
1637 __gitcomp "false true"
1638 return
1640 color.*.*)
1641 __gitcomp "
1642 normal black red green yellow blue magenta cyan white
1643 bold dim ul blink reverse
1645 return
1647 help.format)
1648 __gitcomp "man info web html"
1649 return
1651 log.date)
1652 __gitcomp "$__git_log_date_formats"
1653 return
1655 sendemail.aliasesfiletype)
1656 __gitcomp "mutt mailrc pine elm gnus"
1657 return
1659 sendemail.confirm)
1660 __gitcomp "$__git_send_email_confirm_options"
1661 return
1663 sendemail.suppresscc)
1664 __gitcomp "$__git_send_email_suppresscc_options"
1665 return
1667 --get|--get-all|--unset|--unset-all)
1668 __gitcomp_nl "$(__git_config_get_set_variables)"
1669 return
1671 *.*)
1672 COMPREPLY=()
1673 return
1675 esac
1676 case "$cur" in
1677 --*)
1678 __gitcomp "
1679 --global --system --file=
1680 --list --replace-all
1681 --get --get-all --get-regexp
1682 --add --unset --unset-all
1683 --remove-section --rename-section
1685 return
1687 branch.*.*)
1688 local pfx="${cur%.*}." cur_="${cur##*.}"
1689 __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur_"
1690 return
1692 branch.*)
1693 local pfx="${cur%.*}." cur_="${cur#*.}"
1694 __gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "."
1695 return
1697 guitool.*.*)
1698 local pfx="${cur%.*}." cur_="${cur##*.}"
1699 __gitcomp "
1700 argprompt cmd confirm needsfile noconsole norescan
1701 prompt revprompt revunmerged title
1702 " "$pfx" "$cur_"
1703 return
1705 difftool.*.*)
1706 local pfx="${cur%.*}." cur_="${cur##*.}"
1707 __gitcomp "cmd path" "$pfx" "$cur_"
1708 return
1710 man.*.*)
1711 local pfx="${cur%.*}." cur_="${cur##*.}"
1712 __gitcomp "cmd path" "$pfx" "$cur_"
1713 return
1715 mergetool.*.*)
1716 local pfx="${cur%.*}." cur_="${cur##*.}"
1717 __gitcomp "cmd path trustExitCode" "$pfx" "$cur_"
1718 return
1720 pager.*)
1721 local pfx="${cur%.*}." cur_="${cur#*.}"
1722 __git_compute_all_commands
1723 __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_"
1724 return
1726 remote.*.*)
1727 local pfx="${cur%.*}." cur_="${cur##*.}"
1728 __gitcomp "
1729 url proxy fetch push mirror skipDefaultUpdate
1730 receivepack uploadpack tagopt pushurl
1731 " "$pfx" "$cur_"
1732 return
1734 remote.*)
1735 local pfx="${cur%.*}." cur_="${cur#*.}"
1736 __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
1737 return
1739 url.*.*)
1740 local pfx="${cur%.*}." cur_="${cur##*.}"
1741 __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_"
1742 return
1744 esac
1745 __gitcomp "
1746 add.ignoreErrors
1747 advice.commitBeforeMerge
1748 advice.detachedHead
1749 advice.implicitIdentity
1750 advice.pushNonFastForward
1751 advice.resolveConflict
1752 advice.statusHints
1753 alias.
1754 am.keepcr
1755 apply.ignorewhitespace
1756 apply.whitespace
1757 branch.autosetupmerge
1758 branch.autosetuprebase
1759 browser.
1760 clean.requireForce
1761 color.branch
1762 color.branch.current
1763 color.branch.local
1764 color.branch.plain
1765 color.branch.remote
1766 color.decorate.HEAD
1767 color.decorate.branch
1768 color.decorate.remoteBranch
1769 color.decorate.stash
1770 color.decorate.tag
1771 color.diff
1772 color.diff.commit
1773 color.diff.frag
1774 color.diff.func
1775 color.diff.meta
1776 color.diff.new
1777 color.diff.old
1778 color.diff.plain
1779 color.diff.whitespace
1780 color.grep
1781 color.grep.context
1782 color.grep.filename
1783 color.grep.function
1784 color.grep.linenumber
1785 color.grep.match
1786 color.grep.selected
1787 color.grep.separator
1788 color.interactive
1789 color.interactive.error
1790 color.interactive.header
1791 color.interactive.help
1792 color.interactive.prompt
1793 color.pager
1794 color.showbranch
1795 color.status
1796 color.status.added
1797 color.status.changed
1798 color.status.header
1799 color.status.nobranch
1800 color.status.untracked
1801 color.status.updated
1802 color.ui
1803 commit.status
1804 commit.template
1805 core.abbrev
1806 core.askpass
1807 core.attributesfile
1808 core.autocrlf
1809 core.bare
1810 core.bigFileThreshold
1811 core.compression
1812 core.createObject
1813 core.deltaBaseCacheLimit
1814 core.editor
1815 core.eol
1816 core.excludesfile
1817 core.fileMode
1818 core.fsyncobjectfiles
1819 core.gitProxy
1820 core.ignoreCygwinFSTricks
1821 core.ignoreStat
1822 core.ignorecase
1823 core.logAllRefUpdates
1824 core.loosecompression
1825 core.notesRef
1826 core.packedGitLimit
1827 core.packedGitWindowSize
1828 core.pager
1829 core.preferSymlinkRefs
1830 core.preloadindex
1831 core.quotepath
1832 core.repositoryFormatVersion
1833 core.safecrlf
1834 core.sharedRepository
1835 core.sparseCheckout
1836 core.symlinks
1837 core.trustctime
1838 core.warnAmbiguousRefs
1839 core.whitespace
1840 core.worktree
1841 diff.autorefreshindex
1842 diff.statGraphWidth
1843 diff.external
1844 diff.ignoreSubmodules
1845 diff.mnemonicprefix
1846 diff.noprefix
1847 diff.renameLimit
1848 diff.renames
1849 diff.suppressBlankEmpty
1850 diff.tool
1851 diff.wordRegex
1852 difftool.
1853 difftool.prompt
1854 fetch.recurseSubmodules
1855 fetch.unpackLimit
1856 format.attach
1857 format.cc
1858 format.headers
1859 format.numbered
1860 format.pretty
1861 format.signature
1862 format.signoff
1863 format.subjectprefix
1864 format.suffix
1865 format.thread
1866 format.to
1868 gc.aggressiveWindow
1869 gc.auto
1870 gc.autopacklimit
1871 gc.packrefs
1872 gc.pruneexpire
1873 gc.reflogexpire
1874 gc.reflogexpireunreachable
1875 gc.rerereresolved
1876 gc.rerereunresolved
1877 gitcvs.allbinary
1878 gitcvs.commitmsgannotation
1879 gitcvs.dbTableNamePrefix
1880 gitcvs.dbdriver
1881 gitcvs.dbname
1882 gitcvs.dbpass
1883 gitcvs.dbuser
1884 gitcvs.enabled
1885 gitcvs.logfile
1886 gitcvs.usecrlfattr
1887 guitool.
1888 gui.blamehistoryctx
1889 gui.commitmsgwidth
1890 gui.copyblamethreshold
1891 gui.diffcontext
1892 gui.encoding
1893 gui.fastcopyblame
1894 gui.matchtrackingbranch
1895 gui.newbranchtemplate
1896 gui.pruneduringfetch
1897 gui.spellingdictionary
1898 gui.trustmtime
1899 help.autocorrect
1900 help.browser
1901 help.format
1902 http.lowSpeedLimit
1903 http.lowSpeedTime
1904 http.maxRequests
1905 http.minSessions
1906 http.noEPSV
1907 http.postBuffer
1908 http.proxy
1909 http.sslCAInfo
1910 http.sslCAPath
1911 http.sslCert
1912 http.sslCertPasswordProtected
1913 http.sslKey
1914 http.sslVerify
1915 http.useragent
1916 i18n.commitEncoding
1917 i18n.logOutputEncoding
1918 imap.authMethod
1919 imap.folder
1920 imap.host
1921 imap.pass
1922 imap.port
1923 imap.preformattedHTML
1924 imap.sslverify
1925 imap.tunnel
1926 imap.user
1927 init.templatedir
1928 instaweb.browser
1929 instaweb.httpd
1930 instaweb.local
1931 instaweb.modulepath
1932 instaweb.port
1933 interactive.singlekey
1934 log.date
1935 log.decorate
1936 log.showroot
1937 mailmap.file
1938 man.
1939 man.viewer
1940 merge.
1941 merge.conflictstyle
1942 merge.log
1943 merge.renameLimit
1944 merge.renormalize
1945 merge.stat
1946 merge.tool
1947 merge.verbosity
1948 mergetool.
1949 mergetool.keepBackup
1950 mergetool.keepTemporaries
1951 mergetool.prompt
1952 notes.displayRef
1953 notes.rewrite.
1954 notes.rewrite.amend
1955 notes.rewrite.rebase
1956 notes.rewriteMode
1957 notes.rewriteRef
1958 pack.compression
1959 pack.deltaCacheLimit
1960 pack.deltaCacheSize
1961 pack.depth
1962 pack.indexVersion
1963 pack.packSizeLimit
1964 pack.threads
1965 pack.window
1966 pack.windowMemory
1967 pager.
1968 pretty.
1969 pull.octopus
1970 pull.twohead
1971 push.default
1972 rebase.autosquash
1973 rebase.stat
1974 receive.autogc
1975 receive.denyCurrentBranch
1976 receive.denyDeleteCurrent
1977 receive.denyDeletes
1978 receive.denyNonFastForwards
1979 receive.fsckObjects
1980 receive.unpackLimit
1981 receive.updateserverinfo
1982 remotes.
1983 repack.usedeltabaseoffset
1984 rerere.autoupdate
1985 rerere.enabled
1986 sendemail.
1987 sendemail.aliasesfile
1988 sendemail.aliasfiletype
1989 sendemail.bcc
1990 sendemail.cc
1991 sendemail.cccmd
1992 sendemail.chainreplyto
1993 sendemail.confirm
1994 sendemail.envelopesender
1995 sendemail.from
1996 sendemail.identity
1997 sendemail.multiedit
1998 sendemail.signedoffbycc
1999 sendemail.smtpdomain
2000 sendemail.smtpencryption
2001 sendemail.smtppass
2002 sendemail.smtpserver
2003 sendemail.smtpserveroption
2004 sendemail.smtpserverport
2005 sendemail.smtpuser
2006 sendemail.suppresscc
2007 sendemail.suppressfrom
2008 sendemail.thread
2009 sendemail.to
2010 sendemail.validate
2011 showbranch.default
2012 status.relativePaths
2013 status.showUntrackedFiles
2014 status.submodulesummary
2015 submodule.
2016 tar.umask
2017 transfer.unpackLimit
2018 url.
2019 user.email
2020 user.name
2021 user.signingkey
2022 web.browser
2023 branch. remote.
2027 _git_remote ()
2029 local subcommands="add rename remove set-head set-branches set-url show prune update"
2030 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2031 if [ -z "$subcommand" ]; then
2032 __gitcomp "$subcommands"
2033 return
2036 case "$subcommand" in
2037 rename|remove|set-url|show|prune)
2038 __gitcomp_nl "$(__git_remotes)"
2040 set-head|set-branches)
2041 __git_complete_remote_or_refspec
2043 update)
2044 local i c='' IFS=$'\n'
2045 for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
2046 i="${i#remotes.}"
2047 c="$c ${i/ */}"
2048 done
2049 __gitcomp "$c"
2052 COMPREPLY=()
2054 esac
2057 _git_replace ()
2059 __gitcomp_nl "$(__git_refs)"
2062 _git_reset ()
2064 __git_has_doubledash && return
2066 case "$cur" in
2067 --*)
2068 __gitcomp "--merge --mixed --hard --soft --patch"
2069 return
2071 esac
2072 __gitcomp_nl "$(__git_refs)"
2075 _git_revert ()
2077 case "$cur" in
2078 --*)
2079 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
2080 return
2082 esac
2083 __gitcomp_nl "$(__git_refs)"
2086 _git_rm ()
2088 __git_has_doubledash && return
2090 case "$cur" in
2091 --*)
2092 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
2093 return
2095 esac
2096 COMPREPLY=()
2099 _git_shortlog ()
2101 __git_has_doubledash && return
2103 case "$cur" in
2104 --*)
2105 __gitcomp "
2106 $__git_log_common_options
2107 $__git_log_shortlog_options
2108 --numbered --summary
2110 return
2112 esac
2113 __git_complete_revlist
2116 _git_show ()
2118 __git_has_doubledash && return
2120 case "$cur" in
2121 --pretty=*|--format=*)
2122 __gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
2123 " "" "${cur#*=}"
2124 return
2126 --*)
2127 __gitcomp "--pretty= --format= --abbrev-commit --oneline
2128 $__git_diff_common_options
2130 return
2132 esac
2133 __git_complete_file
2136 _git_show_branch ()
2138 case "$cur" in
2139 --*)
2140 __gitcomp "
2141 --all --remotes --topo-order --current --more=
2142 --list --independent --merge-base --no-name
2143 --color --no-color
2144 --sha1-name --sparse --topics --reflog
2146 return
2148 esac
2149 __git_complete_revlist
2152 _git_stash ()
2154 local save_opts='--keep-index --no-keep-index --quiet --patch'
2155 local subcommands='save list show apply clear drop pop create branch'
2156 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2157 if [ -z "$subcommand" ]; then
2158 case "$cur" in
2159 --*)
2160 __gitcomp "$save_opts"
2163 if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
2164 __gitcomp "$subcommands"
2165 else
2166 COMPREPLY=()
2169 esac
2170 else
2171 case "$subcommand,$cur" in
2172 save,--*)
2173 __gitcomp "$save_opts"
2175 apply,--*|pop,--*)
2176 __gitcomp "--index --quiet"
2178 show,--*|drop,--*|branch,--*)
2179 COMPREPLY=()
2181 show,*|apply,*|drop,*|pop,*|branch,*)
2182 __gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
2183 | sed -n -e 's/:.*//p')"
2186 COMPREPLY=()
2188 esac
2192 _git_submodule ()
2194 __git_has_doubledash && return
2196 local subcommands="add status init update summary foreach sync"
2197 if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
2198 case "$cur" in
2199 --*)
2200 __gitcomp "--quiet --cached"
2203 __gitcomp "$subcommands"
2205 esac
2206 return
2210 _git_svn ()
2212 local subcommands="
2213 init fetch clone rebase dcommit log find-rev
2214 set-tree commit-diff info create-ignore propget
2215 proplist show-ignore show-externals branch tag blame
2216 migrate mkdirs reset gc
2218 local subcommand="$(__git_find_on_cmdline "$subcommands")"
2219 if [ -z "$subcommand" ]; then
2220 __gitcomp "$subcommands"
2221 else
2222 local remote_opts="--username= --config-dir= --no-auth-cache"
2223 local fc_opts="
2224 --follow-parent --authors-file= --repack=
2225 --no-metadata --use-svm-props --use-svnsync-props
2226 --log-window-size= --no-checkout --quiet
2227 --repack-flags --use-log-author --localtime
2228 --ignore-paths= $remote_opts
2230 local init_opts="
2231 --template= --shared= --trunk= --tags=
2232 --branches= --stdlayout --minimize-url
2233 --no-metadata --use-svm-props --use-svnsync-props
2234 --rewrite-root= --prefix= --use-log-author
2235 --add-author-from $remote_opts
2237 local cmt_opts="
2238 --edit --rmdir --find-copies-harder --copy-similarity=
2241 case "$subcommand,$cur" in
2242 fetch,--*)
2243 __gitcomp "--revision= --fetch-all $fc_opts"
2245 clone,--*)
2246 __gitcomp "--revision= $fc_opts $init_opts"
2248 init,--*)
2249 __gitcomp "$init_opts"
2251 dcommit,--*)
2252 __gitcomp "
2253 --merge --strategy= --verbose --dry-run
2254 --fetch-all --no-rebase --commit-url
2255 --revision --interactive $cmt_opts $fc_opts
2258 set-tree,--*)
2259 __gitcomp "--stdin $cmt_opts $fc_opts"
2261 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
2262 show-externals,--*|mkdirs,--*)
2263 __gitcomp "--revision="
2265 log,--*)
2266 __gitcomp "
2267 --limit= --revision= --verbose --incremental
2268 --oneline --show-commit --non-recursive
2269 --authors-file= --color
2272 rebase,--*)
2273 __gitcomp "
2274 --merge --verbose --strategy= --local
2275 --fetch-all --dry-run $fc_opts
2278 commit-diff,--*)
2279 __gitcomp "--message= --file= --revision= $cmt_opts"
2281 info,--*)
2282 __gitcomp "--url"
2284 branch,--*)
2285 __gitcomp "--dry-run --message --tag"
2287 tag,--*)
2288 __gitcomp "--dry-run --message"
2290 blame,--*)
2291 __gitcomp "--git-format"
2293 migrate,--*)
2294 __gitcomp "
2295 --config-dir= --ignore-paths= --minimize
2296 --no-auth-cache --username=
2299 reset,--*)
2300 __gitcomp "--revision= --parent"
2303 COMPREPLY=()
2305 esac
2309 _git_tag ()
2311 local i c=1 f=0
2312 while [ $c -lt $cword ]; do
2313 i="${words[c]}"
2314 case "$i" in
2315 -d|-v)
2316 __gitcomp_nl "$(__git_tags)"
2317 return
2322 esac
2323 ((c++))
2324 done
2326 case "$prev" in
2327 -m|-F)
2328 COMPREPLY=()
2330 -*|tag)
2331 if [ $f = 1 ]; then
2332 __gitcomp_nl "$(__git_tags)"
2333 else
2334 COMPREPLY=()
2338 __gitcomp_nl "$(__git_refs)"
2340 esac
2343 _git_whatchanged ()
2345 _git_log
2348 __git_main ()
2350 local i c=1 command __git_dir
2352 while [ $c -lt $cword ]; do
2353 i="${words[c]}"
2354 case "$i" in
2355 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
2356 --bare) __git_dir="." ;;
2357 --help) command="help"; break ;;
2358 -c) c=$((++c)) ;;
2359 -*) ;;
2360 *) command="$i"; break ;;
2361 esac
2362 ((c++))
2363 done
2365 if [ -z "$command" ]; then
2366 case "$cur" in
2367 --*) __gitcomp "
2368 --paginate
2369 --no-pager
2370 --git-dir=
2371 --bare
2372 --version
2373 --exec-path
2374 --exec-path=
2375 --html-path
2376 --info-path
2377 --work-tree=
2378 --namespace=
2379 --no-replace-objects
2380 --help
2383 *) __git_compute_porcelain_commands
2384 __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
2385 esac
2386 return
2389 local completion_func="_git_${command//-/_}"
2390 declare -f $completion_func >/dev/null && $completion_func && return
2392 local expansion=$(__git_aliased_command "$command")
2393 if [ -n "$expansion" ]; then
2394 completion_func="_git_${expansion//-/_}"
2395 declare -f $completion_func >/dev/null && $completion_func
2399 __gitk_main ()
2401 __git_has_doubledash && return
2403 local g="$(__gitdir)"
2404 local merge=""
2405 if [ -f "$g/MERGE_HEAD" ]; then
2406 merge="--merge"
2408 case "$cur" in
2409 --*)
2410 __gitcomp "
2411 $__git_log_common_options
2412 $__git_log_gitk_options
2413 $merge
2415 return
2417 esac
2418 __git_complete_revlist
2421 if [[ -n ${ZSH_VERSION-} ]]; then
2422 echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
2424 autoload -U +X compinit && compinit
2426 __gitcomp ()
2428 emulate -L zsh
2430 local cur_="${3-$cur}"
2432 case "$cur_" in
2433 --*=)
2436 local c IFS=$' \t\n'
2437 local -a array
2438 for c in ${=1}; do
2439 c="$c${4-}"
2440 case $c in
2441 --*=*|*.) ;;
2442 *) c="$c " ;;
2443 esac
2444 array[$#array+1]="$c"
2445 done
2446 compset -P '*[=:]'
2447 compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
2449 esac
2452 __gitcomp_nl ()
2454 emulate -L zsh
2456 local IFS=$'\n'
2457 compset -P '*[=:]'
2458 compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
2461 __git_zsh_helper ()
2463 emulate -L ksh
2464 local cur cword prev
2465 cur=${words[CURRENT-1]}
2466 prev=${words[CURRENT-2]}
2467 let cword=CURRENT-1
2468 __${service}_main
2471 _git ()
2473 emulate -L zsh
2474 local _ret=1
2475 __git_zsh_helper
2476 let _ret && _default -S '' && _ret=0
2477 return _ret
2480 compdef _git git gitk
2481 return
2484 __git_func_wrap ()
2486 local cur words cword prev
2487 _get_comp_words_by_ref -n =: cur words cword prev
2491 # Setup completion for certain functions defined above by setting common
2492 # variables and workarounds.
2493 # This is NOT a public function; use at your own risk.
2494 __git_complete ()
2496 local wrapper="__git_wrap${2}"
2497 eval "$wrapper () { __git_func_wrap $2 ; }"
2498 complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
2499 || complete -o default -o nospace -F $wrapper $1
2502 # wrapper for backwards compatibility
2503 _git ()
2505 __git_wrap__git_main
2508 # wrapper for backwards compatibility
2509 _gitk ()
2511 __git_wrap__gitk_main
2514 __git_complete git __git_main
2515 __git_complete gitk __gitk_main
2517 # The following are necessary only for Cygwin, and only are needed
2518 # when the user has tab-completed the executable name and consequently
2519 # included the '.exe' suffix.
2521 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
2522 __git_complete git.exe __git_main