2 # bash completion support for core Git.
4 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
6 # Distributed under the GNU General Public License, version 2.0.
8 # The contained completion routines provide support for completing:
10 # *) local and remote branch names
11 # *) local and remote tag names
12 # *) .git/remotes file names
13 # *) git 'subcommands'
14 # *) tree paths within 'ref:path/to/file' expressions
15 # *) common --long-options
17 # To use these routines:
19 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
20 # 2) Added the following line to your .bashrc:
21 # source ~/.git-completion.sh
23 # 3) You may want to make sure the git executable is available
24 # in your PATH before this script is sourced, as some caching
25 # is performed while the script loads. If git isn't found
26 # at source time then all lookups will be done on demand,
27 # which may be slightly slower.
29 # 4) Consider changing your PS1 to also show the current branch:
30 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
32 # The argument to __git_ps1 will be displayed only if you
33 # are currently in a git repository. The %s token will be
34 # the name of the current branch.
38 # *) Read Documentation/SubmittingPatches
39 # *) Send all patches to the current maintainer:
41 # "Shawn O. Pearce" <spearce@spearce.org>
43 # *) Always CC the Git mailing list:
48 case "$COMP_WORDBREAKS" in
50 *) COMP_WORDBREAKS
="$COMP_WORDBREAKS:"
56 if [ -n "$__git_dir" ]; then
58 elif [ -d .git
]; then
61 git rev-parse
--git-dir 2>/dev
/null
63 elif [ -d "$1/.git" ]; then
72 local g
="$(git rev-parse --git-dir 2>/dev/null)"
76 if [ -d "$g/rebase-apply" ]
78 if test -f "$g/rebase-apply/rebasing"
81 elif test -f "$g/rebase-apply/applying"
87 b
="$(git symbolic-ref HEAD 2>/dev/null)"
88 elif [ -f "$g/rebase-merge/interactive" ]
91 b
="$(cat "$g/rebase-merge
/head-name
")"
92 elif [ -d "$g/rebase-merge" ]
95 b
="$(cat "$g/rebase-merge
/head-name
")"
96 elif [ -f "$g/MERGE_HEAD" ]
99 b
="$(git symbolic-ref HEAD 2>/dev/null)"
101 if [ -f "$g/BISECT_LOG" ]
105 if ! b
="$(git symbolic-ref HEAD 2>/dev/null)"
107 if ! b
="$(git describe --exact-match HEAD 2>/dev/null)"
109 b
="$(cut -c1-7 "$g/HEAD
")..."
115 printf "$1" "${b##refs/heads/}$r"
117 printf " (%s)" "${b##refs/heads/}$r"
124 local c IFS
=' '$
'\t'$
'\n'
127 --*=*) printf %s$
'\n' "$c$2" ;;
128 *.
) printf %s$
'\n' "$c$2" ;;
129 *) printf %s$
'\n' "$c$2 " ;;
136 local cur
="${COMP_WORDS[COMP_CWORD]}"
137 if [ $# -gt 2 ]; then
146 COMPREPLY
=($
(compgen
-P "$2" \
147 -W "$(__gitcomp_1 "$1" "$4")" \
155 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
156 if [ -d "$dir" ]; then
157 for i
in $
(git
--git-dir="$dir" \
158 for-each-ref
--format='%(refname)' \
160 echo "${i#refs/heads/}"
164 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
165 case "$is_hash,$i" in
168 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
169 n
,*) is_hash
=y
; echo "$i" ;;
176 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
177 if [ -d "$dir" ]; then
178 for i
in $
(git
--git-dir="$dir" \
179 for-each-ref
--format='%(refname)' \
181 echo "${i#refs/tags/}"
185 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
186 case "$is_hash,$i" in
189 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
190 n
,*) is_hash
=y
; echo "$i" ;;
197 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
198 if [ -d "$dir" ]; then
199 if [ -e "$dir/HEAD" ]; then echo HEAD
; fi
200 for i
in $
(git
--git-dir="$dir" \
201 for-each-ref
--format='%(refname)' \
202 refs
/tags refs
/heads refs
/remotes
); do
204 refs
/tags
/*) echo "${i#refs/tags/}" ;;
205 refs
/heads
/*) echo "${i#refs/heads/}" ;;
206 refs
/remotes
/*) echo "${i#refs/remotes/}" ;;
212 for i
in $
(git ls-remote
"$dir" 2>/dev
/null
); do
213 case "$is_hash,$i" in
216 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
217 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
218 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
219 n
,*) is_hash
=y
; echo "$i" ;;
227 for i
in $
(__git_refs
"$1"); do
232 __git_refs_remotes
()
234 local cmd i is_hash
=y
235 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
236 case "$is_hash,$i" in
239 echo "$i:refs/remotes/$1/${i#refs/heads/}"
243 n
,refs
/tags
/*) is_hash
=y
;;
251 local i ngoff IFS
=$
'\n' d
="$(__gitdir)"
252 shopt -q nullglob || ngoff
=1
254 for i
in "$d/remotes"/*; do
255 echo ${i#$d/remotes/}
257 [ "$ngoff" ] && shopt -u nullglob
258 for i
in $
(git
--git-dir="$d" config
--list); do
268 __git_merge_strategies
()
270 if [ -n "$__git_merge_strategylist" ]; then
271 echo "$__git_merge_strategylist"
274 sed -n "/^all_strategies='/{
275 s/^all_strategies='//
279 }" "$(git --exec-path)/git-merge"
281 __git_merge_strategylist
=
282 __git_merge_strategylist
="$(__git_merge_strategies 2>/dev/null)"
284 __git_complete_file
()
286 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
303 case "$COMP_WORDBREAKS" in
305 *) pfx
="$ref:$pfx" ;;
309 COMPREPLY
=($
(compgen
-P "$pfx" \
310 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
311 | sed '/^100... blob /{
327 __gitcomp
"$(__git_refs)"
332 __git_complete_revlist
()
334 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
339 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
344 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
347 __gitcomp
"$(__git_refs)"
352 __git_all_commands
()
354 if [ -n "$__git_all_commandlist" ]; then
355 echo "$__git_all_commandlist"
359 for i
in $
(git
help -a|
egrep '^ ')
362 *--*) : helper pattern
;;
367 __git_all_commandlist
=
368 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
370 __git_porcelain_commands
()
372 if [ -n "$__git_porcelain_commandlist" ]; then
373 echo "$__git_porcelain_commandlist"
377 for i
in "help" $
(__git_all_commands
)
380 *--*) : helper pattern
;;
381 applymbox
) : ask gittus
;;
382 applypatch
) : ask gittus
;;
383 archimport
) : import
;;
384 cat-file
) : plumbing
;;
385 check-attr
) : plumbing
;;
386 check-ref-format
) : plumbing
;;
387 commit-tree
) : plumbing
;;
388 cvsexportcommit
) : export;;
389 cvsimport
) : import
;;
390 cvsserver
) : daemon
;;
392 diff-files
) : plumbing
;;
393 diff-index
) : plumbing
;;
394 diff-tree
) : plumbing
;;
395 fast-import
) : import
;;
396 fsck-objects
) : plumbing
;;
397 fetch-pack
) : plumbing
;;
398 fmt-merge-msg
) : plumbing
;;
399 for-each-ref
) : plumbing
;;
400 hash-object
) : plumbing
;;
401 http-
*) : transport
;;
402 index-pack
) : plumbing
;;
403 init-db
) : deprecated
;;
404 local-fetch
) : plumbing
;;
405 mailinfo
) : plumbing
;;
406 mailsplit
) : plumbing
;;
407 merge-
*) : plumbing
;;
410 pack-objects
) : plumbing
;;
411 pack-redundant
) : plumbing
;;
412 pack-refs
) : plumbing
;;
413 parse-remote
) : plumbing
;;
414 patch-id
) : plumbing
;;
415 peek-remote
) : plumbing
;;
417 prune-packed
) : plumbing
;;
418 quiltimport
) : import
;;
419 read-tree
) : plumbing
;;
420 receive-pack
) : plumbing
;;
422 repo-config
) : deprecated
;;
424 rev-list
) : plumbing
;;
425 rev-parse
) : plumbing
;;
426 runstatus
) : plumbing
;;
427 sh-setup
) : internal
;;
429 send-pack
) : plumbing
;;
430 show-index
) : plumbing
;;
432 stripspace
) : plumbing
;;
433 symbolic-ref
) : plumbing
;;
434 tar-tree
) : deprecated
;;
435 unpack-file
) : plumbing
;;
436 unpack-objects
) : plumbing
;;
437 update-index
) : plumbing
;;
438 update-ref
) : plumbing
;;
439 update-server-info
) : daemon
;;
440 upload-archive
) : plumbing
;;
441 upload-pack
) : plumbing
;;
442 write-tree
) : plumbing
;;
443 verify-tag
) : plumbing
;;
448 __git_porcelain_commandlist
=
449 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
454 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
464 __git_aliased_command
()
466 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
467 config
--get "alias.$1")
468 for word
in $cmdline; do
469 if [ "${word##-*}" ]; then
476 __git_find_subcommand
()
478 local word subcommand c
=1
480 while [ $c -lt $COMP_CWORD ]; do
481 word
="${COMP_WORDS[c]}"
482 for subcommand
in $1; do
483 if [ "$subcommand" = "$word" ]; then
492 __git_has_doubledash
()
495 while [ $c -lt $COMP_CWORD ]; do
496 if [ "--" = "${COMP_WORDS[c]}" ]; then
504 __git_whitespacelist
="nowarn warn error error-all strip"
508 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
509 if [ -d "$dir"/rebase-apply
]; then
510 __gitcomp
"--skip --resolved --abort"
515 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
520 --signoff --utf8 --binary --3way --interactive
530 local cur
="${COMP_WORDS[COMP_CWORD]}"
533 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
538 --stat --numstat --summary --check --index
539 --cached --index-info --reverse --reject --unidiff-zero
540 --apply --no-add --exclude=
541 --whitespace= --inaccurate-eof --verbose
550 __git_has_doubledash
&& return
552 local cur
="${COMP_WORDS[COMP_CWORD]}"
556 --interactive --refresh --patch --update --dry-run
566 __git_has_doubledash
&& return
568 local subcommands
="start bad good skip reset visualize replay log run"
569 local subcommand
="$(__git_find_subcommand "$subcommands")"
570 if [ -z "$subcommand" ]; then
571 __gitcomp
"$subcommands"
575 case "$subcommand" in
577 __gitcomp
"$(__git_refs)"
587 local i c
=1 only_local_ref
="n" has_r
="n"
589 while [ $c -lt $COMP_CWORD ]; do
592 -d|
-m) only_local_ref
="y" ;;
598 case "${COMP_WORDS[COMP_CWORD]}" in
599 --*=*) COMPREPLY
=() ;;
602 --color --no-color --verbose --abbrev= --no-abbrev
603 --track --no-track --contains --merged --no-merged
607 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
608 __gitcomp
"$(__git_heads)"
610 __gitcomp
"$(__git_refs)"
618 local mycword
="$COMP_CWORD"
619 case "${COMP_WORDS[0]}" in
621 local cmd
="${COMP_WORDS[2]}"
622 mycword
="$((mycword-1))"
625 local cmd
="${COMP_WORDS[1]}"
630 __gitcomp
"create list-heads verify unbundle"
638 __git_complete_revlist
647 __git_has_doubledash
&& return
649 __gitcomp
"$(__git_refs)"
654 __gitcomp
"$(__git_refs)"
659 local cur
="${COMP_WORDS[COMP_CWORD]}"
662 __gitcomp
"--edit --no-commit"
665 __gitcomp
"$(__git_refs)"
672 __git_has_doubledash
&& return
674 local cur
="${COMP_WORDS[COMP_CWORD]}"
678 --all --author= --signoff --verify --no-verify
679 --edit --amend --include --only
688 local cur
="${COMP_WORDS[COMP_CWORD]}"
692 --all --tags --contains --abbrev= --candidates=
693 --exact-match --debug --long --match --always
697 __gitcomp
"$(__git_refs)"
702 __git_has_doubledash
&& return
704 local cur
="${COMP_WORDS[COMP_CWORD]}"
707 __gitcomp
"--cached --stat --numstat --shortstat --summary
708 --patch-with-stat --name-only --name-status --color
709 --no-color --color-words --no-renames --check
710 --full-index --binary --abbrev --diff-filter
711 --find-copies-harder --pickaxe-all --pickaxe-regex
712 --text --ignore-space-at-eol --ignore-space-change
713 --ignore-all-space --exit-code --quiet --ext-diff
715 --no-prefix --src-prefix= --dst-prefix=
716 --base --ours --theirs
726 local cur
="${COMP_WORDS[COMP_CWORD]}"
728 case "${COMP_WORDS[0]},$COMP_CWORD" in
730 __gitcomp
"$(__git_remotes)"
733 __gitcomp
"$(__git_remotes)"
739 case "$COMP_WORDBREAKS" in
741 *) pfx
="${cur%%:*}:" ;;
743 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
747 case "${COMP_WORDS[0]}" in
748 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
749 git
) remote
="${COMP_WORDS[2]}" ;;
751 __gitcomp
"$(__git_refs2 "$remote")"
760 local cur
="${COMP_WORDS[COMP_CWORD]}"
764 --stdout --attach --thread
766 --numbered --start-number
771 --full-index --binary
774 --no-prefix --src-prefix= --dst-prefix=
779 __git_complete_revlist
784 local cur
="${COMP_WORDS[COMP_CWORD]}"
787 __gitcomp
"--prune --aggressive"
796 __git_has_doubledash
&& return
798 local cur
="${COMP_WORDS[COMP_CWORD]}"
803 --text --ignore-case --word-regexp --invert-match
805 --extended-regexp --basic-regexp --fixed-strings
806 --files-with-matches --name-only
807 --files-without-match
809 --and --or --not --all-match
819 local cur
="${COMP_WORDS[COMP_CWORD]}"
822 __gitcomp
"--all --info --man --web"
826 __gitcomp
"$(__git_all_commands)"
831 __gitcomp
"$(__git_remotes)"
841 __git_has_doubledash
&& return
843 local cur
="${COMP_WORDS[COMP_CWORD]}"
847 oneline short medium full fuller email raw
848 " "" "${cur##--pretty=}"
853 relative iso8601 rfc2822 short local default
854 " "" "${cur##--date=}"
859 --max-count= --max-age= --since= --after=
860 --min-age= --before= --until=
861 --root --topo-order --date-order --reverse
863 --abbrev-commit --abbrev=
864 --relative-date --date=
865 --author= --committer= --grep=
867 --pretty= --name-status --name-only --raw
869 --left-right --cherry-pick
871 --stat --numstat --shortstat
872 --decorate --diff-filter=
873 --color-words --walk-reflogs
874 --parents --children --full-history
879 __git_complete_revlist
884 local cur
="${COMP_WORDS[COMP_CWORD]}"
885 case "${COMP_WORDS[COMP_CWORD-1]}" in
887 __gitcomp
"$(__git_merge_strategies)"
892 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
897 --no-commit --no-stat --log --no-log --squash --strategy
901 __gitcomp
"$(__git_refs)"
906 __gitcomp
"$(__git_refs)"
911 __gitcomp
"--tags --all --stdin"
916 local cur
="${COMP_WORDS[COMP_CWORD]}"
918 case "${COMP_WORDS[0]},$COMP_CWORD" in
920 __gitcomp
"$(__git_remotes)"
923 __gitcomp
"$(__git_remotes)"
927 case "${COMP_WORDS[0]}" in
928 git-pull
) remote
="${COMP_WORDS[1]}" ;;
929 git
) remote
="${COMP_WORDS[2]}" ;;
931 __gitcomp
"$(__git_refs "$remote")"
938 local cur
="${COMP_WORDS[COMP_CWORD]}"
940 case "${COMP_WORDS[0]},$COMP_CWORD" in
942 __gitcomp
"$(__git_remotes)"
945 __gitcomp
"$(__git_remotes)"
951 case "${COMP_WORDS[0]}" in
952 git-push
) remote
="${COMP_WORDS[1]}" ;;
953 git
) remote
="${COMP_WORDS[2]}" ;;
957 case "$COMP_WORDBREAKS" in
959 *) pfx
="${cur%%:*}:" ;;
962 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
965 __gitcomp
"$(__git_refs)" + "${cur#+}"
968 __gitcomp
"$(__git_refs)"
977 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
978 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
979 __gitcomp
"--continue --skip --abort"
982 case "${COMP_WORDS[COMP_CWORD-1]}" in
984 __gitcomp
"$(__git_merge_strategies)"
989 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
993 __gitcomp
"--onto --merge --strategy --interactive"
996 __gitcomp
"$(__git_refs)"
1001 local cur
="${COMP_WORDS[COMP_CWORD]}"
1004 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1005 --dry-run --envelope-sender --from --identity
1006 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1007 --no-suppress-from --no-thread --quiet
1008 --signed-off-by-cc --smtp-pass --smtp-server
1009 --smtp-server-port --smtp-ssl --smtp-user --subject
1010 --suppress-cc --suppress-from --thread --to"
1019 local cur
="${COMP_WORDS[COMP_CWORD]}"
1020 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1023 __gitcomp
"$(__git_remotes)"
1027 __gitcomp
"$(__git_refs)"
1031 local remote
="${prv#remote.}"
1032 remote
="${remote%.fetch}"
1033 __gitcomp
"$(__git_refs_remotes "$remote")"
1037 local remote
="${prv#remote.}"
1038 remote
="${remote%.push}"
1039 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1040 for-each-ref --format='%(refname):%(refname)' \
1044 pull.twohead|pull.octopus
)
1045 __gitcomp
"$(__git_merge_strategies)"
1048 color.branch|color.
diff|color.status
)
1049 __gitcomp
"always never auto"
1054 black red green yellow blue magenta cyan white
1055 bold dim ul blink reverse
1067 --global --system --file=
1068 --list --replace-all
1069 --get --get-all --get-regexp
1070 --add --unset --unset-all
1071 --remove-section --rename-section
1076 local pfx
="${cur%.*}."
1078 __gitcomp
"remote merge" "$pfx" "$cur"
1082 local pfx
="${cur%.*}."
1084 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1088 local pfx
="${cur%.*}."
1091 url fetch push skipDefaultUpdate
1092 receivepack uploadpack tagopt
1097 local pfx
="${cur%.*}."
1099 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1108 core.preferSymlinkRefs
1109 core.logAllRefUpdates
1110 core.loosecompression
1111 core.repositoryFormatVersion
1112 core.sharedRepository
1113 core.warnAmbiguousRefs
1115 core.packedGitWindowSize
1119 color.branch.current
1130 color.diff.whitespace
1135 color.status.changed
1136 color.status.untracked
1141 format.subjectprefix
1145 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1146 gitcvs.dbtablenameprefix
1149 gc.reflogexpireunreachable
1162 i18n.logOutputEncoding
1172 pack.deltaCacheLimit
1175 repack.useDeltaBaseOffset
1178 transfer.unpackLimit
1180 receive.denyNonFastForwards
1190 local subcommands
="add rm show prune update"
1191 local subcommand
="$(__git_find_subcommand "$subcommands")"
1192 if [ -z "$subcommand" ]; then
1193 __gitcomp
"$subcommands"
1197 case "$subcommand" in
1199 __gitcomp
"$(__git_remotes)"
1202 local i c
='' IFS
=$
'\n'
1203 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1221 __git_has_doubledash
&& return
1223 local cur
="${COMP_WORDS[COMP_CWORD]}"
1226 __gitcomp
"--mixed --hard --soft"
1230 __gitcomp
"$(__git_refs)"
1235 __git_has_doubledash
&& return
1237 local cur
="${COMP_WORDS[COMP_CWORD]}"
1240 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1249 __git_has_doubledash
&& return
1251 local cur
="${COMP_WORDS[COMP_CWORD]}"
1255 --max-count= --max-age= --since= --after=
1256 --min-age= --before= --until=
1258 --author= --committer= --grep=
1261 --numbered --summary
1266 __git_complete_revlist
1271 local cur
="${COMP_WORDS[COMP_CWORD]}"
1275 oneline short medium full fuller email raw
1276 " "" "${cur##--pretty=}"
1280 __gitcomp
"--pretty="
1289 local cur
="${COMP_WORDS[COMP_CWORD]}"
1293 --all --remotes --topo-order --current --more=
1294 --list --independent --merge-base --no-name
1295 --sha1-name --topics --reflog
1300 __git_complete_revlist
1305 local subcommands
='save list show apply clear drop pop create'
1306 local subcommand
="$(__git_find_subcommand "$subcommands")"
1307 if [ -z "$subcommand" ]; then
1308 __gitcomp
"$subcommands"
1310 local cur
="${COMP_WORDS[COMP_CWORD]}"
1311 case "$subcommand,$cur" in
1313 __gitcomp
"--keep-index"
1324 __git_has_doubledash
&& return
1326 local subcommands
="add status init update"
1327 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1328 local cur
="${COMP_WORDS[COMP_CWORD]}"
1331 __gitcomp
"--quiet --cached"
1334 __gitcomp
"$subcommands"
1344 init fetch clone rebase dcommit log find-rev
1345 set-tree commit-diff info create-ignore propget
1346 proplist show-ignore show-externals
1348 local subcommand
="$(__git_find_subcommand "$subcommands")"
1349 if [ -z "$subcommand" ]; then
1350 __gitcomp
"$subcommands"
1352 local remote_opts
="--username= --config-dir= --no-auth-cache"
1354 --follow-parent --authors-file= --repack=
1355 --no-metadata --use-svm-props --use-svnsync-props
1356 --log-window-size= --no-checkout --quiet
1357 --repack-flags --user-log-author $remote_opts
1360 --template= --shared= --trunk= --tags=
1361 --branches= --stdlayout --minimize-url
1362 --no-metadata --use-svm-props --use-svnsync-props
1363 --rewrite-root= $remote_opts
1366 --edit --rmdir --find-copies-harder --copy-similarity=
1369 local cur
="${COMP_WORDS[COMP_CWORD]}"
1370 case "$subcommand,$cur" in
1372 __gitcomp
"--revision= --fetch-all $fc_opts"
1375 __gitcomp
"--revision= $fc_opts $init_opts"
1378 __gitcomp
"$init_opts"
1382 --merge --strategy= --verbose --dry-run
1383 --fetch-all --no-rebase $cmt_opts $fc_opts
1387 __gitcomp
"--stdin $cmt_opts $fc_opts"
1389 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1391 __gitcomp
"--revision="
1395 --limit= --revision= --verbose --incremental
1396 --oneline --show-commit --non-recursive
1402 --merge --verbose --strategy= --local
1403 --fetch-all $fc_opts
1407 __gitcomp
"--message= --file= --revision= $cmt_opts"
1422 while [ $c -lt $COMP_CWORD ]; do
1423 i
="${COMP_WORDS[c]}"
1426 __gitcomp
"$(__git_tags)"
1436 case "${COMP_WORDS[COMP_CWORD-1]}" in
1442 __gitcomp
"$(__git_tags)"
1448 __gitcomp
"$(__git_refs)"
1455 local i c
=1 command __git_dir
1457 while [ $c -lt $COMP_CWORD ]; do
1458 i
="${COMP_WORDS[c]}"
1460 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1461 --bare) __git_dir
="." ;;
1462 --version|
-p|
--paginate) ;;
1463 --help) command="help"; break ;;
1464 *) command="$i"; break ;;
1469 if [ -z "$command" ]; then
1470 case "${COMP_WORDS[COMP_CWORD]}" in
1471 --*=*) COMPREPLY
=() ;;
1483 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1488 local expansion
=$
(__git_aliased_command
"$command")
1489 [ "$expansion" ] && command="$expansion"
1494 apply
) _git_apply
;;
1495 bisect
) _git_bisect
;;
1496 bundle
) _git_bundle
;;
1497 branch
) _git_branch
;;
1498 checkout
) _git_checkout
;;
1499 cherry
) _git_cherry
;;
1500 cherry-pick
) _git_cherry_pick
;;
1501 commit
) _git_commit
;;
1502 config
) _git_config
;;
1503 describe
) _git_describe
;;
1505 fetch
) _git_fetch
;;
1506 format-patch
) _git_format_patch
;;
1511 ls-remote
) _git_ls_remote
;;
1512 ls-tree
) _git_ls_tree
;;
1514 merge-base
) _git_merge_base
;;
1515 name-rev
) _git_name_rev
;;
1518 rebase
) _git_rebase
;;
1519 remote
) _git_remote
;;
1520 reset) _git_reset
;;
1522 send-email
) _git_send_email
;;
1523 shortlog
) _git_shortlog
;;
1525 show-branch
) _git_show_branch
;;
1526 stash
) _git_stash
;;
1527 submodule
) _git_submodule
;;
1530 whatchanged
) _git_log
;;
1537 __git_has_doubledash
&& return
1539 local cur
="${COMP_WORDS[COMP_CWORD]}"
1540 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1542 if [ -f $g/MERGE_HEAD
]; then
1547 __gitcomp
"--not --all $merge"
1551 __git_complete_revlist
1554 complete
-o default
-o nospace
-F _git git
1555 complete
-o default
-o nospace
-F _gitk gitk
1557 # The following are necessary only for Cygwin, and only are needed
1558 # when the user has tab-completed the executable name and consequently
1559 # included the '.exe' suffix.
1561 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1562 complete
-o default
-o nospace
-F _git git.exe