<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -24,6 +24,7 @@ alias gbr='git branch -r -v'
 alias gba='git branch -a -v'
 alias gs='git status'
 alias gd='git diff'
+alias gdc='git diff --cached'
 alias gl='git log --pretty=oneline'
 alias gls='git log --stat'
 alias gsr='git svn rebase'</diff>
      <filename>bashrc</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,12 @@
 --- 
 :verbose: true
-:update_sources: true
+:bulk_threshold: 1000
 :sources: 
 - http://gems.rubyforge.org
 - http://gems.github.com
-:backtrace: false
-:bulk_threshold: 1000
-:benchmark: false
+- http://gemcutter.org
 gem: --no-ri --no-rdoc
+:benchmark: false
+gemcutter_key: e2fe2c35798861c1d0a300155c6a2f54
+:update_sources: true
+:backtrace: false</diff>
      <filename>gemrc</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+#!bash
 #
 # bash completion support for core Git.
 #
@@ -33,6 +34,12 @@
 #       are currently in a git repository.  The %s token will be
 #       the name of the current branch.
 #
+#       In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty
+#       value, unstaged (*) and staged (+) changes will be shown next
+#       to the branch name.  You can configure this per-repository
+#       with the bash.showDirtyState variable, which defaults to true
+#       once GIT_PS1_SHOWDIRTYSTATE is enabled.
+#
 # To submit patches:
 #
 #    *) Read Documentation/SubmittingPatches
@@ -45,10 +52,17 @@
 #       git@vger.kernel.org
 #
 
+case &quot;$COMP_WORDBREAKS&quot; in
+*:*) : great ;;
+*)   COMP_WORDBREAKS=&quot;$COMP_WORDBREAKS:&quot;
+esac
+
+# __gitdir accepts 0 or 1 arguments (i.e., location)
+# returns location of .git repo
 __gitdir ()
 {
-	if [ -z &quot;$1&quot; ]; then
-		if [ -n &quot;$__git_dir&quot; ]; then
+	if [ -z &quot;${1-}&quot; ]; then
+		if [ -n &quot;${__git_dir-}&quot; ]; then
 			echo &quot;$__git_dir&quot;
 		elif [ -d .git ]; then
 			echo .git
@@ -62,61 +76,97 @@ __gitdir ()
 	fi
 }
 
+# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
+# returns text to add to bash PS1 prompt (includes branch name)
 __git_ps1 ()
 {
-	local g=&quot;$(git rev-parse --git-dir 2&gt;/dev/null)&quot;
+	local g=&quot;$(__gitdir)&quot;
 	if [ -n &quot;$g&quot; ]; then
 		local r
 		local b
-		if [ -d &quot;$g/../.dotest&quot; ]
-		then
-			if test -f &quot;$g/../.dotest/rebasing&quot;
-			then
+		if [ -d &quot;$g/rebase-apply&quot; ]; then
+			if [ -f &quot;$g/rebase-apply/rebasing&quot; ]; then
 				r=&quot;|REBASE&quot;
-			elif test -f &quot;$g/../.dotest/applying&quot;
-			then
+		elif [ -f &quot;$g/rebase-apply/applying&quot; ]; then
 				r=&quot;|AM&quot;
 			else
 				r=&quot;|AM/REBASE&quot;
 			fi
 			b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;
-		elif [ -f &quot;$g/.dotest-merge/interactive&quot; ]
-		then
+		elif [ -f &quot;$g/rebase-merge/interactive&quot; ]; then
 			r=&quot;|REBASE-i&quot;
-			b=&quot;$(cat &quot;$g/.dotest-merge/head-name&quot;)&quot;
-		elif [ -d &quot;$g/.dotest-merge&quot; ]
-		then
+			b=&quot;$(cat &quot;$g/rebase-merge/head-name&quot;)&quot;
+		elif [ -d &quot;$g/rebase-merge&quot; ]; then
 			r=&quot;|REBASE-m&quot;
-			b=&quot;$(cat &quot;$g/.dotest-merge/head-name&quot;)&quot;
-		elif [ -f &quot;$g/MERGE_HEAD&quot; ]
-		then
+			b=&quot;$(cat &quot;$g/rebase-merge/head-name&quot;)&quot;
+		elif [ -f &quot;$g/MERGE_HEAD&quot; ]; then
 			r=&quot;|MERGING&quot;
 			b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;
 		else
-			if [ -f &quot;$g/BISECT_LOG&quot; ]
-			then
+			if [ -f &quot;$g/BISECT_LOG&quot; ]; then
 				r=&quot;|BISECTING&quot;
 			fi
-			if ! b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;
-			then
-				if ! b=&quot;$(git describe --exact-match HEAD 2&gt;/dev/null)&quot;
-				then
-					b=&quot;$(cut -c1-7 &quot;$g/HEAD&quot;)...&quot;
+			if ! b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;; then
+				if ! b=&quot;$(git describe --exact-match HEAD 2&gt;/dev/null)&quot;; then
+					if [ -r &quot;$g/HEAD&quot; ]; then
+						b=&quot;$(cut -c1-7 &quot;$g/HEAD&quot;)...&quot;
+					fi
 				fi
 			fi
 		fi
 
-		if [ -n &quot;$1&quot; ]; then
-			printf &quot;$1&quot; &quot;${b##refs/heads/}$r&quot;
-		else
-			printf &quot; (%s)&quot; &quot;${b##refs/heads/}$r&quot;
+		local w
+		local i
+		local c
+
+		if [ &quot;true&quot; = &quot;$(git rev-parse --is-inside-git-dir 2&gt;/dev/null)&quot; ]; then
+			if [ &quot;true&quot; = &quot;$(git config --bool core.bare 2&gt;/dev/null)&quot; ]; then
+				c=&quot;BARE:&quot;
+			else
+				b=&quot;GIT_DIR!&quot;
+			fi
+		elif [ &quot;true&quot; = &quot;$(git rev-parse --is-inside-work-tree 2&gt;/dev/null)&quot; ]; then
+			if [ -n &quot;${GIT_PS1_SHOWDIRTYSTATE-}&quot; ]; then
+				if [ &quot;$(git config --bool bash.showDirtyState)&quot; != &quot;false&quot; ]; then
+					git diff --no-ext-diff --ignore-submodules \
+						--quiet --exit-code || w=&quot;*&quot;
+					if git rev-parse --quiet --verify HEAD &gt;/dev/null; then
+						git diff-index --cached --quiet \
+							--ignore-submodules HEAD -- || i=&quot;+&quot;
+					else
+						i=&quot;#&quot;
+					fi
+				fi
+			fi
+		fi
+
+		if [ -n &quot;$b&quot; ]; then
+			if [ -n &quot;${1-}&quot; ]; then
+				printf &quot;$1&quot; &quot;$c${b##refs/heads/}$w$i$r&quot;
+			else
+				printf &quot; (%s)&quot; &quot;$c${b##refs/heads/}$w$i$r&quot;
+			fi
 		fi
 	fi
 }
 
+# __gitcomp_1 requires 2 arguments
+__gitcomp_1 ()
+{
+	local c IFS=' '$'\t'$'\n'
+	for c in $1; do
+		case &quot;$c$2&quot; in
+		--*=*) printf %s$'\n' &quot;$c$2&quot; ;;
+		*.)    printf %s$'\n' &quot;$c$2&quot; ;;
+		*)     printf %s$'\n' &quot;$c$2 &quot; ;;
+		esac
+	done
+}
+
+# __gitcomp accepts 1, 2, 3, or 4 arguments
+# generates completion reply with compgen
 __gitcomp ()
 {
-	local all c s=$'\n' IFS=' '$'\t'$'\n'
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	if [ $# -gt 2 ]; then
 		cur=&quot;$3&quot;
@@ -124,35 +174,26 @@ __gitcomp ()
 	case &quot;$cur&quot; in
 	--*=)
 		COMPREPLY=()
-		return
 		;;
 	*)
-		for c in $1; do
-			case &quot;$c$4&quot; in
-			--*=*) all=&quot;$all$c$4$s&quot; ;;
-			*.)    all=&quot;$all$c$4$s&quot; ;;
-			*)     all=&quot;$all$c$4 $s&quot; ;;
-			esac
-		done
+		local IFS=$'\n'
+		COMPREPLY=($(compgen -P &quot;${2-}&quot; \
+			-W &quot;$(__gitcomp_1 &quot;${1-}&quot; &quot;${4-}&quot;)&quot; \
+			-- &quot;$cur&quot;))
 		;;
 	esac
-	IFS=$s
-	COMPREPLY=($(compgen -P &quot;$2&quot; -W &quot;$all&quot; -- &quot;$cur&quot;))
-	return
 }
 
+# __git_heads accepts 0 or 1 arguments (to pass to __gitdir)
 __git_heads ()
 {
-	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
+	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;${1-}&quot;)&quot;
 	if [ -d &quot;$dir&quot; ]; then
-		for i in $(git --git-dir=&quot;$dir&quot; \
-			for-each-ref --format='%(refname)' \
-			refs/heads ); do
-			echo &quot;${i#refs/heads/}&quot;
-		done
+		git --git-dir=&quot;$dir&quot; for-each-ref --format='%(refname:short)' \
+			refs/heads
 		return
 	fi
-	for i in $(git ls-remote &quot;$1&quot; 2&gt;/dev/null); do
+	for i in $(git ls-remote &quot;${1-}&quot; 2&gt;/dev/null); do
 		case &quot;$is_hash,$i&quot; in
 		y,*) is_hash=n ;;
 		n,*^{}) is_hash=y ;;
@@ -162,18 +203,16 @@ __git_heads ()
 	done
 }
 
+# __git_tags accepts 0 or 1 arguments (to pass to __gitdir)
 __git_tags ()
 {
-	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
+	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;${1-}&quot;)&quot;
 	if [ -d &quot;$dir&quot; ]; then
-		for i in $(git --git-dir=&quot;$dir&quot; \
-			for-each-ref --format='%(refname)' \
-			refs/tags ); do
-			echo &quot;${i#refs/tags/}&quot;
-		done
+		git --git-dir=&quot;$dir&quot; for-each-ref --format='%(refname:short)' \
+			refs/tags
 		return
 	fi
-	for i in $(git ls-remote &quot;$1&quot; 2&gt;/dev/null); do
+	for i in $(git ls-remote &quot;${1-}&quot; 2&gt;/dev/null); do
 		case &quot;$is_hash,$i&quot; in
 		y,*) is_hash=n ;;
 		n,*^{}) is_hash=y ;;
@@ -183,21 +222,25 @@ __git_tags ()
 	done
 }
 
+# __git_refs accepts 0 or 1 arguments (to pass to __gitdir)
 __git_refs ()
 {
-	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
+	local i is_hash=y dir=&quot;$(__gitdir &quot;${1-}&quot;)&quot;
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot; format refs
 	if [ -d &quot;$dir&quot; ]; then
-		if [ -e &quot;$dir/HEAD&quot; ]; then echo HEAD; fi
-		for i in $(git --git-dir=&quot;$dir&quot; \
-			for-each-ref --format='%(refname)' \
-			refs/tags refs/heads refs/remotes); do
-			case &quot;$i&quot; in
-				refs/tags/*)    echo &quot;${i#refs/tags/}&quot; ;;
-				refs/heads/*)   echo &quot;${i#refs/heads/}&quot; ;;
-				refs/remotes/*) echo &quot;${i#refs/remotes/}&quot; ;;
-				*)              echo &quot;$i&quot; ;;
-			esac
-		done
+		case &quot;$cur&quot; in
+		refs|refs/*)
+			format=&quot;refname&quot;
+			refs=&quot;${cur%/*}&quot;
+			;;
+		*)
+			if [ -e &quot;$dir/HEAD&quot; ]; then echo HEAD; fi
+			format=&quot;refname:short&quot;
+			refs=&quot;refs/tags refs/heads refs/remotes&quot;
+			;;
+		esac
+		git --git-dir=&quot;$dir&quot; for-each-ref --format=&quot;%($format)&quot; \
+			$refs
 		return
 	fi
 	for i in $(git ls-remote &quot;$dir&quot; 2&gt;/dev/null); do
@@ -212,6 +255,7 @@ __git_refs ()
 	done
 }
 
+# __git_refs2 requires 1 argument (to pass to __git_refs)
 __git_refs2 ()
 {
 	local i
@@ -220,6 +264,7 @@ __git_refs2 ()
 	done
 }
 
+# __git_refs_remotes requires 1 argument (to pass to ls-remote)
 __git_refs_remotes ()
 {
 	local cmd i is_hash=y
@@ -258,19 +303,21 @@ __git_remotes ()
 
 __git_merge_strategies ()
 {
-	if [ -n &quot;$__git_merge_strategylist&quot; ]; then
+	if [ -n &quot;${__git_merge_strategylist-}&quot; ]; then
 		echo &quot;$__git_merge_strategylist&quot;
 		return
 	fi
-	sed -n &quot;/^all_strategies='/{
-		s/^all_strategies='//
-		s/'//
+	git merge -s help 2&gt;&amp;1 |
+	sed -n -e '/[Aa]vailable strategies are: /,/^$/{
+		s/\.$//
+		s/.*://
+		s/^[ 	]*//
+		s/[ 	]*$//
 		p
-		q
-		}&quot; &quot;$(git --exec-path)/git-merge&quot;
+	}'
 }
 __git_merge_strategylist=
-__git_merge_strategylist=&quot;$(__git_merge_strategies 2&gt;/dev/null)&quot;
+__git_merge_strategylist=$(__git_merge_strategies 2&gt;/dev/null)
 
 __git_complete_file ()
 {
@@ -290,9 +337,23 @@ __git_complete_file ()
 			ls=&quot;$ref&quot;
 			;;
 	    esac
+
+		case &quot;$COMP_WORDBREAKS&quot; in
+		*:*) : great ;;
+		*)   pfx=&quot;$ref:$pfx&quot; ;;
+		esac
+
+		local IFS=$'\n'
 		COMPREPLY=($(compgen -P &quot;$pfx&quot; \
 			-W &quot;$(git --git-dir=&quot;$(__gitdir)&quot; ls-tree &quot;$ls&quot; \
-				| sed '/^100... blob /s,^.*	,,
+				| sed '/^100... blob /{
+				           s,^.*	,,
+				           s,$, ,
+				       }
+				       /^120000 blob /{
+				           s,^.*	,,
+				           s,$, ,
+				       }
 				       /^040000 tree /{
 				           s,^.*	,,
 				           s,$,/,
@@ -320,19 +381,95 @@ __git_complete_revlist ()
 		cur=&quot;${cur#*..}&quot;
 		__gitcomp &quot;$(__git_refs)&quot; &quot;$pfx&quot; &quot;$cur&quot;
 		;;
-	*.)
-		__gitcomp &quot;$cur.&quot;
-		;;
 	*)
 		__gitcomp &quot;$(__git_refs)&quot;
 		;;
 	esac
 }
 
-__git_commands ()
+__git_complete_remote_or_refspec ()
 {
-	if [ -n &quot;$__git_commandlist&quot; ]; then
-		echo &quot;$__git_commandlist&quot;
+	local cmd=&quot;${COMP_WORDS[1]}&quot;
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	local i c=2 remote=&quot;&quot; pfx=&quot;&quot; lhs=1 no_complete_refspec=0
+	while [ $c -lt $COMP_CWORD ]; do
+		i=&quot;${COMP_WORDS[c]}&quot;
+		case &quot;$i&quot; in
+		--all|--mirror) [ &quot;$cmd&quot; = &quot;push&quot; ] &amp;&amp; no_complete_refspec=1 ;;
+		-*) ;;
+		*) remote=&quot;$i&quot;; break ;;
+		esac
+		c=$((++c))
+	done
+	if [ -z &quot;$remote&quot; ]; then
+		__gitcomp &quot;$(__git_remotes)&quot;
+		return
+	fi
+	if [ $no_complete_refspec = 1 ]; then
+		COMPREPLY=()
+		return
+	fi
+	[ &quot;$remote&quot; = &quot;.&quot; ] &amp;&amp; remote=
+	case &quot;$cur&quot; in
+	*:*)
+		case &quot;$COMP_WORDBREAKS&quot; in
+		*:*) : great ;;
+		*)   pfx=&quot;${cur%%:*}:&quot; ;;
+		esac
+		cur=&quot;${cur#*:}&quot;
+		lhs=0
+		;;
+	+*)
+		pfx=&quot;+&quot;
+		cur=&quot;${cur#+}&quot;
+		;;
+	esac
+	case &quot;$cmd&quot; in
+	fetch)
+		if [ $lhs = 1 ]; then
+			__gitcomp &quot;$(__git_refs2 &quot;$remote&quot;)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		else
+			__gitcomp &quot;$(__git_refs)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		fi
+		;;
+	pull)
+		if [ $lhs = 1 ]; then
+			__gitcomp &quot;$(__git_refs &quot;$remote&quot;)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		else
+			__gitcomp &quot;$(__git_refs)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		fi
+		;;
+	push)
+		if [ $lhs = 1 ]; then
+			__gitcomp &quot;$(__git_refs)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		else
+			__gitcomp &quot;$(__git_refs &quot;$remote&quot;)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		fi
+		;;
+	esac
+}
+
+__git_complete_strategy ()
+{
+	case &quot;${COMP_WORDS[COMP_CWORD-1]}&quot; in
+	-s|--strategy)
+		__gitcomp &quot;$(__git_merge_strategies)&quot;
+		return 0
+	esac
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--strategy=*)
+		__gitcomp &quot;$(__git_merge_strategies)&quot; &quot;&quot; &quot;${cur##--strategy=}&quot;
+		return 0
+		;;
+	esac
+	return 1
+}
+
+__git_all_commands ()
+{
+	if [ -n &quot;${__git_all_commandlist-}&quot; ]; then
+		echo &quot;$__git_all_commandlist&quot;
 		return
 	fi
 	local i IFS=&quot; &quot;$'\n'
@@ -340,13 +477,33 @@ __git_commands ()
 	do
 		case $i in
 		*--*)             : helper pattern;;
+		*) echo $i;;
+		esac
+	done
+}
+__git_all_commandlist=
+__git_all_commandlist=&quot;$(__git_all_commands 2&gt;/dev/null)&quot;
+
+__git_porcelain_commands ()
+{
+	if [ -n &quot;${__git_porcelain_commandlist-}&quot; ]; then
+		echo &quot;$__git_porcelain_commandlist&quot;
+		return
+	fi
+	local i IFS=&quot; &quot;$'\n'
+	for i in &quot;help&quot; $(__git_all_commands)
+	do
+		case $i in
+		*--*)             : helper pattern;;
 		applymbox)        : ask gittus;;
 		applypatch)       : ask gittus;;
 		archimport)       : import;;
 		cat-file)         : plumbing;;
 		check-attr)       : plumbing;;
 		check-ref-format) : plumbing;;
+		checkout-index)   : plumbing;;
 		commit-tree)      : plumbing;;
+		count-objects)    : infrequent;;
 		cvsexportcommit)  : export;;
 		cvsimport)        : import;;
 		cvsserver)        : daemon;;
@@ -355,6 +512,7 @@ __git_commands ()
 		diff-index)       : plumbing;;
 		diff-tree)        : plumbing;;
 		fast-import)      : import;;
+		fast-export)      : export;;
 		fsck-objects)     : plumbing;;
 		fetch-pack)       : plumbing;;
 		fmt-merge-msg)    : plumbing;;
@@ -364,6 +522,10 @@ __git_commands ()
 		index-pack)       : plumbing;;
 		init-db)          : deprecated;;
 		local-fetch)      : plumbing;;
+		lost-found)       : infrequent;;
+		ls-files)         : plumbing;;
+		ls-remote)        : plumbing;;
+		ls-tree)          : plumbing;;
 		mailinfo)         : plumbing;;
 		mailsplit)        : plumbing;;
 		merge-*)          : plumbing;;
@@ -388,6 +550,7 @@ __git_commands ()
 		runstatus)        : plumbing;;
 		sh-setup)         : internal;;
 		shell)            : daemon;;
+		show-ref)         : plumbing;;
 		send-pack)        : plumbing;;
 		show-index)       : plumbing;;
 		ssh-*)            : transport;;
@@ -402,13 +565,15 @@ __git_commands ()
 		upload-archive)   : plumbing;;
 		upload-pack)      : plumbing;;
 		write-tree)       : plumbing;;
+		var)              : infrequent;;
+		verify-pack)      : infrequent;;
 		verify-tag)       : plumbing;;
 		*) echo $i;;
 		esac
 	done
 }
-__git_commandlist=
-__git_commandlist=&quot;$(__git_commands 2&gt;/dev/null)&quot;
+__git_porcelain_commandlist=
+__git_porcelain_commandlist=&quot;$(__git_porcelain_commands 2&gt;/dev/null)&quot;
 
 __git_aliases ()
 {
@@ -423,6 +588,7 @@ __git_aliases ()
 	done
 }
 
+# __git_aliased_command requires 1 argument
 __git_aliased_command ()
 {
 	local word cmdline=$(git --git-dir=&quot;$(__gitdir)&quot; \
@@ -435,6 +601,7 @@ __git_aliased_command ()
 	done
 }
 
+# __git_find_subcommand requires 1 argument
 __git_find_subcommand ()
 {
 	local word subcommand c=1
@@ -451,13 +618,25 @@ __git_find_subcommand ()
 	done
 }
 
-__git_whitespacelist=&quot;nowarn warn error error-all strip&quot;
+__git_has_doubledash ()
+{
+	local c=1
+	while [ $c -lt $COMP_CWORD ]; do
+		if [ &quot;--&quot; = &quot;${COMP_WORDS[c]}&quot; ]; then
+			return 0
+		fi
+		c=$((++c))
+	done
+	return 1
+}
+
+__git_whitespacelist=&quot;nowarn warn error error-all fix&quot;
 
 _git_am ()
 {
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	if [ -d .dotest ]; then
-		__gitcomp &quot;--skip --resolved&quot;
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot; dir=&quot;$(__gitdir)&quot;
+	if [ -d &quot;$dir&quot;/rebase-apply ]; then
+		__gitcomp &quot;--skip --resolved --abort&quot;
 		return
 	fi
 	case &quot;$cur&quot; in
@@ -467,7 +646,8 @@ _git_am ()
 		;;
 	--*)
 		__gitcomp &quot;
-			--signoff --utf8 --binary --3way --interactive
+			--3way --committer-date-is-author-date --ignore-date
+			--interactive --keep --no-utf8 --signoff --utf8
 			--whitespace=
 			&quot;
 		return
@@ -497,21 +677,48 @@ _git_apply ()
 
 _git_add ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
 		__gitcomp &quot;
 			--interactive --refresh --patch --update --dry-run
-			--ignore-errors
+			--ignore-errors --intent-to-add
 			&quot;
 		return
 	esac
 	COMPREPLY=()
 }
 
+_git_archive ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--format=*)
+		__gitcomp &quot;$(git archive --list)&quot; &quot;&quot; &quot;${cur##--format=}&quot;
+		return
+		;;
+	--remote=*)
+		__gitcomp &quot;$(__git_remotes)&quot; &quot;&quot; &quot;${cur##--remote=}&quot;
+		return
+		;;
+	--*)
+		__gitcomp &quot;
+			--format= --list --verbose
+			--prefix= --remote= --exec=
+			&quot;
+		return
+		;;
+	esac
+	__git_complete_file
+}
+
 _git_bisect ()
 {
-	local subcommands=&quot;start bad good reset visualize replay log&quot;
+	__git_has_doubledash &amp;&amp; return
+
+	local subcommands=&quot;start bad good skip reset visualize replay log run&quot;
 	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
 	if [ -z &quot;$subcommand&quot; ]; then
 		__gitcomp &quot;$subcommands&quot;
@@ -519,7 +726,7 @@ _git_bisect ()
 	fi
 
 	case &quot;$subcommand&quot; in
-	bad|good|reset)
+	bad|good|reset|skip)
 		__gitcomp &quot;$(__git_refs)&quot;
 		;;
 	*)
@@ -542,11 +749,10 @@ _git_branch ()
 	done
 
 	case &quot;${COMP_WORDS[COMP_CWORD]}&quot; in
-	--*=*)	COMPREPLY=() ;;
 	--*)
 		__gitcomp &quot;
 			--color --no-color --verbose --abbrev= --no-abbrev
-			--track --no-track
+			--track --no-track --contains --merged --no-merged
 			&quot;
 		;;
 	*)
@@ -561,21 +767,12 @@ _git_branch ()
 
 _git_bundle ()
 {
-	local mycword=&quot;$COMP_CWORD&quot;
-	case &quot;${COMP_WORDS[0]}&quot; in
-	git)
-		local cmd=&quot;${COMP_WORDS[2]}&quot;
-		mycword=&quot;$((mycword-1))&quot;
-		;;
-	git-bundle*)
-		local cmd=&quot;${COMP_WORDS[1]}&quot;
-		;;
-	esac
-	case &quot;$mycword&quot; in
-	1)
+	local cmd=&quot;${COMP_WORDS[2]}&quot;
+	case &quot;$COMP_CWORD&quot; in
+	2)
 		__gitcomp &quot;create list-heads verify unbundle&quot;
 		;;
-	2)
+	3)
 		# looking for a file
 		;;
 	*)
@@ -590,6 +787,8 @@ _git_bundle ()
 
 _git_checkout ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
@@ -611,40 +810,99 @@ _git_cherry_pick ()
 	esac
 }
 
-_git_commit ()
+_git_clean ()
+{
+	__git_has_doubledash &amp;&amp; return
+
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--dry-run --quiet&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_clone ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
 		__gitcomp &quot;
-			--all --author= --signoff --verify --no-verify
-			--edit --amend --include --only
+			--local
+			--no-hardlinks
+			--shared
+			--reference
+			--quiet
+			--no-checkout
+			--bare
+			--mirror
+			--origin
+			--upload-pack
+			--template=
+			--depth
 			&quot;
 		return
+		;;
 	esac
 	COMPREPLY=()
 }
 
-_git_describe ()
+_git_commit ()
 {
-	__gitcomp &quot;$(__git_refs)&quot;
+	__git_has_doubledash &amp;&amp; return
+
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;
+			--all --author= --signoff --verify --no-verify
+			--edit --amend --include --only --interactive
+			&quot;
+		return
+	esac
+	COMPREPLY=()
 }
 
-_git_diff ()
+_git_describe ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
-		__gitcomp &quot;--cached --stat --numstat --shortstat --summary
+		__gitcomp &quot;
+			--all --tags --contains --abbrev= --candidates=
+			--exact-match --debug --long --match --always
+			&quot;
+		return
+	esac
+	__gitcomp &quot;$(__git_refs)&quot;
+}
+
+__git_diff_common_options=&quot;--stat --numstat --shortstat --summary
 			--patch-with-stat --name-only --name-status --color
 			--no-color --color-words --no-renames --check
-			--full-index --binary --abbrev --diff-filter
-			--find-copies-harder --pickaxe-all --pickaxe-regex
+			--full-index --binary --abbrev --diff-filter=
+			--find-copies-harder
 			--text --ignore-space-at-eol --ignore-space-change
 			--ignore-all-space --exit-code --quiet --ext-diff
 			--no-ext-diff
 			--no-prefix --src-prefix= --dst-prefix=
+			--inter-hunk-context=
+			--patience
+			--raw
+&quot;
+
+_git_diff ()
+{
+	__git_has_doubledash &amp;&amp; return
+
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--cached --staged --pickaxe-all --pickaxe-regex
 			--base --ours --theirs
+			$__git_diff_common_options
 			&quot;
 		return
 		;;
@@ -652,57 +910,68 @@ _git_diff ()
 	__git_complete_file
 }
 
-_git_diff_tree ()
+__git_mergetools_common=&quot;diffuse ecmerge emerge kdiff3 meld opendiff
+			tkdiff vimdiff gvimdiff xxdiff
+&quot;
+
+_git_difftool ()
 {
-	__gitcomp &quot;$(__git_refs)&quot;
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--tool=*)
+		__gitcomp &quot;$__git_mergetools_common kompare&quot; &quot;&quot; &quot;${cur##--tool=}&quot;
+		return
+		;;
+	--*)
+		__gitcomp &quot;--tool=&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
 }
 
+__git_fetch_options=&quot;
+	--quiet --verbose --append --upload-pack --force --keep --depth=
+	--tags --no-tags
+&quot;
+
 _git_fetch ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-
-	case &quot;${COMP_WORDS[0]},$COMP_CWORD&quot; in
-	git-fetch*,1)
-		__gitcomp &quot;$(__git_remotes)&quot;
-		;;
-	git,2)
-		__gitcomp &quot;$(__git_remotes)&quot;
-		;;
-	*)
-		case &quot;$cur&quot; in
-		*:*)
-			__gitcomp &quot;$(__git_refs)&quot; &quot;&quot; &quot;${cur#*:}&quot;
-			;;
-		*)
-			local remote
-			case &quot;${COMP_WORDS[0]}&quot; in
-			git-fetch) remote=&quot;${COMP_WORDS[1]}&quot; ;;
-			git)       remote=&quot;${COMP_WORDS[2]}&quot; ;;
-			esac
-			__gitcomp &quot;$(__git_refs2 &quot;$remote&quot;)&quot;
-			;;
-		esac
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;$__git_fetch_options&quot;
+		return
 		;;
 	esac
+	__git_complete_remote_or_refspec
 }
 
 _git_format_patch ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
+	--thread=*)
+		__gitcomp &quot;
+			deep shallow
+			&quot; &quot;&quot; &quot;${cur##--thread=}&quot;
+		return
+		;;
 	--*)
 		__gitcomp &quot;
-			--stdout --attach --thread
+			--stdout --attach --no-attach --thread --thread=
 			--output-directory
 			--numbered --start-number
 			--numbered-files
 			--keep-subject
 			--signoff
-			--in-reply-to=
+			--in-reply-to= --cc=
 			--full-index --binary
 			--not --all
 			--cover-letter
 			--no-prefix --src-prefix= --dst-prefix=
+			--inline --suffix= --ignore-if-in-upstream
+			--subject-prefix=
 			&quot;
 		return
 		;;
@@ -710,6 +979,21 @@ _git_format_patch ()
 	__git_complete_revlist
 }
 
+_git_fsck ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;
+			--tags --root --unreachable --cache --no-reflogs --full
+			--strict --verbose --lost-found
+			&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
 _git_gc ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
@@ -722,6 +1006,84 @@ _git_gc ()
 	COMPREPLY=()
 }
 
+_git_grep ()
+{
+	__git_has_doubledash &amp;&amp; return
+
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;
+			--cached
+			--text --ignore-case --word-regexp --invert-match
+			--full-name
+			--extended-regexp --basic-regexp --fixed-strings
+			--files-with-matches --name-only
+			--files-without-match
+			--count
+			--and --or --not --all-match
+			&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_help ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--all --info --man --web&quot;
+		return
+		;;
+	esac
+	__gitcomp &quot;$(__git_all_commands)
+		attributes cli core-tutorial cvs-migration
+		diffcore gitk glossary hooks ignore modules
+		repository-layout tutorial tutorial-2
+		workflows
+		&quot;
+}
+
+_git_init ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--shared=*)
+		__gitcomp &quot;
+			false true umask group all world everybody
+			&quot; &quot;&quot; &quot;${cur##--shared=}&quot;
+		return
+		;;
+	--*)
+		__gitcomp &quot;--quiet --bare --template= --shared --shared=&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_ls_files ()
+{
+	__git_has_doubledash &amp;&amp; return
+
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--cached --deleted --modified --others --ignored
+			--stage --directory --no-empty-directory --unmerged
+			--killed --exclude= --exclude-from=
+			--exclude-per-directory= --exclude-standard
+			--error-unmatch --with-tree= --full-name
+			--abbrev --ignored --exclude-per-directory
+			&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
 _git_ls_remote ()
 {
 	__gitcomp &quot;$(__git_remotes)&quot;
@@ -732,35 +1094,73 @@ _git_ls_tree ()
 	__git_complete_file
 }
 
+# Options that go well for log, shortlog and gitk
+__git_log_common_options=&quot;
+	--not --all
+	--branches --tags --remotes
+	--first-parent --no-merges
+	--max-count=
+	--max-age= --since= --after=
+	--min-age= --until= --before=
+&quot;
+# Options that go well for log and gitk (not shortlog)
+__git_log_gitk_options=&quot;
+	--dense --sparse --full-history
+	--simplify-merges --simplify-by-decoration
+	--left-right
+&quot;
+# Options that go well for log and shortlog (not gitk)
+__git_log_shortlog_options=&quot;
+	--author= --committer= --grep=
+	--all-match
+&quot;
+
+__git_log_pretty_formats=&quot;oneline short medium full fuller email raw format:&quot;
+__git_log_date_formats=&quot;relative iso8601 rfc2822 short local default raw&quot;
+
 _git_log ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	local g=&quot;$(git rev-parse --git-dir 2&gt;/dev/null)&quot;
+	local merge=&quot;&quot;
+	if [ -f &quot;$g/MERGE_HEAD&quot; ]; then
+		merge=&quot;--merge&quot;
+	fi
 	case &quot;$cur&quot; in
 	--pretty=*)
-		__gitcomp &quot;
-			oneline short medium full fuller email raw
+		__gitcomp &quot;$__git_log_pretty_formats
 			&quot; &quot;&quot; &quot;${cur##--pretty=}&quot;
 		return
 		;;
+	--format=*)
+		__gitcomp &quot;$__git_log_pretty_formats
+			&quot; &quot;&quot; &quot;${cur##--format=}&quot;
+		return
+		;;
 	--date=*)
-		__gitcomp &quot;
-			relative iso8601 rfc2822 short local default
-		&quot; &quot;&quot; &quot;${cur##--date=}&quot;
+		__gitcomp &quot;$__git_log_date_formats&quot; &quot;&quot; &quot;${cur##--date=}&quot;
 		return
 		;;
 	--*)
 		__gitcomp &quot;
-			--max-count= --max-age= --since= --after=
-			--min-age= --before= --until=
+			$__git_log_common_options
+			$__git_log_shortlog_options
+			$__git_log_gitk_options
 			--root --topo-order --date-order --reverse
-			--no-merges --follow
+			--follow
 			--abbrev-commit --abbrev=
 			--relative-date --date=
-			--author= --committer= --grep=
-			--all-match
-			--pretty= --name-status --name-only --raw
-			--not --all
-			--left-right --cherry-pick
+			--pretty= --format= --oneline
+			--cherry-pick
+			--graph
+			--decorate
+			--walk-reflogs
+			--parents --children
+			$merge
+			$__git_diff_common_options
+			--pickaxe-all --pickaxe-regex
 			&quot;
 		return
 		;;
@@ -768,26 +1168,38 @@ _git_log ()
 	__git_complete_revlist
 }
 
+__git_merge_options=&quot;
+	--no-commit --no-stat --log --no-log --squash --strategy
+	--commit --stat --no-squash --ff --no-ff
+&quot;
+
 _git_merge ()
 {
+	__git_complete_strategy &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;${COMP_WORDS[COMP_CWORD-1]}&quot; in
-	-s|--strategy)
-		__gitcomp &quot;$(__git_merge_strategies)&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;$__git_merge_options&quot;
 		return
 	esac
+	__gitcomp &quot;$(__git_refs)&quot;
+}
+
+_git_mergetool ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
-	--strategy=*)
-		__gitcomp &quot;$(__git_merge_strategies)&quot; &quot;&quot; &quot;${cur##--strategy=}&quot;
+	--tool=*)
+		__gitcomp &quot;$__git_mergetools_common tortoisemerge&quot; &quot;&quot; &quot;${cur##--tool=}&quot;
 		return
 		;;
 	--*)
-		__gitcomp &quot;
-			--no-commit --no-stat --log --no-log --squash --strategy
-			&quot;
+		__gitcomp &quot;--tool=&quot;
 		return
+		;;
 	esac
-	__gitcomp &quot;$(__git_refs)&quot;
+	COMPREPLY=()
 }
 
 _git_merge_base ()
@@ -795,6 +1207,18 @@ _git_merge_base ()
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
+_git_mv ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--dry-run&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
 _git_name_rev ()
 {
 	__gitcomp &quot;--tags --all --stdin&quot;
@@ -802,80 +1226,100 @@ _git_name_rev ()
 
 _git_pull ()
 {
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	__git_complete_strategy &amp;&amp; return
 
-	case &quot;${COMP_WORDS[0]},$COMP_CWORD&quot; in
-	git-pull*,1)
-		__gitcomp &quot;$(__git_remotes)&quot;
-		;;
-	git,2)
-		__gitcomp &quot;$(__git_remotes)&quot;
-		;;
-	*)
-		local remote
-		case &quot;${COMP_WORDS[0]}&quot; in
-		git-pull)  remote=&quot;${COMP_WORDS[1]}&quot; ;;
-		git)       remote=&quot;${COMP_WORDS[2]}&quot; ;;
-		esac
-		__gitcomp &quot;$(__git_refs &quot;$remote&quot;)&quot;
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;
+			--rebase --no-rebase
+			$__git_merge_options
+			$__git_fetch_options
+		&quot;
+		return
 		;;
 	esac
+	__git_complete_remote_or_refspec
 }
 
 _git_push ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-
-	case &quot;${COMP_WORDS[0]},$COMP_CWORD&quot; in
-	git-push*,1)
-		__gitcomp &quot;$(__git_remotes)&quot;
-		;;
-	git,2)
+	case &quot;${COMP_WORDS[COMP_CWORD-1]}&quot; in
+	--repo)
 		__gitcomp &quot;$(__git_remotes)&quot;
+		return
+	esac
+	case &quot;$cur&quot; in
+	--repo=*)
+		__gitcomp &quot;$(__git_remotes)&quot; &quot;&quot; &quot;${cur##--repo=}&quot;
+		return
 		;;
-	*)
-		case &quot;$cur&quot; in
-		*:*)
-			local remote
-			case &quot;${COMP_WORDS[0]}&quot; in
-			git-push)  remote=&quot;${COMP_WORDS[1]}&quot; ;;
-			git)       remote=&quot;${COMP_WORDS[2]}&quot; ;;
-			esac
-			__gitcomp &quot;$(__git_refs &quot;$remote&quot;)&quot; &quot;&quot; &quot;${cur#*:}&quot;
-			;;
-		+*)
-			__gitcomp &quot;$(__git_refs)&quot; + &quot;${cur#+}&quot;
-			;;
-		*)
-			__gitcomp &quot;$(__git_refs)&quot;
-			;;
-		esac
+	--*)
+		__gitcomp &quot;
+			--all --mirror --tags --dry-run --force --verbose
+			--receive-pack= --repo=
+		&quot;
+		return
 		;;
 	esac
+	__git_complete_remote_or_refspec
 }
 
 _git_rebase ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot; dir=&quot;$(__gitdir)&quot;
-	if [ -d .dotest ] || [ -d &quot;$dir&quot;/.dotest-merge ]; then
+	if [ -d &quot;$dir&quot;/rebase-apply ] || [ -d &quot;$dir&quot;/rebase-merge ]; then
 		__gitcomp &quot;--continue --skip --abort&quot;
 		return
 	fi
-	case &quot;${COMP_WORDS[COMP_CWORD-1]}&quot; in
-	-s|--strategy)
-		__gitcomp &quot;$(__git_merge_strategies)&quot;
+	__git_complete_strategy &amp;&amp; return
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--onto --merge --strategy --interactive&quot;
 		return
 	esac
+	__gitcomp &quot;$(__git_refs)&quot;
+}
+
+__git_send_email_confirm_options=&quot;always never auto cc compose&quot;
+__git_send_email_suppresscc_options=&quot;author self cc ccbody sob cccmd body all&quot;
+
+_git_send_email ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
-	--strategy=*)
-		__gitcomp &quot;$(__git_merge_strategies)&quot; &quot;&quot; &quot;${cur##--strategy=}&quot;
+	--confirm=*)
+		__gitcomp &quot;
+			$__git_send_email_confirm_options
+			&quot; &quot;&quot; &quot;${cur##--confirm=}&quot;
+		return
+		;;
+	--suppress-cc=*)
+		__gitcomp &quot;
+			$__git_send_email_suppresscc_options
+			&quot; &quot;&quot; &quot;${cur##--suppress-cc=}&quot;
+
+		return
+		;;
+	--smtp-encryption=*)
+		__gitcomp &quot;ssl tls&quot; &quot;&quot; &quot;${cur##--smtp-encryption=}&quot;
 		return
 		;;
 	--*)
-		__gitcomp &quot;--onto --merge --strategy --interactive&quot;
+		__gitcomp &quot;--annotate --bcc --cc --cc-cmd --chain-reply-to
+			--compose --confirm= --dry-run --envelope-sender
+			--from --identity
+			--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
+			--no-suppress-from --no-thread --quiet
+			--signed-off-by-cc --smtp-pass --smtp-server
+			--smtp-server-port --smtp-encryption= --smtp-user
+			--subject --suppress-cc= --suppress-from --thread --to
+			--validate --no-validate&quot;
 		return
+		;;
 	esac
-	__gitcomp &quot;$(__git_refs)&quot;
+	COMPREPLY=()
 }
 
 _git_config ()
@@ -909,17 +1353,41 @@ _git_config ()
 		__gitcomp &quot;$(__git_merge_strategies)&quot;
 		return
 		;;
-	color.branch|color.diff|color.status)
+	color.branch|color.diff|color.interactive|color.status|color.ui)
 		__gitcomp &quot;always never auto&quot;
 		return
 		;;
+	color.pager)
+		__gitcomp &quot;false true&quot;
+		return
+		;;
 	color.*.*)
 		__gitcomp &quot;
-			black red green yellow blue magenta cyan white
+			normal black red green yellow blue magenta cyan white
 			bold dim ul blink reverse
 			&quot;
 		return
 		;;
+	help.format)
+		__gitcomp &quot;man info web html&quot;
+		return
+		;;
+	log.date)
+		__gitcomp &quot;$__git_log_date_formats&quot;
+		return
+		;;
+	sendemail.aliasesfiletype)
+		__gitcomp &quot;mutt mailrc pine elm gnus&quot;
+		return
+		;;
+	sendemail.confirm)
+		__gitcomp &quot;$__git_send_email_confirm_options&quot;
+		return
+		;;
+	sendemail.suppresscc)
+		__gitcomp &quot;$__git_send_email_suppresscc_options&quot;
+		return
+		;;
 	*.*)
 		COMPREPLY=()
 		return
@@ -939,7 +1407,7 @@ _git_config ()
 	branch.*.*)
 		local pfx=&quot;${cur%.*}.&quot;
 		cur=&quot;${cur##*.}&quot;
-		__gitcomp &quot;remote merge&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		__gitcomp &quot;remote merge mergeoptions&quot; &quot;$pfx&quot; &quot;$cur&quot;
 		return
 		;;
 	branch.*)
@@ -948,11 +1416,44 @@ _git_config ()
 		__gitcomp &quot;$(__git_heads)&quot; &quot;$pfx&quot; &quot;$cur&quot; &quot;.&quot;
 		return
 		;;
+	guitool.*.*)
+		local pfx=&quot;${cur%.*}.&quot;
+		cur=&quot;${cur##*.}&quot;
+		__gitcomp &quot;
+			argprompt cmd confirm needsfile noconsole norescan
+			prompt revprompt revunmerged title
+			&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		return
+		;;
+	difftool.*.*)
+		local pfx=&quot;${cur%.*}.&quot;
+		cur=&quot;${cur##*.}&quot;
+		__gitcomp &quot;cmd path&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		return
+		;;
+	man.*.*)
+		local pfx=&quot;${cur%.*}.&quot;
+		cur=&quot;${cur##*.}&quot;
+		__gitcomp &quot;cmd path&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		return
+		;;
+	mergetool.*.*)
+		local pfx=&quot;${cur%.*}.&quot;
+		cur=&quot;${cur##*.}&quot;
+		__gitcomp &quot;cmd path trustExitCode&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		return
+		;;
+	pager.*)
+		local pfx=&quot;${cur%.*}.&quot;
+		cur=&quot;${cur#*.}&quot;
+		__gitcomp &quot;$(__git_all_commands)&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		return
+		;;
 	remote.*.*)
 		local pfx=&quot;${cur%.*}.&quot;
 		cur=&quot;${cur##*.}&quot;
 		__gitcomp &quot;
-			url fetch push skipDefaultUpdate
+			url proxy fetch push mirror skipDefaultUpdate
 			receivepack uploadpack tagopt
 			&quot; &quot;$pfx&quot; &quot;$cur&quot;
 		return
@@ -963,97 +1464,231 @@ _git_config ()
 		__gitcomp &quot;$(__git_remotes)&quot; &quot;$pfx&quot; &quot;$cur&quot; &quot;.&quot;
 		return
 		;;
+	url.*.*)
+		local pfx=&quot;${cur%.*}.&quot;
+		cur=&quot;${cur##*.}&quot;
+		__gitcomp &quot;insteadof&quot; &quot;$pfx&quot; &quot;$cur&quot;
+		return
+		;;
 	esac
 	__gitcomp &quot;
+		alias.
 		apply.whitespace
-		core.fileMode
-		core.gitProxy
-		core.ignoreStat
-		core.preferSymlinkRefs
-		core.logAllRefUpdates
-		core.loosecompression
-		core.repositoryFormatVersion
-		core.sharedRepository
-		core.warnAmbiguousRefs
-		core.compression
-		core.packedGitWindowSize
-		core.packedGitLimit
+		branch.autosetupmerge
+		branch.autosetuprebase
 		clean.requireForce
 		color.branch
 		color.branch.current
 		color.branch.local
-		color.branch.remote
 		color.branch.plain
+		color.branch.remote
 		color.diff
-		color.diff.plain
-		color.diff.meta
+		color.diff.commit
 		color.diff.frag
-		color.diff.old
+		color.diff.meta
 		color.diff.new
-		color.diff.commit
+		color.diff.old
+		color.diff.plain
 		color.diff.whitespace
+		color.grep
+		color.grep.external
+		color.grep.match
+		color.interactive
+		color.interactive.header
+		color.interactive.help
+		color.interactive.prompt
 		color.pager
 		color.status
-		color.status.header
 		color.status.added
 		color.status.changed
+		color.status.header
+		color.status.nobranch
 		color.status.untracked
+		color.status.updated
+		color.ui
+		commit.template
+		core.autocrlf
+		core.bare
+		core.compression
+		core.createObject
+		core.deltaBaseCacheLimit
+		core.editor
+		core.excludesfile
+		core.fileMode
+		core.fsyncobjectfiles
+		core.gitProxy
+		core.ignoreCygwinFSTricks
+		core.ignoreStat
+		core.logAllRefUpdates
+		core.loosecompression
+		core.packedGitLimit
+		core.packedGitWindowSize
+		core.pager
+		core.preferSymlinkRefs
+		core.preloadindex
+		core.quotepath
+		core.repositoryFormatVersion
+		core.safecrlf
+		core.sharedRepository
+		core.symlinks
+		core.trustctime
+		core.warnAmbiguousRefs
+		core.whitespace
+		core.worktree
+		diff.autorefreshindex
+		diff.external
+		diff.mnemonicprefix
 		diff.renameLimit
+		diff.renameLimit.
 		diff.renames
+		diff.suppressBlankEmpty
+		diff.tool
+		diff.wordRegex
+		difftool.
+		difftool.prompt
 		fetch.unpackLimit
+		format.attach
+		format.cc
 		format.headers
+		format.numbered
+		format.pretty
+		format.signoff
 		format.subjectprefix
-		gitcvs.enabled
-		gitcvs.logfile
-		gitcvs.allbinary
-		gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
-		gitcvs.dbtablenameprefix
+		format.suffix
+		format.thread
+		gc.aggressiveWindow
+		gc.auto
+		gc.autopacklimit
 		gc.packrefs
+		gc.pruneexpire
 		gc.reflogexpire
 		gc.reflogexpireunreachable
 		gc.rerereresolved
 		gc.rerereunresolved
-		http.sslVerify
-		http.sslCert
-		http.sslKey
-		http.sslCAInfo
-		http.sslCAPath
-		http.maxRequests
+		gitcvs.allbinary
+		gitcvs.commitmsgannotation
+		gitcvs.dbTableNamePrefix
+		gitcvs.dbdriver
+		gitcvs.dbname
+		gitcvs.dbpass
+		gitcvs.dbuser
+		gitcvs.enabled
+		gitcvs.logfile
+		gitcvs.usecrlfattr
+		guitool.
+		gui.blamehistoryctx
+		gui.commitmsgwidth
+		gui.copyblamethreshold
+		gui.diffcontext
+		gui.encoding
+		gui.fastcopyblame
+		gui.matchtrackingbranch
+		gui.newbranchtemplate
+		gui.pruneduringfetch
+		gui.spellingdictionary
+		gui.trustmtime
+		help.autocorrect
+		help.browser
+		help.format
 		http.lowSpeedLimit
 		http.lowSpeedTime
+		http.maxRequests
 		http.noEPSV
+		http.proxy
+		http.sslCAInfo
+		http.sslCAPath
+		http.sslCert
+		http.sslKey
+		http.sslVerify
 		i18n.commitEncoding
 		i18n.logOutputEncoding
+		imap.folder
+		imap.host
+		imap.pass
+		imap.port
+		imap.preformattedHTML
+		imap.sslverify
+		imap.tunnel
+		imap.user
+		instaweb.browser
+		instaweb.httpd
+		instaweb.local
+		instaweb.modulepath
+		instaweb.port
+		interactive.singlekey
+		log.date
 		log.showroot
+		mailmap.file
+		man.
+		man.viewer
+		merge.conflictstyle
+		merge.log
+		merge.renameLimit
+		merge.stat
 		merge.tool
-		merge.summary
 		merge.verbosity
-		pack.window
-		pack.depth
-		pack.windowMemory
+		mergetool.
+		mergetool.keepBackup
+		mergetool.prompt
 		pack.compression
-		pack.deltaCacheSize
 		pack.deltaCacheLimit
+		pack.deltaCacheSize
+		pack.depth
+		pack.indexVersion
+		pack.packSizeLimit
+		pack.threads
+		pack.window
+		pack.windowMemory
+		pager.
 		pull.octopus
 		pull.twohead
-		repack.useDeltaBaseOffset
-		show.difftree
+		push.default
+		rebase.stat
+		receive.denyCurrentBranch
+		receive.denyDeletes
+		receive.denyNonFastForwards
+		receive.fsckObjects
+		receive.unpackLimit
+		repack.usedeltabaseoffset
+		rerere.autoupdate
+		rerere.enabled
+		sendemail.aliasesfile
+		sendemail.aliasesfiletype
+		sendemail.bcc
+		sendemail.cc
+		sendemail.cccmd
+		sendemail.chainreplyto
+		sendemail.confirm
+		sendemail.envelopesender
+		sendemail.multiedit
+		sendemail.signedoffbycc
+		sendemail.smtpencryption
+		sendemail.smtppass
+		sendemail.smtpserver
+		sendemail.smtpserverport
+		sendemail.smtpuser
+		sendemail.suppresscc
+		sendemail.suppressfrom
+		sendemail.thread
+		sendemail.to
+		sendemail.validate
 		showbranch.default
+		status.relativePaths
+		status.showUntrackedFiles
 		tar.umask
 		transfer.unpackLimit
-		receive.unpackLimit
-		receive.denyNonFastForwards
-		user.name
+		url.
 		user.email
+		user.name
 		user.signingkey
-		whatchanged.difftree
+		web.browser
 		branch. remote.
 	&quot;
 }
 
 _git_remote ()
 {
-	local subcommands=&quot;add rm show prune update&quot;
+	local subcommands=&quot;add rename rm show prune update set-head&quot;
 	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
 	if [ -z &quot;$subcommand&quot; ]; then
 		__gitcomp &quot;$subcommands&quot;
@@ -1061,7 +1696,7 @@ _git_remote ()
 	fi
 
 	case &quot;$subcommand&quot; in
-	rm|show|prune)
+	rename|rm|show|prune)
 		__gitcomp &quot;$(__git_remotes)&quot;
 		;;
 	update)
@@ -1084,28 +1719,54 @@ _git_remote ()
 
 _git_reset ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
-		__gitcomp &quot;--mixed --hard --soft&quot;
+		__gitcomp &quot;--merge --mixed --hard --soft&quot;
 		return
 		;;
 	esac
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
+_git_revert ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--edit --mainline --no-edit --no-commit --signoff&quot;
+		return
+		;;
+	esac
+	__gitcomp &quot;$(__git_refs)&quot;
+}
+
+_git_rm ()
+{
+	__git_has_doubledash &amp;&amp; return
+
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;--cached --dry-run --ignore-unmatch --quiet&quot;
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
 _git_shortlog ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
 		__gitcomp &quot;
-			--max-count= --max-age= --since= --after=
-			--min-age= --before= --until=
-			--no-merges
-			--author= --committer= --grep=
-			--all-match
-			--not --all
+			$__git_log_common_options
+			$__git_log_shortlog_options
 			--numbered --summary
 			&quot;
 		return
@@ -1116,33 +1777,80 @@ _git_shortlog ()
 
 _git_show ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--pretty=*)
-		__gitcomp &quot;
-			oneline short medium full fuller email raw
+		__gitcomp &quot;$__git_log_pretty_formats
 			&quot; &quot;&quot; &quot;${cur##--pretty=}&quot;
 		return
 		;;
+	--format=*)
+		__gitcomp &quot;$__git_log_pretty_formats
+			&quot; &quot;&quot; &quot;${cur##--format=}&quot;
+		return
+		;;
 	--*)
-		__gitcomp &quot;--pretty=&quot;
+		__gitcomp &quot;--pretty= --format=
+			$__git_diff_common_options
+			&quot;
 		return
 		;;
 	esac
 	__git_complete_file
 }
 
+_git_show_branch ()
+{
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	case &quot;$cur&quot; in
+	--*)
+		__gitcomp &quot;
+			--all --remotes --topo-order --current --more=
+			--list --independent --merge-base --no-name
+			--sha1-name --topics --reflog
+			&quot;
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
 _git_stash ()
 {
-	local subcommands='save list show apply clear drop pop create'
-	if [ -z &quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot; ]; then
+	local subcommands='save list show apply clear drop pop create branch'
+	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
+	if [ -z &quot;$subcommand&quot; ]; then
 		__gitcomp &quot;$subcommands&quot;
+	else
+		local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+		case &quot;$subcommand,$cur&quot; in
+		save,--*)
+			__gitcomp &quot;--keep-index&quot;
+			;;
+		apply,--*)
+			__gitcomp &quot;--index&quot;
+			;;
+		show,--*|drop,--*|pop,--*|branch,--*)
+			COMPREPLY=()
+			;;
+		show,*|apply,*|drop,*|pop,*|branch,*)
+			__gitcomp &quot;$(git --git-dir=&quot;$(__gitdir)&quot; stash list \
+					| sed -n -e 's/:.*//p')&quot;
+			;;
+		*)
+			COMPREPLY=()
+			;;
+		esac
 	fi
 }
 
 _git_submodule ()
 {
-	local subcommands=&quot;add status init update&quot;
+	__git_has_doubledash &amp;&amp; return
+
+	local subcommands=&quot;add status init update summary foreach sync&quot;
 	if [ -z &quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot; ]; then
 		local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 		case &quot;$cur&quot; in
@@ -1162,7 +1870,8 @@ _git_svn ()
 	local subcommands=&quot;
 		init fetch clone rebase dcommit log find-rev
 		set-tree commit-diff info create-ignore propget
-		proplist show-ignore show-externals
+		proplist show-ignore show-externals branch tag blame
+		migrate
 		&quot;
 	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
 	if [ -z &quot;$subcommand&quot; ]; then
@@ -1173,13 +1882,15 @@ _git_svn ()
 			--follow-parent --authors-file= --repack=
 			--no-metadata --use-svm-props --use-svnsync-props
 			--log-window-size= --no-checkout --quiet
-			--repack-flags --user-log-author $remote_opts
+			--repack-flags --use-log-author --localtime
+			--ignore-paths= $remote_opts
 			&quot;
 		local init_opts=&quot;
 			--template= --shared= --trunk= --tags=
 			--branches= --stdlayout --minimize-url
 			--no-metadata --use-svm-props --use-svnsync-props
-			--rewrite-root= $remote_opts
+			--rewrite-root= --prefix= --use-log-author
+			--add-author-from $remote_opts
 			&quot;
 		local cmt_opts=&quot;
 			--edit --rmdir --find-copies-harder --copy-similarity=
@@ -1199,7 +1910,8 @@ _git_svn ()
 		dcommit,--*)
 			__gitcomp &quot;
 				--merge --strategy= --verbose --dry-run
-				--fetch-all --no-rebase $cmt_opts $fc_opts
+				--fetch-all --no-rebase --commit-url
+				--revision $cmt_opts $fc_opts
 				&quot;
 			;;
 		set-tree,--*)
@@ -1213,13 +1925,13 @@ _git_svn ()
 			__gitcomp &quot;
 				--limit= --revision= --verbose --incremental
 				--oneline --show-commit --non-recursive
-				--authors-file=
+				--authors-file= --color
 				&quot;
 			;;
 		rebase,--*)
 			__gitcomp &quot;
 				--merge --verbose --strategy= --local
-				--fetch-all $fc_opts
+				--fetch-all --dry-run $fc_opts
 				&quot;
 			;;
 		commit-diff,--*)
@@ -1228,6 +1940,21 @@ _git_svn ()
 		info,--*)
 			__gitcomp &quot;--url&quot;
 			;;
+		branch,--*)
+			__gitcomp &quot;--dry-run --message --tag&quot;
+			;;
+		tag,--*)
+			__gitcomp &quot;--dry-run --message&quot;
+			;;
+		blame,--*)
+			__gitcomp &quot;--git-format&quot;
+			;;
+		migrate,--*)
+			__gitcomp &quot;
+				--config-dir= --ignore-paths= --minimize
+				--no-auth-cache --username=
+				&quot;
+			;;
 		*)
 			COMPREPLY=()
 			;;
@@ -1256,7 +1983,7 @@ _git_tag ()
 	-m|-F)
 		COMPREPLY=()
 		;;
-	-*|tag|git-tag)
+	-*|tag)
 		if [ $f = 1 ]; then
 			__gitcomp &quot;$(__git_tags)&quot;
 		else
@@ -1278,7 +2005,8 @@ _git ()
 		case &quot;$i&quot; in
 		--git-dir=*) __git_dir=&quot;${i#--git-dir=}&quot; ;;
 		--bare)      __git_dir=&quot;.&quot; ;;
-		--version|--help|-p|--paginate) ;;
+		--version|-p|--paginate) ;;
+		--help) command=&quot;help&quot;; break ;;
 		*) command=&quot;$i&quot;; break ;;
 		esac
 		c=$((++c))
@@ -1286,7 +2014,6 @@ _git ()
 
 	if [ -z &quot;$command&quot; ]; then
 		case &quot;${COMP_WORDS[COMP_CWORD]}&quot; in
-		--*=*) COMPREPLY=() ;;
 		--*)   __gitcomp &quot;
 			--paginate
 			--no-pager
@@ -1294,11 +2021,12 @@ _git ()
 			--bare
 			--version
 			--exec-path
+			--html-path
 			--work-tree=
 			--help
 			&quot;
 			;;
-		*)     __gitcomp &quot;$(__git_commands) $(__git_aliases)&quot; ;;
+		*)     __gitcomp &quot;$(__git_porcelain_commands) $(__git_aliases)&quot; ;;
 		esac
 		return
 	fi
@@ -1310,34 +2038,49 @@ _git ()
 	am)          _git_am ;;
 	add)         _git_add ;;
 	apply)       _git_apply ;;
+	archive)     _git_archive ;;
 	bisect)      _git_bisect ;;
 	bundle)      _git_bundle ;;
 	branch)      _git_branch ;;
 	checkout)    _git_checkout ;;
 	cherry)      _git_cherry ;;
 	cherry-pick) _git_cherry_pick ;;
+	clean)       _git_clean ;;
+	clone)       _git_clone ;;
 	commit)      _git_commit ;;
 	config)      _git_config ;;
 	describe)    _git_describe ;;
 	diff)        _git_diff ;;
+	difftool)    _git_difftool ;;
 	fetch)       _git_fetch ;;
 	format-patch) _git_format_patch ;;
+	fsck)        _git_fsck ;;
 	gc)          _git_gc ;;
+	grep)        _git_grep ;;
+	help)        _git_help ;;
+	init)        _git_init ;;
 	log)         _git_log ;;
+	ls-files)    _git_ls_files ;;
 	ls-remote)   _git_ls_remote ;;
 	ls-tree)     _git_ls_tree ;;
 	merge)       _git_merge;;
+	mergetool)   _git_mergetool;;
 	merge-base)  _git_merge_base ;;
+	mv)          _git_mv ;;
 	name-rev)    _git_name_rev ;;
 	pull)        _git_pull ;;
 	push)        _git_push ;;
 	rebase)      _git_rebase ;;
 	remote)      _git_remote ;;
 	reset)       _git_reset ;;
+	revert)      _git_revert ;;
+	rm)          _git_rm ;;
+	send-email)  _git_send_email ;;
 	shortlog)    _git_shortlog ;;
 	show)        _git_show ;;
-	show-branch) _git_log ;;
+	show-branch) _git_show_branch ;;
 	stash)       _git_stash ;;
+	stage)       _git_add ;;
 	submodule)   _git_submodule ;;
 	svn)         _git_svn ;;
 	tag)         _git_tag ;;
@@ -1348,81 +2091,37 @@ _git ()
 
 _gitk ()
 {
+	__git_has_doubledash &amp;&amp; return
+
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	local g=&quot;$(git rev-parse --git-dir 2&gt;/dev/null)&quot;
+	local g=&quot;$(__gitdir)&quot;
 	local merge=&quot;&quot;
-	if [ -f $g/MERGE_HEAD ]; then
+	if [ -f &quot;$g/MERGE_HEAD&quot; ]; then
 		merge=&quot;--merge&quot;
 	fi
 	case &quot;$cur&quot; in
 	--*)
-		__gitcomp &quot;--not --all $merge&quot;
+		__gitcomp &quot;
+			$__git_log_common_options
+			$__git_log_gitk_options
+			$merge
+			&quot;
 		return
 		;;
 	esac
 	__git_complete_revlist
 }
 
-complete -o default -o nospace -F _git git
-complete -o default -o nospace -F _gitk gitk
-complete -o default -o nospace -F _git_am git-am
-complete -o default -o nospace -F _git_apply git-apply
-complete -o default -o nospace -F _git_bisect git-bisect
-complete -o default -o nospace -F _git_branch git-branch
-complete -o default -o nospace -F _git_bundle git-bundle
-complete -o default -o nospace -F _git_checkout git-checkout
-complete -o default -o nospace -F _git_cherry git-cherry
-complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
-complete -o default -o nospace -F _git_commit git-commit
-complete -o default -o nospace -F _git_describe git-describe
-complete -o default -o nospace -F _git_diff git-diff
-complete -o default -o nospace -F _git_fetch git-fetch
-complete -o default -o nospace -F _git_format_patch git-format-patch
-complete -o default -o nospace -F _git_gc git-gc
-complete -o default -o nospace -F _git_log git-log
-complete -o default -o nospace -F _git_ls_remote git-ls-remote
-complete -o default -o nospace -F _git_ls_tree git-ls-tree
-complete -o default -o nospace -F _git_merge git-merge
-complete -o default -o nospace -F _git_merge_base git-merge-base
-complete -o default -o nospace -F _git_name_rev git-name-rev
-complete -o default -o nospace -F _git_pull git-pull
-complete -o default -o nospace -F _git_push git-push
-complete -o default -o nospace -F _git_rebase git-rebase
-complete -o default -o nospace -F _git_config git-config
-complete -o default -o nospace -F _git_remote git-remote
-complete -o default -o nospace -F _git_reset git-reset
-complete -o default -o nospace -F _git_shortlog git-shortlog
-complete -o default -o nospace -F _git_show git-show
-complete -o default -o nospace -F _git_stash git-stash
-complete -o default -o nospace -F _git_submodule git-submodule
-complete -o default -o nospace -F _git_svn git-svn
-complete -o default -o nospace -F _git_log git-show-branch
-complete -o default -o nospace -F _git_tag git-tag
-complete -o default -o nospace -F _git_log git-whatchanged
+complete -o bashdefault -o default -o nospace -F _git git 2&gt;/dev/null \
+	|| complete -o default -o nospace -F _git git
+complete -o bashdefault -o default -o nospace -F _gitk gitk 2&gt;/dev/null \
+	|| complete -o default -o nospace -F _gitk gitk
 
 # The following are necessary only for Cygwin, and only are needed
 # when the user has tab-completed the executable name and consequently
 # included the '.exe' suffix.
 #
 if [ Cygwin = &quot;$(uname -o 2&gt;/dev/null)&quot; ]; then
-complete -o default -o nospace -F _git_add git-add.exe
-complete -o default -o nospace -F _git_apply git-apply.exe
-complete -o default -o nospace -F _git git.exe
-complete -o default -o nospace -F _git_branch git-branch.exe
-complete -o default -o nospace -F _git_bundle git-bundle.exe
-complete -o default -o nospace -F _git_cherry git-cherry.exe
-complete -o default -o nospace -F _git_describe git-describe.exe
-complete -o default -o nospace -F _git_diff git-diff.exe
-complete -o default -o nospace -F _git_format_patch git-format-patch.exe
-complete -o default -o nospace -F _git_log git-log.exe
-complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
-complete -o default -o nospace -F _git_merge_base git-merge-base.exe
-complete -o default -o nospace -F _git_name_rev git-name-rev.exe
-complete -o default -o nospace -F _git_push git-push.exe
-complete -o default -o nospace -F _git_config git-config
-complete -o default -o nospace -F _git_shortlog git-shortlog.exe
-complete -o default -o nospace -F _git_show git-show.exe
-complete -o default -o nospace -F _git_log git-show-branch.exe
-complete -o default -o nospace -F _git_tag git-tag.exe
-complete -o default -o nospace -F _git_log git-whatchanged.exe
+complete -o bashdefault -o default -o nospace -F _git git.exe 2&gt;/dev/null \
+	|| complete -o default -o nospace -F _git git.exe
 fi</diff>
      <filename>git-completion.bash</filename>
    </modified>
    <modified>
      <diff>@@ -32,9 +32,11 @@ backtick 1 15 15 cat %{HOME}/.pwd
 ##hardstatus string '%{gk}[ %{G}%H:%h %{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%h%{g}]'
 ##hardstatus string '%{= kG}%-Lw%{= kW}%50&gt; %n%f* %t%{= kG}%+Lw%&lt; %{= kG}%-=%H:%h%{-}'
 ##caption always &quot;%{= kw}%-w%{= gW}%n %t%{-}%+w %-= %H:%h &quot;
-caption always &quot;%{= kc}windows: %?%-Lw%?%{= kY}%n*%f %t%?(%u)%?%{= kc}%?%+Lw%?&quot;
+#
+#caption always &quot;%{= kc}windows: %?%-Lw%?%{= kY}%n*%f %t%?(%u)%?%{= kc}%?%+Lw%?&quot;
+#
 ##hardstatus alwayslastline &quot;%{rk}%H %{gk}%c %{yk}%M%d %{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw%?&quot;
 hardstatus alwayslastline &quot;SCREEN | %H | %M%d %c | %{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw%?&quot;
 
 
-screen -t shell 0 bash
\ No newline at end of file
+screen -t shell 0 bash</diff>
      <filename>screenrc</filename>
    </modified>
    <modified>
      <diff>@@ -11,8 +11,11 @@ set history=100
 
 &quot; if using a vim version 6 or higher, enable folding
 if version &gt;= 600
-  set foldenable
-  set foldmethod=marker
+  set foldenable         &quot; fold by default
+  set foldmethod=indent  &quot; fold based on indentation
+  set foldnestmax=10     &quot; deepest fold is 10 levels
+  set foldlevel=1
+  set nofoldenable
 endif
 
 &quot; tabs -&gt; spaces
@@ -47,7 +50,7 @@ nnoremap &lt;F4&gt;&lt;F4&gt; :set invwrap wrap?&lt;CR&gt;  &quot; use f4f4 to toggle wordwrap
 nnoremap &lt;F2&gt;&lt;F2&gt; :vsplit&lt;CR&gt;
 nnoremap &lt;F3&gt;&lt;F3&gt; &lt;C-W&gt;w
 nnoremap &lt;silent&gt; &lt;F8&gt; :TlistToggle&lt;CR&gt;
-map &lt;leader&gt;t :FuzzyFinderTextMate&lt;CR&gt;
+map &lt;leader&gt;f :FuzzyFinderTextMate&lt;CR&gt;
 map &lt;leader&gt;b :FuzzyFinderBuffer&lt;CR&gt;
 map &lt;leader&gt;d :execute 'NERDTreeToggle ' . getcwd()&lt;CR&gt;
 
@@ -93,6 +96,7 @@ imap &lt;buffer&gt; &lt;CR&gt; &lt;C-R&gt;=RubyEndToken()&lt;CR&gt;
 &quot; backup to ~/.tmp
 set backup
 set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
+set backupskip=/tmp/*,/private/tmp/*
 set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
 set writebackup
 &quot;</diff>
      <filename>vimrc</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>cda5a9709b134ee769f378d640dfe5bb3abda265</id>
    </parent>
  </parents>
  <author>
    <name>Craig P Jolicoeur</name>
    <email>cpjolicoeur@gmail.com</email>
  </author>
  <url>http://github.com/cpjolicoeur/dotfiles/commit/26ca4ac1be5471c4790c3a7495359aad5f953c29</url>
  <id>26ca4ac1be5471c4790c3a7495359aad5f953c29</id>
  <committed-date>2009-10-09T06:59:55-07:00</committed-date>
  <authored-date>2009-10-09T06:59:55-07:00</authored-date>
  <message>update files</message>
  <tree>6a5f7bf4728ccd9fb8aa44b1512796f19325bc05</tree>
  <committer>
    <name>Craig P Jolicoeur</name>
    <email>cpjolicoeur@gmail.com</email>
  </committer>
</commit>
