GIT 1.0.7

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/.gitignore b/.gitignore
index 6bd508e..dbbef06 100644
--- a/.gitignore
+++ b/.gitignore
@@ -119,3 +119,4 @@
 *.exe
 libgit.a
 *.o
+*.py[co]
diff --git a/Documentation/cvs-migration.txt b/Documentation/cvs-migration.txt
index dc9387b..8fd1a33 100644
--- a/Documentation/cvs-migration.txt
+++ b/Documentation/cvs-migration.txt
@@ -138,7 +138,7 @@
 git has a couple of alternatives, though, that you may find sufficient
 or even superior depending on your use.  One is called "git-whatchanged"
 (for obvious reasons) and the other one is called "pickaxe" ("a tool for
-the software archeologist"). 
+the software archaeologist"). 
 
 The "git-whatchanged" script is a truly trivial script that can give you
 a good overview of what has changed in a file or a directory (or an
diff --git a/Documentation/diff-format.txt b/Documentation/diff-format.txt
index 97756ec..0398b40 100644
--- a/Documentation/diff-format.txt
+++ b/Documentation/diff-format.txt
@@ -117,7 +117,7 @@
 What -p option produces is slightly different from the
 traditional diff format.
 
-1.   It is preceeded with a "git diff" header, that looks like
+1.   It is preceded with a "git diff" header, that looks like
      this:
 
      diff --git a/file1 b/file2
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 9e574a0..5c85167 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -21,7 +21,7 @@
 --abbrev[=<n>]::
 	Instead of showing the full 40-byte hexadecimal object
 	name in diff-raw format output and diff-tree header
-	lines, show only handful dhexigits prefix.  This is
+	lines, show only handful hexdigits prefix.  This is
 	independent of --full-index option above, which controls
 	the diff-patch output format.  Non default number of
 	digits can be specified with --abbrev=<n>.
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 4cae412..89e4614 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -31,7 +31,7 @@
 ----------
 
 The list of <file> given to the command is fed to `git-ls-files`
-command to list files that are not registerd in the index and
+command to list files that are not registered in the index and
 are not ignored/excluded by `$GIT_DIR/info/exclude` file or
 `.gitignore` file in each directory.  This means two things:
 
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index a415fe2..02cabc9 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -8,6 +8,7 @@
 
 SYNOPSIS
 --------
+[verse]
 'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>...
 'git-am' [--skip | --resolved]
 
diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt
index 626e281..51c7d47 100644
--- a/Documentation/git-apply.txt
+++ b/Documentation/git-apply.txt
@@ -8,7 +8,10 @@
 
 SYNOPSIS
 --------
-'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [<patch>...]
+[verse]
+'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply]
+	  [--no-add] [--index-info] [--allow-binary-replacement] [-z]
+	  [<patch>...]
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-archimport.txt b/Documentation/git-archimport.txt
index a2bd788..023d3ae 100644
--- a/Documentation/git-archimport.txt
+++ b/Documentation/git-archimport.txt
@@ -8,15 +8,15 @@
 
 SYNOPSIS
 --------
-`git-archimport` [ -h ] [ -v ] [ -o ] [ -a ] [ -f ] [ -T ]
-                 [ -D depth ] [ -t tempdir ] 
-                 <archive/branch> [ <archive/branch> ]
+[verse]
+`git-archimport` [-h] [-v] [-o] [-a] [-f] [-T] [-D depth] [-t tempdir]
+               <archive/branch> [ <archive/branch> ]
 
 DESCRIPTION
 -----------
 Imports a project from one or more Arch repositories. It will follow branches
 and repositories within the namespaces defined by the <archive/branch>
-parameters suppplied. If it cannot find the remote branch a merge comes from
+parameters supplied. If it cannot find the remote branch a merge comes from
 it will just import it as a regular commit. If it can find it, it will mark it 
 as a merge whenever possible (see discussion below). 
 
diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt
index 9a7700f..504eb1b 100644
--- a/Documentation/git-cat-file.txt
+++ b/Documentation/git-cat-file.txt
@@ -8,7 +8,7 @@
 
 SYNOPSIS
 --------
-'git-cat-file' (-t | -s | -e | <type>) <object>
+'git-cat-file' [-t | -s | -e | <type>] <object>
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-checkout-index.txt b/Documentation/git-checkout-index.txt
index 9f32c65..2a1e526 100644
--- a/Documentation/git-checkout-index.txt
+++ b/Documentation/git-checkout-index.txt
@@ -8,8 +8,9 @@
 
 SYNOPSIS
 --------
+[verse]
 'git-checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
-	[--stage=<number>] [--] <file>...
+		   [--stage=<number>] [--] <file>...
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 8410a6d..ffa4fb0 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -8,7 +8,9 @@
 
 SYNOPSIS
 --------
-'git-clone' [-l [-s]] [-q] [-n] [-u <upload-pack>] <repository> [<directory>]
+[verse]
+'git-clone' [-l [-s]] [-q] [-n] [-u <upload-pack>]
+	  <repository> [<directory>]
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt
index a794192..41d1a1c 100644
--- a/Documentation/git-commit-tree.txt
+++ b/Documentation/git-commit-tree.txt
@@ -60,7 +60,8 @@
 
 (nb "<", ">" and "\n"s are stripped)
 
-In `.git/config` file, the following items are used:
+In `.git/config` file, the following items are used for GIT_AUTHOR_NAME and
+GIT_AUTHOR_EMAIL:
 
 	[user]
 		name = "Your Name"
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 8b91f22..e0ff74f 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -7,7 +7,9 @@
 
 SYNOPSIS
 --------
-'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] [-e] [--] <file>...
+[verse]
+'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>]
+	   [-e] [--] <file>...
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-cvsexportcommit.txt b/Documentation/git-cvsexportcommit.txt
index 91def2b..13cbf3b 100644
--- a/Documentation/git-cvsexportcommit.txt
+++ b/Documentation/git-cvsexportcommit.txt
@@ -8,8 +8,7 @@
 
 SYNOPSIS
 --------
-git-cvsexportcommmit.perl 
-                        [ -h ] [ -v ] [ -c ] [ -p ] [PARENTCOMMIT] COMMITID 
+'git-cvsexportcommmit' [-h] [-v] [-c] [-p] [PARENTCOMMIT] COMMITID
 
 
 DESCRIPTION
diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
index f89b251..01ca7ef 100644
--- a/Documentation/git-cvsimport.txt
+++ b/Documentation/git-cvsimport.txt
@@ -8,10 +8,10 @@
 
 SYNOPSIS
 --------
-'git-cvsimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ]
-			[ -d <CVSROOT> ] [ -p <options-for-cvsps> ]
-			[ -C <git_repository> ] [ -i ] [ -P <file> ] [ -k ]
-			[ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ]
+[verse]
+'git-cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>] [-s <subst>]
+	      [-p <options-for-cvsps>] [-C <git_repository>] [-i] [-P <file>]
+	      [-m] [-M regex] [<CVS_module>]
 
 
 DESCRIPTION
diff --git a/Documentation/git-daemon.txt b/Documentation/git-daemon.txt
index 2a8f371..33f3320 100644
--- a/Documentation/git-daemon.txt
+++ b/Documentation/git-daemon.txt
@@ -7,8 +7,9 @@
 
 SYNOPSIS
 --------
+[verse]
 'git-daemon' [--verbose] [--syslog] [--inetd | --port=n] [--export-all]
-             [--timeout=n] [--init-timeout=n] [--strict-paths] [directory...]
+           [--timeout=n] [--init-timeout=n] [--strict-paths] [directory...]
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-diff-index.txt b/Documentation/git-diff-index.txt
index dba6d30..5d2096a 100644
--- a/Documentation/git-diff-index.txt
+++ b/Documentation/git-diff-index.txt
@@ -53,7 +53,7 @@
 	contents (the ones I'd write with a "git-write-tree")
 
 For example, let's say that you have worked on your working directory, updated
-some files in the index and are ready to commit. You want to see eactly
+some files in the index and are ready to commit. You want to see exactly
 *what* you are going to commit is without having to write a new tree
 object and compare it that way, and to do that, you just do
 
@@ -110,7 +110,7 @@
 actually look at the contents of the file at all. So maybe
 `kernel/sched.c` hasn't actually changed, and it's just that you
 touched it. In either case, it's a note that you need to
-"git-upate-index" it to make the index be in sync.
+"git-update-index" it to make the index be in sync.
 
 NOTE: You can have a mixture of files show up as "has been updated"
 and "is still dirty in the working directory" together. You can always
diff --git a/Documentation/git-diff-tree.txt b/Documentation/git-diff-tree.txt
index 9a2947e..91fb130 100644
--- a/Documentation/git-diff-tree.txt
+++ b/Documentation/git-diff-tree.txt
@@ -8,7 +8,9 @@
 
 SYNOPSIS
 --------
-'git-diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r] [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
+[verse]
+'git-diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r]
+	      [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
 
 DESCRIPTION
 -----------
@@ -62,7 +64,7 @@
 -s::
 	By default, "git-diff-tree --stdin" shows differences,
 	either in machine-readable form (without '-p') or in patch
-	form (with '-p').  This output can be supressed.  It is
+	form (with '-p').  This output can be suppressed.  It is
 	only useful with '-v' flag.
 
 -v::
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index b04f393..ca41634 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt
@@ -67,7 +67,7 @@
 <1> instead of using the tip of the current branch, compare with the
 tip of "test" branch.
 <2> instead of comparing with the tip of "test" branch, compare with
-the tip of the curren branch, but limit the comparison to the
+the tip of the current branch, but limit the comparison to the
 file "test".
 <3> compare the version before the last commit and the last commit.
 ------------
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index d7ca2db..47705de 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -8,7 +8,9 @@
 
 SYNOPSIS
 --------
-'git-format-patch' [-n | -k] [-o <dir> | --stdout] [-s] [-c] [--mbox] [--diff-options] <his> [<mine>]
+[verse]
+'git-format-patch' [-n | -k] [-o <dir> | --stdout] [-s] [-c] [--mbox]
+		 [--diff-options] <his> [<mine>]
 
 DESCRIPTION
 -----------
@@ -96,7 +98,7 @@
 
 See Also
 --------
-gitlink:git-am[1], gitlink:git-send-email
+gitlink:git-am[1], gitlink:git-send-email[1]
 
 
 Author
diff --git a/Documentation/git-fsck-objects.txt b/Documentation/git-fsck-objects.txt
index bab1f60..387b435 100644
--- a/Documentation/git-fsck-objects.txt
+++ b/Documentation/git-fsck-objects.txt
@@ -8,7 +8,9 @@
 
 SYNOPSIS
 --------
-'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache] [--standalone | --full] [--strict] [<object>*]
+[verse]
+'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache]
+		 [--standalone | --full] [--strict] [<object>*]
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt
index 0175793..2bfd8ed 100644
--- a/Documentation/git-grep.txt
+++ b/Documentation/git-grep.txt
@@ -8,7 +8,7 @@
 
 SYNOPSIS
 --------
-'git-grep' <option>... <pattern> <path>...
+'git-grep' [<option>...] <pattern> [<path>...]
 
 DESCRIPTION
 -----------
@@ -27,7 +27,6 @@
 	The pattern to look for.
 
 <path>...::
-
 	Optional paths to limit the set of files to be searched;
 	passed to `git-ls-files`.
 
diff --git a/Documentation/git-http-fetch.txt b/Documentation/git-http-fetch.txt
index 1116e85..bc1a132 100644
--- a/Documentation/git-http-fetch.txt
+++ b/Documentation/git-http-fetch.txt
@@ -3,12 +3,12 @@
 
 NAME
 ----
-git-http-fetch - Downloads a remote git repository via HTTP
+git-http-fetch - downloads a remote git repository via HTTP
 
 
 SYNOPSIS
 --------
-'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] commit-id url
+'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] <commit> <url>
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-init-db.txt b/Documentation/git-init-db.txt
index 6deef92..ea4d849 100644
--- a/Documentation/git-init-db.txt
+++ b/Documentation/git-init-db.txt
@@ -8,7 +8,7 @@
 
 SYNOPSIS
 --------
-'git-init-db' [--template=<template_directory>]
+'git-init-db' [--template=<template_directory>] [--shared]
 
 
 OPTIONS
@@ -16,6 +16,9 @@
 --template=<template_directory>::
 	Provide the directory in from which templates will be used.
 
+--shared::
+	Specify that the git repository is to be shared amongst several users.
+
 
 DESCRIPTION
 -----------
@@ -30,7 +33,16 @@
 environment variable then the sha1 directories are created underneath -
 otherwise the default `$GIT_DIR/objects` directory is used.
 
-`git-init-db` won't hurt an existing repository.
+A shared repository allows users belonging to the same group to push into that
+repository. When specifying `--shared` the config variable "core.sharedRepository" 
+is set to 'true' so that directories under `$GIT_DIR` are made group writable
+(and g+sx, since the git group may be not the primary group of all users).
+
+
+Running `git-init-db` in an existing repository is safe. It will not overwrite
+things that are already there. The primary reason for rerunning `git-init-db`
+is to pick up newly added templates.
+
 
 
 EXAMPLES
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt
index 186f3bb..e42af5e 100644
--- a/Documentation/git-ls-files.txt
+++ b/Documentation/git-ls-files.txt
@@ -74,7 +74,7 @@
 	H::	cached
 	M::	unmerged
 	R::	removed/deleted
-	C::	modifed/changed
+	C::	modified/changed
 	K::	to be killed
 	?	other
 
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt
index 009ec5a..2d67d39 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.txt
@@ -46,7 +46,7 @@
 	output of the command.
 
 --stdout::
-	Write the pack contents (what would have been writtin to
+	Write the pack contents (what would have been written to
 	.pack file) out to the standard output.
 
 --window and --depth::
diff --git a/Documentation/git-repo-config.txt b/Documentation/git-repo-config.txt
index 5eefe02..3069464 100644
--- a/Documentation/git-repo-config.txt
+++ b/Documentation/git-repo-config.txt
@@ -21,9 +21,9 @@
 actually the section and the key separated by a dot, and the value will be
 escaped.
 
-If you want to set/unset an option which can occor on multiple lines, you
+If you want to set/unset an option which can occur on multiple lines, you
 should provide a POSIX regex for the value. If you want to handle the lines
-*not* matching the regex, just prepend a single exlamation mark in front
+*not* matching the regex, just prepend a single exclamation mark in front
 (see EXAMPLES).
 
 This command will fail if
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index 064ccb1..f9146f1 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -8,18 +8,19 @@
 
 SYNOPSIS
 --------
+[verse]
 'git-rev-list' [ \--max-count=number ]
-	[ \--max-age=timestamp ]
-	[ \--min-age=timestamp ]
-	[ \--sparse ]
-	[ \--no-merges ]
-	[ \--all ]
-	[ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] | ]
-	[ \--parents ]
-	[ \--objects [ \--unpacked ] ]
-	[ \--pretty | \--header | ]
-	[ \--bisect ]
-	<commit>... [ \-- <paths>... ]
+	     [ \--max-age=timestamp ]
+	     [ \--min-age=timestamp ]
+	     [ \--sparse ]
+	     [ \--no-merges ]
+	     [ \--all ]
+	     [ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] ]
+	     [ \--parents ]
+	     [ \--objects [ \--unpacked ] ]
+	     [ \--pretty | \--header ]
+	     [ \--bisect ]
+	     <commit>... [ \-- <paths>... ]
 
 DESCRIPTION
 -----------
@@ -129,7 +130,7 @@
 +
 Commits marked with (^) are not parents of the immediately preceding commit.
 These "breaks" represent necessary discontinuities implied by trying to
-represent an arbtirary DAG in a linear form.
+represent an arbitrary DAG in a linear form.
 +
 `--show-breaks` is only valid if `--merge-order` is also specified.
 
diff --git a/Documentation/git-show-branch.txt b/Documentation/git-show-branch.txt
index ffe64d8..5b76f3b 100644
--- a/Documentation/git-show-branch.txt
+++ b/Documentation/git-show-branch.txt
@@ -85,7 +85,7 @@
 displayed, indented N places.  If a commit is on the I-th
 branch, the I-th indentation character shows a '+' sign;
 otherwise it shows a space.  Each commit shows a short name that
-can be used as an exended SHA1 to name that commit.
+can be used as an extended SHA1 to name that commit.
 
 The following example shows three branches, "master", "fixes"
 and "mhf":
diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt
index f8dbee7..db1ce38 100644
--- a/Documentation/git-svnimport.txt
+++ b/Documentation/git-svnimport.txt
@@ -11,7 +11,7 @@
 --------
 'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
 			[ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev]
-			[ -b branch_subdir ] [ -t trunk_subdir ] [ -T tag_subdir ]
+			[ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
 			[ -s start_chg ] [ -m ] [ -M regex ]
 			<SVN_repository_URL> [ <path> ]
 
@@ -40,17 +40,17 @@
 -s <start_rev>::
         Start importing at this SVN change number. The  default is 1.
 +
-When importing incementally, you might need to edit the .git/svn2git file.
+When importing incrementally, you might need to edit the .git/svn2git file.
 
 -i::
 	Import-only: don't perform a checkout after importing.  This option
 	ensures the working directory and index remain untouched and will
 	not create them if they do not exist.
 
--t <trunk_subdir>::
+-T <trunk_subdir>::
 	Name the SVN trunk. Default "trunk".
 
--T <tag_subdir>::
+-t <tag_subdir>::
 	Name the SVN subdirectory for tags. Default "tags".
 
 -b <branch_subdir>::
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 5f068c2..875d487 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -422,7 +422,7 @@
 gitlink:git-send-email[1]::
 	Send patch e-mails out of "format-patch --mbox" output.
 
-gitlink:git-symbolic-refs[1]::
+gitlink:git-symbolic-ref[1]::
 	Read and modify symbolic refs.
 
 gitlink:git-stripspace[1]::
diff --git a/Documentation/glossary.txt b/Documentation/glossary.txt
index 520f4c5..2331be5 100644
--- a/Documentation/glossary.txt
+++ b/Documentation/glossary.txt
@@ -19,7 +19,7 @@
 	In git's context, synonym to object name.
 
 object database::
-	Stores a set of "objects", and an individial object is identified
+	Stores a set of "objects", and an individual object is identified
 	by its object name. The objects usually live in `$GIT_DIR/objects/`.
 
 blob object::
diff --git a/Documentation/howto/isolate-bugs-with-bisect.txt b/Documentation/howto/isolate-bugs-with-bisect.txt
index 4009495..edbcd4c 100644
--- a/Documentation/howto/isolate-bugs-with-bisect.txt
+++ b/Documentation/howto/isolate-bugs-with-bisect.txt
@@ -24,7 +24,7 @@
 	git bisect bad master		<- mark "master" as the bad state
 	git bisect good ORIG_HEAD	<- mark ORIG_HEAD as good (or
 					   whatever other known-good 
-					   thing you booted laste)
+					   thing you booted last)
 
 and at this point "git bisect" will churn for a while, and tell you what 
 the mid-point between those two commits are, and check that state out as 
diff --git a/Documentation/repository-layout.txt b/Documentation/repository-layout.txt
index 1b5f228..0347cab 100644
--- a/Documentation/repository-layout.txt
+++ b/Documentation/repository-layout.txt
@@ -21,7 +21,7 @@
 . You can be using `objects/info/alternates` mechanism, or
 `$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanism to 'borrow'
 objects from other object stores.  A repository with this kind
-of incompete object store is not suitable to be published for
+of incomplete object store is not suitable to be published for
 use with dumb transports but otherwise is OK as long as
 `objects/info/alternates` points at the right object stores
 it borrows from.
@@ -106,7 +106,7 @@
 	up-to-date if the repository is published for dumb
 	transports.  The `git-receive-pack` command, which is
 	run on a remote repository when you `git push` into it,
-	runs `hooks/update` hook to help you achive this.
+	runs `hooks/update` hook to help you achieve this.
 
 info/grafts::
 	This file records fake commit ancestry information, to
diff --git a/Makefile b/Makefile
index 4ff85fc..cfb793b 100644
--- a/Makefile
+++ b/Makefile
@@ -55,7 +55,7 @@
 # Define USE_STDEV below if you want git to care about the underlying device
 # change being considered an inode change from the update-cache perspective.
 
-GIT_VERSION = 1.0.6
+GIT_VERSION = 1.0.7
 
 # CFLAGS and LDFLAGS are for the users to override from the command line.
 
diff --git a/apply.c b/apply.c
index d5e7bfd..c471a82 100644
--- a/apply.c
+++ b/apply.c
@@ -1588,7 +1588,7 @@
 
 	if (S_ISLNK(mode))
 		return symlink(buf, path);
-	fd = open(path, O_CREAT | O_EXCL | O_WRONLY | O_TRUNC, (mode & 0100) ? 0777 : 0666);
+	fd = open(path, O_CREAT | O_EXCL | O_WRONLY, (mode & 0100) ? 0777 : 0666);
 	if (fd < 0)
 		return -1;
 	while (size) {
@@ -1635,7 +1635,8 @@
 			}
 			if (errno != EEXIST)
 				break;
-		}			
+			++nr;
+		}
 	}
 	die("unable to write file %s mode %o", path, mode);
 }
diff --git a/config.c b/config.c
index 992e988..8355224 100644
--- a/config.c
+++ b/config.c
@@ -409,8 +409,7 @@
 	const char* value_regex, int multi_replace)
 {
 	int i;
-	struct stat st;
-	int fd;
+	int fd, in_fd;
 	char* config_filename = strdup(git_path("config"));
 	char* lock_file = strdup(git_path("config.lock"));
 	const char* last_dot = strrchr(key, '.');
@@ -457,9 +456,17 @@
 	/*
 	 * If .git/config does not exist yet, write a minimal version.
 	 */
-	if (stat(config_filename, &st)) {
+	in_fd = open(config_filename, O_RDONLY);
+	if ( in_fd < 0 ) {
 		free(store.key);
 
+		if ( ENOENT != errno ) {
+			error("opening %s: %s", config_filename,
+			      strerror(errno));
+			close(fd);
+			unlink(lock_file);
+			return 3; /* same as "invalid config file" */
+		}
 		/* if nothing to unset, error out */
 		if (value == NULL) {
 			close(fd);
@@ -471,7 +478,7 @@
 		store_write_section(fd, key);
 		store_write_pair(fd, key, value);
 	} else{
-		int in_fd;
+		struct stat st;
 		char* contents;
 		int i, copy_begin, copy_end, new_line = 0;
 
@@ -528,7 +535,7 @@
 			return 5;
 		}
 
-		in_fd = open(config_filename, O_RDONLY, 0666);
+		fstat(in_fd, &st);
 		contents = mmap(NULL, st.st_size, PROT_READ,
 			MAP_PRIVATE, in_fd, 0);
 		close(in_fd);
diff --git a/date.c b/date.c
index 3e11500..416ea57 100644
--- a/date.c
+++ b/date.c
@@ -326,7 +326,7 @@
 
 	/*
 	 * NOTE! We will give precedence to day-of-month over month or
-	 * year numebers in the 1-12 range. So 05 is always "mday 5",
+	 * year numbers in the 1-12 range. So 05 is always "mday 5",
 	 * unless we already have a mday..
 	 *
 	 * IOW, 01 Apr 05 parses as "April 1st, 2005".
@@ -640,7 +640,7 @@
 	}
 	if (number > 0 && number < 32)
 		tm.tm_mday = number;
-	if (tm.tm_mon > now.tm_mon)
+	if (tm.tm_mon > now.tm_mon && tm.tm_year == now.tm_year)
 		tm.tm_year--;
 	return mktime(&tm);
 }
diff --git a/diff-index.c b/diff-index.c
index 0054883..87e1061 100644
--- a/diff-index.c
+++ b/diff-index.c
@@ -116,7 +116,7 @@
 			/* We come here with ce pointing at stage 1
 			 * (original tree) and ac[1] pointing at stage
 			 * 3 (unmerged).  show-modified with
-			 * report-mising set to false does not say the
+			 * report-missing set to false does not say the
 			 * file is deleted but reports true if work
 			 * tree does not have it, in which case we
 			 * fall through to report the unmerged state.
diff --git a/diff.c b/diff.c
index 66057e5..17d68fa 100644
--- a/diff.c
+++ b/diff.c
@@ -787,7 +787,7 @@
 			 * so it is safe for us to do this here.  Also
 			 * it does not smudge active_cache or active_nr
 			 * when it fails, so we do not have to worry about
-			 * cleaning it up oufselves either.
+			 * cleaning it up ourselves either.
 			 */
 			read_cache();
 	}
diff --git a/entry.c b/entry.c
index 15b34eb..410b758 100644
--- a/entry.c
+++ b/entry.c
@@ -60,7 +60,7 @@
 static int create_file(const char *path, unsigned int mode)
 {
 	mode = (mode & 0100) ? 0777 : 0666;
-	return open(path, O_WRONLY | O_TRUNC | O_CREAT | O_EXCL, mode);
+	return open(path, O_WRONLY | O_CREAT | O_EXCL, mode);
 }
 
 static int write_entry(struct cache_entry *ce, const char *path, struct checkout *state)
diff --git a/epoch.c b/epoch.c
index db44f5c..3a76748 100644
--- a/epoch.c
+++ b/epoch.c
@@ -190,7 +190,7 @@
  * enqueued, enqueuing the commit in a list of pending commits, in latest
  * commit date first order.
  *
- * The algorithm then preceeds to visit each commit in the pending queue.
+ * The algorithm then proceeds to visit each commit in the pending queue.
  * Upon each visit, the pending mass is added to the mass already seen for that
  * commit and then divided into N equal portions, where N is the number of
  * parents of the commit being visited. The divided portions are then injected
diff --git a/fetch-clone.c b/fetch-clone.c
index 2b2aa15..f46fe6e 100644
--- a/fetch-clone.c
+++ b/fetch-clone.c
@@ -47,7 +47,7 @@
 		if (retval < 0) {
 			if (errno == EINTR)
 				continue;
-			error("waitpid failed (%s)", strerror(retval));
+			error("waitpid failed (%s)", strerror(errno));
 			goto error_die;
 		}
 		if (WIFSIGNALED(status)) {
diff --git a/git-commit.sh b/git-commit.sh
index 7e39c10..193feeb 100755
--- a/git-commit.sh
+++ b/git-commit.sh
@@ -148,7 +148,7 @@
 
 if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
 	echo "#"
-	echo "# It looks like your may be committing a MERGE."
+	echo "# It looks like you may be committing a MERGE."
 	echo "# If this is not correct, please remove the file"
 	echo "#	$GIT_DIR/MERGE_HEAD"
 	echo "# and try again"
@@ -165,6 +165,7 @@
 	then
 		pick_author_script='
 		/^author /{
+			s/'\''/'\''\\'\'\''/g
 			h
 			s/^author \([^<]*\) <[^>]*> .*$/\1/
 			s/'\''/'\''\'\'\''/g
diff --git a/git-compat-util.h b/git-compat-util.h
index 0c98c99..c353b27 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -63,6 +63,8 @@
 static inline void *xmalloc(size_t size)
 {
 	void *ret = malloc(size);
+	if (!ret && !size)
+		ret = malloc(1);
 	if (!ret)
 		die("Out of memory, malloc failed");
 	return ret;
@@ -71,6 +73,8 @@
 static inline void *xrealloc(void *ptr, size_t size)
 {
 	void *ret = realloc(ptr, size);
+	if (!ret && !size)
+		ret = realloc(ptr, 1);
 	if (!ret)
 		die("Out of memory, realloc failed");
 	return ret;
@@ -79,6 +83,8 @@
 static inline void *xcalloc(size_t nmemb, size_t size)
 {
 	void *ret = calloc(nmemb, size);
+	if (!ret && (!nmemb || !size))
+		ret = calloc(1, 1);
 	if (!ret)
 		die("Out of memory, calloc failed");
 	return ret;
diff --git a/git-fetch.sh b/git-fetch.sh
index 125bcea..b46b3e5 100755
--- a/git-fetch.sh
+++ b/git-fetch.sh
@@ -188,11 +188,20 @@
 reflist=$(get_remote_refs_for_fetch "$@")
 if test "$tags"
 then
-	taglist=$(git-ls-remote --tags "$remote" |
-		sed -e '
-			/\^/d
-			s/^[^	]*	//
-			s/.*/.&:&/')
+	taglist=$(IFS="	" &&
+		  git-ls-remote --tags "$remote" |
+	          while read sha1 name
+		  do
+			case "$name" in
+			(*^*) continue ;;
+			esac
+		  	if git-check-ref-format "$name"
+			then
+			    echo ".${name}:${name}"
+			else
+			    echo >&2 "warning: tag ${name} ignored"
+			fi
+		  done)
 	if test "$#" -gt 1
 	then
 		# remote URL plus explicit refspecs; we need to merge them.
diff --git a/git-format-patch.sh b/git-format-patch.sh
index daa3cae..818059f 100755
--- a/git-format-patch.sh
+++ b/git-format-patch.sh
@@ -173,6 +173,7 @@
 
 whosepatchScript='
 /^author /{
+	s/'\''/'\''\\'\'\''/g
 	s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p
 	q
 }'
diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh
index 7dee88a..5349a1c 100755
--- a/git-merge-one-file.sh
+++ b/git-merge-one-file.sh
@@ -82,7 +82,7 @@
 		expr "$sz0" \< "$sz1" \* 2 >/dev/null || : >$orig
 		;;
 	*)
-		echo "Auto-merging $4."
+		echo "Auto-merging $4"
 		orig=`git-unpack-file $1`
 		;;
 	esac
@@ -107,7 +107,7 @@
 	fi
 
 	if [ $ret -ne 0 ]; then
-		echo "ERROR: Merge conflict in $4."
+		echo "ERROR: Merge conflict in $4"
 		exit 1
 	fi
 	exec git-update-index -- "$4"
diff --git a/git-reset.sh b/git-reset.sh
index eb44ee8..6c9e58a 100755
--- a/git-reset.sh
+++ b/git-reset.sh
@@ -3,7 +3,7 @@
 USAGE='[--mixed | --soft | --hard]  [<commit-ish>]'
 . git-sh-setup
 
-tmp=/var/tmp/reset.$$
+tmp=${GIT_DIR}/reset.$$
 trap 'rm -f $tmp-*' 0 1 2 3 15
 
 reset_type=--mixed
diff --git a/git-svnimport.perl b/git-svnimport.perl
index cb241d1..6e3a44a 100755
--- a/git-svnimport.perl
+++ b/git-svnimport.perl
@@ -96,8 +96,10 @@
 sub conn {
 	my $self = shift;
 	my $repo = $self->{'fullrep'};
-	my $s = SVN::Ra->new($repo);
-
+	my $auth = SVN::Core::auth_open ([SVN::Client::get_simple_provider,
+			  SVN::Client::get_ssl_server_trust_file_provider,
+			  SVN::Client::get_username_provider]);
+	my $s = SVN::Ra->new(url => $repo, auth => $auth);
 	die "SVN connection to $repo: $!\n" unless defined $s;
 	$self->{'svn'} = $s;
 	$self->{'repo'} = $repo;
diff --git a/git.c b/git.c
index e795ddb..5e7da74 100644
--- a/git.c
+++ b/git.c
@@ -244,6 +244,11 @@
 	for (i = 1; i < argc; i++) {
 		char *arg = argv[i];
 
+		if (!strcmp(arg, "help")) {
+			show_help = 1;
+			continue;
+		}
+
 		if (strncmp(arg, "--", 2))
 			break;
 
diff --git a/ident.c b/ident.c
index ac1c27f..0461b8b 100644
--- a/ident.c
+++ b/ident.c
@@ -140,7 +140,7 @@
 
 	/*
 	 * Copy the rest to the buffer, but avoid the special
-	 * characters '\n' '<' and '>' that act as delimeters on
+	 * characters '\n' '<' and '>' that act as delimiters on
 	 * a identification line
 	 */
 	for (i = 0; i < len; i++) {
diff --git a/ls-files.c b/ls-files.c
index 5e9ac71..cd87430 100644
--- a/ls-files.c
+++ b/ls-files.c
@@ -169,7 +169,7 @@
 			}
 			else {
 				/* match with FNM_PATHNAME:
-				 * exclude has base (baselen long) inplicitly
+				 * exclude has base (baselen long) implicitly
 				 * in front of it.
 				 */
 				int baselen = x->baselen;
diff --git a/pack-objects.c b/pack-objects.c
index caf3b6b..c3f2531 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -119,7 +119,7 @@
 		return offset;
 	e->offset = offset;
 	offset += write_object(f, e);
-	/* if we are delitified, write out its base object. */
+	/* if we are deltified, write out its base object. */
 	if (e->delta)
 		offset = write_one(f, e->delta, offset);
 	return offset;
diff --git a/repo-config.c b/repo-config.c
index b2569b7..c31e441 100644
--- a/repo-config.c
+++ b/repo-config.c
@@ -6,7 +6,7 @@
 
 static char* key = NULL;
 static char* value = NULL;
-static regex_t* regex = NULL;
+static regex_t* regexp = NULL;
 static int do_all = 0;
 static int do_not_match = 0;
 static int seen = 0;
@@ -14,9 +14,9 @@
 static int show_config(const char* key_, const char* value_)
 {
 	if (!strcmp(key_, key) &&
-			(regex == NULL ||
+			(regexp == NULL ||
 			 (do_not_match ^
-			  !regexec(regex, value_, 0, NULL, 0)))) {
+			  !regexec(regexp, value_, 0, NULL, 0)))) {
 		if (do_all) {
 			printf("%s\n", value_);
 			return 0;
@@ -46,8 +46,8 @@
 			regex_++;
 		}
 
-		regex = (regex_t*)malloc(sizeof(regex_t));
-		if (regcomp(regex, regex_, REG_EXTENDED)) {
+		regexp = (regex_t*)malloc(sizeof(regex_t));
+		if (regcomp(regexp, regex_, REG_EXTENDED)) {
 			fprintf(stderr, "Invalid pattern: %s\n", regex_);
 			return -1;
 		}
@@ -59,9 +59,9 @@
 		free(value);
 	}
 	free(key);
-	if (regex) {
-		regfree(regex);
-		free(regex);
+	if (regexp) {
+		regfree(regexp);
+		free(regexp);
 	}
 
 	if (do_all)
diff --git a/t/t3300-funny-names.sh b/t/t3300-funny-names.sh
index 6a85d67..72a93da 100755
--- a/t/t3300-funny-names.sh
+++ b/t/t3300-funny-names.sh
@@ -9,9 +9,6 @@
 tree, index, and tree objects.
 '
 
-# since FAT/NTFS does not allow tabs in filenames, skip this test
-test "$(uname -o 2>/dev/null)" = Cygwin && exit 0
-
 . ./test-lib.sh
 
 p0='no-funny'
@@ -27,6 +24,12 @@
 cat >"$p1" "$p0"
 echo 'Foo Bar Baz' >"$p2"
 
+test -f "$p1" && cmp "$p0" "$p1" || {
+	# since FAT/NTFS does not allow tabs in filenames, skip this test
+	say 'Your filesystem does not allow tabs in filenames, test skipped.'
+	test_done
+}
+
 echo 'just space
 no-funny' >expected
 test_expect_success 'git-ls-files no-funny' \
diff --git a/t/t4000-diff-format.sh b/t/t4000-diff-format.sh
index beb6d8f..67b9681 100755
--- a/t/t4000-diff-format.sh
+++ b/t/t4000-diff-format.sh
@@ -26,6 +26,14 @@
 test_expect_success \
     'git-diff-files -p after editing work tree.' \
     'git-diff-files -p >current'
+
+# that's as far as it comes
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+	say 'filemode disabled on the filesystem'
+	test_done
+fi
+
 cat >expected <<\EOF
 diff --git a/path0 b/path0
 old mode 100644
diff --git a/t/t4006-diff-mode.sh b/t/t4006-diff-mode.sh
index e2a67e9..8ad69d1 100755
--- a/t/t4006-diff-mode.sh
+++ b/t/t4006-diff-mode.sh
@@ -15,11 +15,21 @@
      tree=`git-write-tree` &&
      echo $tree'
 
-test_expect_success \
-    'chmod' \
-    'chmod +x rezrov &&
-     git-update-index rezrov &&
-     git-diff-index $tree >current'
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+	say 'filemode disabled on the filesystem, using update-index --chmod=+x'
+	test_expect_success \
+	    'git-update-index --chmod=+x' \
+	    'git-update-index rezrov &&
+	     git-update-index --chmod=+x rezrov &&
+	     git-diff-index $tree >current'
+else
+	test_expect_success \
+	    'chmod' \
+	    'chmod +x rezrov &&
+	     git-update-index rezrov &&
+	     git-diff-index $tree >current'
+fi
 
 _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/t/t4102-apply-rename.sh b/t/t4102-apply-rename.sh
index 0401d7b..fbb508d 100755
--- a/t/t4102-apply-rename.sh
+++ b/t/t4102-apply-rename.sh
@@ -31,7 +31,12 @@
 test_expect_success apply \
     'git-apply --index --stat --summary --apply test-patch'
 
-test_expect_success validate \
-    'test -f bar && ls -l bar | grep "^-..x......"'
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+	say 'filemode disabled on the filesystem'
+else
+	test_expect_success validate \
+	    'test -f bar && ls -l bar | grep "^-..x......"'
+fi
 
 test_done
diff --git a/t/t6001-rev-list-merge-order.sh b/t/t6001-rev-list-merge-order.sh
index 368b8d9..7724e8a 100755
--- a/t/t6001-rev-list-merge-order.sh
+++ b/t/t6001-rev-list-merge-order.sh
@@ -8,13 +8,6 @@
 . ./test-lib.sh
 . ../t6000lib.sh # t6xxx specific functions
 
-if git-rev-list --merge-order 2>&1 | grep 'OpenSSL not linked' >/dev/null
-then
-    test_expect_success 'skipping merge-order test' :
-    test_done
-    exit
-fi    
-
 # test-case specific test function
 check_adjacency()
 {
@@ -114,6 +107,13 @@
 19
 EOF
 
+if git-rev-list --merge-order HEAD 2>&1 | grep 'OpenSSL not linked' >/dev/null
+then
+    test_expect_success 'skipping merge-order test' :
+    test_done
+    exit
+fi
+
 normal_adjacency_count=$(git-rev-list HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
 merge_order_adjacency_count=$(git-rev-list --merge-order HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
 test_expect_success '--merge-order produces as many or fewer discontinuities' '[ $merge_order_adjacency_count -le $normal_adjacency_count ]'
diff --git a/t/test-lib.sh b/t/test-lib.sh
index a97d259..7534a76 100755
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -195,7 +195,7 @@
 test=trash
 rm -fr "$test"
 mkdir "$test"
-cd "$test"
+cd "$test" || error "Cannot setup test environment"
 "$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
 error "cannot run git init-db -- have you built things yet?"