GIT 0.99.9e v0.99.9e
authorJunio C Hamano <junkio@cox.net>
Mon, 7 Nov 2005 02:57:40 +0000 (18:57 -0800)
committerJunio C Hamano <junkio@cox.net>
Mon, 7 Nov 2005 02:57:40 +0000 (18:57 -0800)
Signed-off-by: Junio C Hamano <junkio@cox.net>
287 files changed:
.gitignore
Documentation/Makefile
Documentation/asciidoc.conf [new file with mode: 0644]
Documentation/cvs-migration.txt
Documentation/diff-format.txt
Documentation/diff-options.txt
Documentation/diffcore.txt
Documentation/git-add.txt
Documentation/git-am.txt [new file with mode: 0644]
Documentation/git-apply.txt
Documentation/git-applymbox.txt
Documentation/git-applypatch.txt
Documentation/git-archimport.txt
Documentation/git-bisect.txt
Documentation/git-branch.txt
Documentation/git-cat-file.txt
Documentation/git-check-ref-format.txt [new file with mode: 0644]
Documentation/git-checkout-index.txt
Documentation/git-checkout.txt
Documentation/git-cherry-pick.txt
Documentation/git-cherry.txt
Documentation/git-clone-pack.txt
Documentation/git-clone.txt
Documentation/git-commit-tree.txt
Documentation/git-commit.txt
Documentation/git-convert-objects.txt
Documentation/git-count-objects.txt
Documentation/git-cvsimport.txt
Documentation/git-daemon.txt
Documentation/git-diff-files.txt
Documentation/git-diff-helper.txt [deleted file]
Documentation/git-diff-index.txt
Documentation/git-diff-stages.txt
Documentation/git-diff-tree.txt
Documentation/git-diff.txt
Documentation/git-export.txt [deleted file]
Documentation/git-fetch-pack.txt
Documentation/git-fetch.txt
Documentation/git-fmt-merge-msg.txt [new file with mode: 0644]
Documentation/git-format-patch.txt
Documentation/git-fsck-objects.txt
Documentation/git-get-tar-commit-id.txt
Documentation/git-grep.txt
Documentation/git-hash-object.txt
Documentation/git-http-fetch.txt
Documentation/git-http-push.txt [new file with mode: 0644]
Documentation/git-index-pack.txt [new file with mode: 0644]
Documentation/git-init-db.txt
Documentation/git-local-fetch.txt
Documentation/git-log.txt
Documentation/git-ls-files.txt
Documentation/git-ls-remote.txt
Documentation/git-ls-tree.txt
Documentation/git-mailinfo.txt
Documentation/git-mailsplit.txt
Documentation/git-merge-base.txt
Documentation/git-merge-index.txt
Documentation/git-merge-one-file.txt
Documentation/git-merge.txt
Documentation/git-mktag.txt
Documentation/git-mv.txt [new file with mode: 0644]
Documentation/git-name-rev.txt [new file with mode: 0644]
Documentation/git-octopus.txt
Documentation/git-pack-objects.txt
Documentation/git-parse-remote.txt
Documentation/git-patch-id.txt
Documentation/git-peek-remote.txt
Documentation/git-prune-packed.txt
Documentation/git-prune.txt
Documentation/git-pull.txt
Documentation/git-push.txt
Documentation/git-read-tree.txt
Documentation/git-rebase.txt
Documentation/git-receive-pack.txt
Documentation/git-relink.txt
Documentation/git-rename.txt
Documentation/git-repack.txt
Documentation/git-request-pull.txt
Documentation/git-reset.txt
Documentation/git-resolve.txt
Documentation/git-rev-list.txt
Documentation/git-rev-parse.txt
Documentation/git-rev-tree.txt [deleted file]
Documentation/git-revert.txt
Documentation/git-send-email.txt
Documentation/git-send-pack.txt
Documentation/git-sh-setup.txt
Documentation/git-shell.txt [new file with mode: 0644]
Documentation/git-shortlog.txt
Documentation/git-show-branch.txt
Documentation/git-show-index.txt
Documentation/git-ssh-fetch.txt
Documentation/git-ssh-upload.txt
Documentation/git-status.txt
Documentation/git-stripspace.txt
Documentation/git-svnimport.txt [new file with mode: 0644]
Documentation/git-symbolic-ref.txt [new file with mode: 0644]
Documentation/git-tag.txt
Documentation/git-tar-tree.txt
Documentation/git-unpack-file.txt
Documentation/git-unpack-objects.txt
Documentation/git-update-index.txt
Documentation/git-update-ref.txt [new file with mode: 0644]
Documentation/git-update-server-info.txt
Documentation/git-upload-pack.txt
Documentation/git-var.txt
Documentation/git-verify-pack.txt
Documentation/git-verify-tag.txt
Documentation/git-whatchanged.txt
Documentation/git-write-tree.txt
Documentation/git.txt
Documentation/gitk.txt
Documentation/glossary.txt
Documentation/hooks.txt
Documentation/howto/using-topic-branches.txt
Documentation/install-webdoc.sh
Documentation/merge-pull-opts.txt [new file with mode: 0644]
Documentation/merge-strategies.txt [new file with mode: 0644]
Documentation/pull-fetch-param.txt
Documentation/repository-layout.txt
Documentation/technical/trivial-merge.txt
Documentation/tutorial.txt
INSTALL
Makefile
README
apply.c
arm/sha1.c [new file with mode: 0644]
arm/sha1.h [new file with mode: 0644]
arm/sha1_arm.S [new file with mode: 0644]
cache.h
check-ref-format.c [new file with mode: 0644]
checkout-index.c
clone-pack.c
cmd-rename.sh
commit-tree.c
commit.c
compat/mmap.c [new file with mode: 0644]
config.c [new file with mode: 0644]
connect.c
convert-objects.c
copy.c [new file with mode: 0644]
ctype.c [new file with mode: 0644]
daemon.c
date.c
debian/changelog
debian/control
debian/git-arch.files [new file with mode: 0644]
debian/git-cvs.files [new file with mode: 0644]
debian/git-doc.files [new file with mode: 0644]
debian/git-email.files [new file with mode: 0644]
debian/git-svn.files [new file with mode: 0644]
debian/rules
diff-files.c
diff-helper.c [deleted file]
diff-index.c
diff-stages.c
diff-tree.c
diff.c
diff.h
diffcore-rename.c
diffcore.h
entry.c
environment.c [new file with mode: 0644]
export.c [deleted file]
fetch-pack.c
fetch.c
fetch.h
fsck-objects.c
git-add.sh
git-am.sh [new file with mode: 0755]
git-applymbox.sh
git-applypatch.sh
git-archimport.perl
git-bisect.sh
git-branch.sh
git-checkout.sh
git-clone.sh
git-commit.sh
git-core.spec.in
git-count-objects.sh
git-cvsimport.perl
git-diff.sh
git-external-diff-script [deleted file]
git-fetch.sh
git-fmt-merge-msg.perl [new file with mode: 0755]
git-format-patch.sh
git-ls-remote.sh
git-merge-ours.sh [new file with mode: 0755]
git-merge-recursive.py
git-merge-resolve.sh
git-merge.sh
git-mv.perl [new file with mode: 0755]
git-octopus.sh
git-parse-remote.sh
git-prune.sh
git-pull.sh
git-push.sh
git-rebase.sh
git-rename.perl
git-repack.sh
git-reset.sh
git-resolve.sh
git-revert.sh
git-sh-setup.sh
git-shortlog.perl
git-status.sh
git-svnimport.perl [new file with mode: 0755]
git-tag.sh
git-verify-tag.sh
git.sh
gitMergeCommon.py
gitk
http-fetch.c
http-push.c [new file with mode: 0644]
ident.c
index-pack.c [new file with mode: 0644]
index.c
init-db.c
local-fetch.c
ls-files.c
ls-tree.c
mailinfo.c
mailsplit.c
mozilla-sha1/sha1.c
mozilla-sha1/sha1.h
name-rev.c [new file with mode: 0644]
pack-objects.c
patch-id.c
path.c
peek-remote.c
prune-packed.c
quote.c
quote.h
read-cache.c
read-tree.c
receive-pack.c
refs.c
rev-list.c
rev-parse.c
rev-tree.c [deleted file]
rsh.c
send-pack.c
server-info.c
setup.c
sha1_file.c
sha1_name.c
shell.c [new file with mode: 0644]
show-branch.c
ssh-fetch.c
symbolic-ref.c [new file with mode: 0644]
t/Makefile
t/diff-lib.sh
t/t0000-basic.sh
t/t1000-read-tree-m-3way.sh
t/t1200-tutorial.sh [new file with mode: 0644]
t/t3001-ls-files-others-exclude.sh
t/t3002-ls-files-dashpath.sh [new file with mode: 0755]
t/t3010-ls-files-killed-modified.sh [moved from t/t3010-ls-files-killed.sh with 55% similarity]
t/t3101-ls-tree-dirname.sh [new file with mode: 0644]
t/t3300-funny-names.sh [new file with mode: 0755]
t/t4000-diff-format.sh
t/t4001-diff-rename.sh
t/t4004-diff-rename-symlink.sh
t/t4005-diff-rename-2.sh
t/t4009-diff-rename-4.sh
t/t4102-apply-rename.sh
t/t5000-tar-tree.sh
t/t5300-pack-object.sh
t/t5400-send-pack.sh
t/t5500-fetch-pack.sh [new file with mode: 0644]
t/t5501-old-fetch-and-upload.sh [new file with mode: 0755]
t/t6001-rev-list-merge-order.sh
t/t6002-rev-list-bisect.sh
t/t6003-rev-list-topo-order.sh
t/test-lib.sh
tag.c
tag.h
tar-tree.c
templates/.gitignore
templates/Makefile
tree-diff.c [new file with mode: 0644]
update-index.c
update-ref.c [new file with mode: 0644]
upload-pack.c
usage.c
var.c
verify-pack.c

index 938669f..3edf6b4 100644 (file)
@@ -1,5 +1,6 @@
 git
 git-add
+git-am
 git-apply
 git-applymbox
 git-applypatch
@@ -7,9 +8,11 @@ git-archimport
 git-bisect
 git-branch
 git-cat-file
+git-check-ref-format
 git-checkout
 git-checkout-index
 git-cherry
+git-cherry-pick
 git-clone
 git-clone-pack
 git-commit
@@ -20,19 +23,20 @@ git-cvsimport
 git-daemon
 git-diff
 git-diff-files
-git-diff-helper
 git-diff-index
 git-diff-stages
 git-diff-tree
-git-export
 git-fetch
 git-fetch-pack
+git-findtags
+git-fmt-merge-msg
 git-format-patch
 git-fsck-objects
 git-get-tar-commit-id
 git-grep
 git-hash-object
 git-http-fetch
+git-index-pack
 git-init-db
 git-local-fetch
 git-log
@@ -46,10 +50,13 @@ git-merge-base
 git-merge-index
 git-merge-octopus
 git-merge-one-file
+git-merge-ours
 git-merge-recursive
 git-merge-resolve
 git-merge-stupid
 git-mktag
+git-name-rev
+git-mv
 git-octopus
 git-pack-objects
 git-parse-remote
@@ -70,11 +77,11 @@ git-reset
 git-resolve
 git-rev-list
 git-rev-parse
-git-rev-tree
 git-revert
 git-send-email
 git-send-pack
 git-sh-setup
+git-shell
 git-shortlog
 git-show-branch
 git-show-index
@@ -84,11 +91,14 @@ git-ssh-push
 git-ssh-upload
 git-status
 git-stripspace
+git-svnimport
+git-symbolic-ref
 git-tag
 git-tar-tree
 git-unpack-file
 git-unpack-objects
 git-update-index
+git-update-ref
 git-update-server-info
 git-upload-pack
 git-var
@@ -101,3 +111,6 @@ git-core-*/?*
 *.dsc
 *.deb
 git-core.spec
+*.exe
+libgit.a
+*.o
index 01fad8e..741f14c 100644 (file)
@@ -17,14 +17,14 @@ DOC_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES))
 DOC_MAN1=$(patsubst %.txt,%.1,$(MAN1_TXT))
 DOC_MAN7=$(patsubst %.txt,%.7,$(MAN7_TXT))
 
-prefix=$(HOME)
+prefix?=$(HOME)
 bin=$(prefix)/bin
 mandir=$(prefix)/man
 man1=$(mandir)/man1
 man7=$(mandir)/man7
 # DESTDIR=
 
-INSTALL=install
+INSTALL?=install
 
 #
 # Please note that there is a minor bug in asciidoc.
@@ -52,20 +52,28 @@ install: man
 # 'include' dependencies
 $(patsubst %.txt,%.1,$(wildcard git-diff-*.txt)): \
        diff-format.txt diff-options.txt
+$(patsubst %.txt,%.html,$(wildcard git-diff-*.txt)): \
+       diff-format.txt diff-options.txt
+
 $(patsubst %,%.1,git-fetch git-pull git-push): pull-fetch-param.txt
+$(patsubst %,%.html,git-fetch git-pull git-push): pull-fetch-param.txt
+
+$(patsubst %,%.1,git-merge git-pull): merge-pull-opts.txt
+$(patsubst %,%.html,git-merge git-pull): merge-pull-opts.txt
+
 git.7: ../README
 
 clean:
        rm -f *.xml *.html *.1 *.7 howto-index.txt howto/*.html
 
 %.html : %.txt
-       asciidoc -b xhtml11 -d manpage $<
+       asciidoc -b xhtml11 -d manpage -f asciidoc.conf $<
 
 %.1 %.7 : %.xml
        xmlto man $<
 
 %.xml : %.txt
-       asciidoc -b docbook -d manpage $<
+       asciidoc -b docbook -d manpage -f asciidoc.conf $<
 
 git.html: git.txt ../README
 
diff --git a/Documentation/asciidoc.conf b/Documentation/asciidoc.conf
new file mode 100644 (file)
index 0000000..fa0877d
--- /dev/null
@@ -0,0 +1,26 @@
+## gitlink: macro
+#
+# Usage: gitlink:command[manpage-section]
+#
+# Note, {0} is the manpage section, while {target} is the command.
+#
+# Show GIT link as: <command>(<section>); if section is defined, else just show
+# the command.
+
+[attributes]
+caret=^
+
+ifdef::backend-docbook[]
+[gitlink-inlinemacro]
+{0%{target}}
+{0#<citerefentry>}
+{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
+{0#</citerefentry>}
+endif::backend-docbook[]
+
+ifdef::backend-xhtml11[]
+[gitlink-inlinemacro]
+<a href="{target}.html">{target}{0?({0})}</a>
+endif::backend-xhtml11[]
+
+
index 390a723..57436f0 100644 (file)
@@ -1,6 +1,5 @@
-Git for CVS users
+git for CVS users
 =================
-v0.99.5, Aug 2005
 
 Ok, so you're a CVS user. That's ok, it's a treatable condition, and the
 first step to recovery is admitting you have a problem. The fact that
@@ -8,7 +7,7 @@ you are reading this file means that you may be well on that path
 already.
 
 The thing about CVS is that it absolutely sucks as a source control
-manager, and you'll thus be happy with almost anything else. Git,
+manager, and you'll thus be happy with almost anything else. git,
 however, may be a bit 'too' different (read: "good") for your taste, and
 does a lot of things differently. 
 
@@ -16,7 +15,7 @@ One particular suckage of CVS is very hard to work around: CVS is
 basically a tool for tracking 'file' history, while git is a tool for
 tracking 'project' history.  This sometimes causes problems if you are
 used to doing very strange things in CVS, in particular if you're doing
-things like making branches of just a subset of the project.  Git can't
+things like making branches of just a subset of the project.  git can't
 track that, since git never tracks things on the level of an individual
 file, only on the whole project level. 
 
@@ -24,7 +23,7 @@ The good news is that most people don't do that, and in fact most sane
 people think it's a bug in CVS that makes it tag (and check in changes)
 one file at a time.  So most projects you'll ever see will use CVS
 'as if' it was sane.  In which case you'll find it very easy indeed to
-move over to Git. 
+move over to git. 
 
 First off: this is not a git tutorial. See
 link:tutorial.html[Documentation/tutorial.txt] for how git
@@ -33,7 +32,7 @@ and notes on converting from CVS to git.
 
 Second: CVS has the notion of a "repository" as opposed to the thing
 that you're actually working in (your working directory, or your
-"checked out tree").  Git does not have that notion at all, and all git
+"checked out tree").  git does not have that notion at all, and all git
 working directories 'are' the repositories.  However, you can easily
 emulate the CVS model by having one special "global repository", which
 people can synchronize with.  See details later, but in the meantime
@@ -50,7 +49,7 @@ gone through the git tutorial, and generally familiarized yourself with
 how to commit stuff etc in git) is to create a git'ified version of your
 CVS archive.
 
-Happily, that's very easy indeed. Git will do it for you, although git
+Happily, that's very easy indeed. git will do it for you, although git
 will need the help of a program called "cvsps":
 
        http://www.cobite.com/cvsps/
@@ -136,7 +135,7 @@ technically possible, and there are at least two specialized scripts out
 there that can be used to get equivalent information (see the git
 mailing list archives for details). 
 
-Git has a couple of alternatives, though, that you may find sufficient
+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"). 
@@ -209,7 +208,7 @@ show anything for commits that do not touch this "if" statement.
 Also, in the original context, the same statement might have
 appeared at first in a different file and later the file was
 renamed to "a-file.c".  CVS annotate would not help you to go
-back across such a rename, but GIT would still help you in such
+back across such a rename, but git would still help you in such
 a situation.  For that, you can give the -C flag to
 git-diff-tree, like this:
 
@@ -229,10 +228,10 @@ does rename or copy would not show in the output, and if the
 "o-file.c", it would find the commit that changed the statement
 when it was in "o-file.c".
 
-[ BTW, the current versions of "git-diff-tree -C" is not eager
+NOTE: The current version of "git-diff-tree -C" is not eager
   enough to find copies, and it will miss the fact that a-file.c
   was created by copying o-file.c unless o-file.c was somehow
-  changed in the same commit.]
+  changed in the same commit.
 
 You can use the --pickaxe-all flag in addition to the -S flag.
 This causes the differences from all the files contained in
@@ -243,6 +242,6 @@ that contain this changed "if" statement:
                nitfol();
        }' --pickaxe-all
 
-[ Side note.  This option is called "--pickaxe-all" because -S
+NOTE: This option is called "--pickaxe-all" because -S
   option is internally called "pickaxe", a tool for software
-  archaeologists.]
+  archaeologists.
index 424e75a..d1d0d2d 100644 (file)
@@ -1,8 +1,8 @@
 The output format from "git-diff-index", "git-diff-tree" and
 "git-diff-files" are very similar.
 
-These commands all compare two sets of things; what are
-compared are different:
+These commands all compare two sets of things; what is 
+compared differs:
 
 git-diff-index <tree-ish>::
         compares the <tree-ish> and the files on the filesystem.
@@ -46,7 +46,7 @@ That is, from the left to the right:
 . path for "dst"; only exists for C or R.
 . an LF or a NUL when '-z' option is used, to terminate the record.
 
-<sha1> is shown as all 0's if new is a file on the filesystem
+<sha1> is shown as all 0's if a file is new on the filesystem
 and it is out of sync with the cache.
 
 Example:
@@ -55,6 +55,11 @@ Example:
 :100644 100644 5be4a4...... 000000...... M file.c
 ------------------------------------------------
 
+When `-z` option is not used, TAB, LF, and backslash characters
+in pathnames are represented as `\t`, `\n`, and `\\`,
+respectively.
+
+
 Generating patches with -p
 --------------------------
 
@@ -62,8 +67,7 @@ When "git-diff-index", "git-diff-tree", or "git-diff-files" are run
 with a '-p' option, they do not produce the output described above;
 instead they produce a patch file.
 
-The patch generation can be customized at two levels.  This
-customization also applies to "git-diff-helper".
+The patch generation can be customized at two levels.
 
 1. When the environment variable 'GIT_EXTERNAL_DIFF' is not set,
    these commands internally invoke "diff" like this:
@@ -92,7 +96,7 @@ For a path that is added, removed, or modified,
 where:
 
      <old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
-                     contents of <old|ne>,
+                     contents of <old|new>,
      <old|new>-hex:: are the 40-hexdigit SHA1 hashes,
      <old|new>-mode:: are the octal representation of the file modes.
 
@@ -107,7 +111,7 @@ For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
 parameter, <path>.
 
 
-Git specific extension to diff format
+git specific extension to diff format
 -------------------------------------
 
 What -p option produces is slightly different from the
@@ -122,12 +126,11 @@ The `a/` and `b/` filenames are the same unless rename/copy is
 involved.  Especially, even for a creation or a deletion,
 `/dev/null` is _not_ used in place of `a/` or `b/` filenames.
 +
-When rename/copy is involved, `file1` and `file2` shows the
+When rename/copy is involved, `file1` and `file2` show the
 name of the source file of the rename/copy and the name of
 the file that rename/copy produces, respectively.
 
-2.   It is followed by extended header lines that are one or
-     more of:
+2.   It is followed by one or more extended header lines:
 
        old mode <mode>
        new mode <mode>
@@ -139,3 +142,7 @@ the file that rename/copy produces, respectively.
        rename to <path>
        similarity index <number>
        dissimilarity index <number>
+       index <hash>..<hash> <mode>
+
+3.  TAB, LF, and backslash characters in pathnames are
+    represented as `\t`, `\n`, and `\\`, respectively.
index 48cf93c..32005b0 100644 (file)
@@ -4,19 +4,14 @@
 -u::
        Synonym for "-p".
 
--r::
-       Look recursively in subdirectories; this flag does not
-       mean anything to commands other than "git-diff-tree";
-       other diff commands always look at all the subdirectories.
-
 -z::
        \0 line termination on output
 
 --name-only::
        Show only names of changed files.
 
---name-only-z::
-       Same as --name-only, but terminate lines with NUL.
+--name-status::
+       Show only names and status of changed files.
 
 -B::
        Break complete rewrite changes into pairs of delete and create.
        Detect copies as well as renames.
 
 --find-copies-harder::
-       By default, -C option finds copies only if the original
-       file of the copy was modified in the same changeset for
-       performance reasons.  This flag makes the command
+       For performance reasons, by default, -C option finds copies only 
+       if the original file of the copy was modified in the same 
+       changeset.  This flag makes the command
        inspect unmodified files as candidates for the source of
        copy.  This is a very expensive operation for large
        projects, so use it with caution.
 
+-l<num>::
+       -M and -C options require O(n^2) processing time where n
+       is the number of potential rename/copy targets.  This
+       option prevents rename/copy detection from running if
+       the number of rename/copy targets exceeds the specified
+       number.
+
 -S<string>::
-       Look for differences that contains the change in <string>.
+       Look for differences that contain the change in <string>.
 
 --pickaxe-all::
        When -S finds a change, show all the changes in that
-       changeset, not just the files that contains the change
+       changeset, not just the files that contain the change
        in <string>.
 
 -O<orderfile>::
index 1908b92..cb4e562 100644 (file)
@@ -6,13 +6,12 @@ June 2005
 Introduction
 ------------
 
-The diff commands git-diff-index, git-diff-files, and
-git-diff-tree can be told to manipulate differences they find
-in unconventional ways before showing diff(1) output.  The
-manipulation is collectively called "diffcore transformation".
-This short note describes what they are and how to use them to
-produce diff outputs that are easier to understand than the
-conventional kind.
+The diff commands git-diff-index, git-diff-files, git-diff-tree, and
+git-diff-stages can be told to manipulate differences they find in
+unconventional ways before showing diff(1) output.  The manipulation
+is collectively called "diffcore transformation".  This short note
+describes what they are and how to use them to produce diff outputs
+that are easier to understand than the conventional kind.
 
 
 The chain of operation
@@ -29,7 +28,10 @@ files:
  - git-diff-files compares contents of the index file and the
    working directory;
 
- - git-diff-tree compares contents of two "tree" objects.
+ - git-diff-tree compares contents of two "tree" objects;
+
+ - git-diff-stages compares contents of blobs at two stages in an
+   unmerged index file.
 
 In all of these cases, the commands themselves compare
 corresponding paths in the two sets of files.  The result of
@@ -65,14 +67,23 @@ format sections of the manual for git-diff-\* commands) or
 diff-patch format.
 
 
-diffcore-pathspec
------------------
+diffcore-pathspec: For Ignoring Files Outside Our Consideration
+---------------------------------------------------------------
 
 The first transformation in the chain is diffcore-pathspec, and
 is controlled by giving the pathname parameters to the
 git-diff-* commands on the command line.  The pathspec is used
 to limit the world diff operates in.  It removes the filepairs
-outside the specified set of pathnames.
+outside the specified set of pathnames.  E.g. If the input set 
+of filepairs included:
+
+------------------------------------------------
+:100644 100644 bcd1234... 0123456... M junkfile
+------------------------------------------------
+
+but the command invocation was "git-diff-files myfile", then the
+junkfile entry would be removed from the list because only "myfile"
+is under consideration.
 
 Implementation note.  For performance reasons, git-diff-tree
 uses the pathname parameters on the command line to cull set of
@@ -80,8 +91,8 @@ filepairs it feeds the diffcore mechanism itself, and does not
 use diffcore-pathspec, but the end result is the same.
 
 
-diffcore-break
---------------
+diffcore-break: For Splitting Up "Complete Rewrites"
+----------------------------------------------------
 
 The second transformation in the chain is diffcore-break, and is
 controlled by the -B option to the git-diff-* commands.  This is
@@ -115,8 +126,8 @@ the original is used), and can be customized by giving a number
 after "-B" option (e.g. "-B75" to tell it to use 75%).
 
 
-diffcore-rename
----------------
+diffcore-rename: For Detection Renames and Copies
+-------------------------------------------------
 
 This transformation is used to detect renames and copies, and is
 controlled by the -M option (to detect renames) and the -C option
@@ -136,16 +147,16 @@ merges these filepairs and creates:
 :100644 100644 0123456... 0123456... R100 fileX file0
 ------------------------------------------------
 
-When the "-C" option is used, the original contents of modified
-files and contents of unchanged files are considered as
-candidates of the source files in rename/copy operation, in
-addition to the deleted files.  If the input were like these
-filepairs, that talk about a modified file fileY and a newly
+When the "-C" option is used, the original contents of modified files,
+and deleted files (and also unmodified files, if the
+"\--find-copies-harder" option is used) are considered as candidates
+of the source files in rename/copy operation.  If the input were like
+these filepairs, that talk about a modified file fileY and a newly
 created file file0:
 
 ------------------------------------------------
 :100644 100644 0123456... 1234567... M fileY
-:000000 100644 0000000... 0123456... A file0
+:000000 100644 0000000... bcd3456... A file0
 ------------------------------------------------
 
 the original contents of fileY and the resulting contents of
@@ -154,14 +165,14 @@ changed to:
 
 ------------------------------------------------
 :100644 100644 0123456... 1234567... M fileY
-:100644 100644 0123456... 0123456... C100 fileY file0
+:100644 100644 0123456... bcd3456... C100 fileY file0
 ------------------------------------------------
 
 In both rename and copy detection, the same "extent of changes"
 algorithm used in diffcore-break is used to determine if two
 files are "similar enough", and can be customized to use
-similarity score different from the default 50% by giving a
-number after "-M" or "-C" option (e.g. "-M8" to tell it to use
+a similarity score different from the default of 50% by giving a
+number after the "-M" or "-C" option (e.g. "-M8" to tell it to use
 8/10 = 80%).
 
 Note.  When the "-C" option is used with `\--find-copies-harder`
@@ -173,11 +184,11 @@ git-diff-\* commands can detect copies only if the file that was
 copied happened to have been modified in the same changeset.
 
 
-diffcore-merge-broken
----------------------
+diffcore-merge-broken: For Putting "Complete Rewrites" Back Together
+--------------------------------------------------------------------
 
 This transformation is used to merge filepairs broken by
-diffcore-break, and were not transformed into rename/copy by
+diffcore-break, and not transformed into rename/copy by
 diffcore-rename, back into a single modification.  This always
 runs when diffcore-break is used.
 
@@ -206,17 +217,17 @@ like these:
 * -B/60 (the same as above, since diffcore-break defaults to 50%).
 
 Note that earlier implementation left a broken pair as a separate
-creation and deletion patches.  This was unnecessary hack and
+creation and deletion patches.  This was an unnecessary hack and
 the latest implementation always merges all the broken pairs
 back into modifications, but the resulting patch output is
-formatted differently to still let the reviewing easier for such
+formatted differently for easier review in case of such
 a complete rewrite by showing the entire contents of old version
 prefixed with '-', followed by the entire contents of new
 version prefixed with '+'.
 
 
-diffcore-pickaxe
-----------------
+diffcore-pickaxe: For Detecting Addition/Deletion of Specified String
+---------------------------------------------------------------------
 
 This transformation is used to find filepairs that represent
 changes that touch a specified string, and is controlled by the
@@ -230,7 +241,7 @@ string appeared in this changeset".  It also checks for the
 opposite case that loses the specified string.
 
 When `\--pickaxe-all` is not in effect, diffcore-pickaxe leaves
-only such filepairs that touches the specified string in its
+only such filepairs that touch the specified string in its
 output.  When `\--pickaxe-all` is used, diffcore-pickaxe leaves all
 filepairs intact if there is such a filepair, or makes the
 output empty otherwise.  The latter behaviour is designed to
@@ -238,27 +249,27 @@ make reviewing of the changes in the context of the whole
 changeset easier.
 
 
-diffcore-order
---------------
+diffcore-order: For Sorting the Output Based on Filenames
+---------------------------------------------------------
 
 This is used to reorder the filepairs according to the user's
 (or project's) taste, and is controlled by the -O option to the
 git-diff-* commands.
 
-This takes a text file each of whose line is a shell glob
+This takes a text file each of whose lines is a shell glob
 pattern.  Filepairs that match a glob pattern on an earlier line
 in the file are output before ones that match a later line, and
 filepairs that do not match any glob pattern are output last.
 
-As an example, typical orderfile for the core GIT probably
+As an example, a typical orderfile for the core git probably
 would look like this:
 
 ------------------------------------------------
-    README
-    Makefile
-    Documentation
-    *.h
-    *.c
-    t
+README
+Makefile
+Documentation
+*.h
+*.c
+t
 ------------------------------------------------
 
index beb4500..4cae412 100644 (file)
@@ -3,21 +3,63 @@ git-add(1)
 
 NAME
 ----
-git-add - Add files to the cache.
+git-add - Add files to the index file.
 
 SYNOPSIS
 --------
-'git-add' <file>...
+'git-add' [-n] [-v] <file>...
 
 DESCRIPTION
 -----------
-A simple wrapper to git-update-index to add files to the cache for people used
-to do "cvs add".
+A simple wrapper for git-update-index to add files to the index,
+for people used to do "cvs add".
+
 
 OPTIONS
 -------
 <file>...::
-       Files to add to the cache.
+       Files to add to the index.
+
+-n::
+        Don't actually add the file(s), just show if they exist.
+
+-v::
+        Be verbose.
+
+
+DISCUSSION
+----------
+
+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
+are not ignored/excluded by `$GIT_DIR/info/exclude` file or
+`.gitignore` file in each directory.  This means two things:
+
+. You can put the name of a directory on the command line, and
+  the command will add all files in it and its subdirectories;
+
+. Giving the name of a file that is already in index does not
+  run `git-update-index` on that path.
+
+
+EXAMPLES
+--------
+git-add Documentation/\\*.txt::
+
+       Adds all `\*.txt` files that are not in the index under
+       `Documentation` directory and its subdirectories.
++
+Note that the asterisk `\*` is quoted from the shell in this
+example; this lets the command to include the files from
+subdirectories of `Documentation/` directory.
+
+git-add git-*.sh::
+
+       Adds all git-*.sh scripts that are not in the index.
+       Because this example lets shell expand the asterisk
+       (i.e. you are listing the files explicitly), it does not
+       add `subdir/git-foo.sh` to the index.
+
 
 Author
 ------
@@ -29,5 +71,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
new file mode 100644 (file)
index 0000000..e4df4a4
--- /dev/null
@@ -0,0 +1,88 @@
+git-am(1)
+=========
+
+NAME
+----
+git-am - Apply a series of patches in a mailbox
+
+
+SYNOPSIS
+--------
+'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--3way] <mbox>...
+'git-am' [--skip]
+
+DESCRIPTION
+-----------
+Splits mail messages in a mailbox into commit log message,
+authorship information and patches, and applies them to the
+current branch.
+
+OPTIONS
+-------
+--signoff::
+       Add `Signed-off-by:` line to the commit message, using
+       the committer identity of yourself.
+
+--dotest=<dir>::
+       Instead of `.dotest` directory, use <dir> as a working
+       area to store extracted patches.
+
+--utf8, --keep::
+       Pass `--utf8` and `--keep` flags to `git-mailinfo` (see
+       gitlink:git-mailinfo[1]).
+
+--3way::
+       When the patch does not apply cleanly, fall back on
+       3-way merge, if the patch records the identity of blobs
+       it is supposed to apply to, and we have those blobs
+       locally.
+
+--skip::
+       Skip the current patch.  This is only meaningful when
+       restarting an aborted patch.
+
+--interactive::
+       Run interactively, just like git-applymbox.
+
+
+DISCUSSION
+----------
+
+When initially invoking it, you give it names of the mailboxes
+to crunch.  Upon seeing the first patch that does not apply, it
+aborts in the middle, just like 'git-applymbox' does.  You can
+recover from this in one of two ways:
+
+. skip the current one by re-running the command with '--skip'
+  option.
+
+. hand resolve the conflict in the working directory, run 'git
+  diff HEAD' to extract the merge result into a patch form and
+  replacing the patch in .dotest/patch file.  After doing this,
+  run `git-reset --hard HEAD` to bring the working tree to the
+  state before half-applying the patch, then re-run the command
+  without any options.
+
+The command refuses to process new mailboxes while `.dotest`
+directory exists, so if you decide to start over from scratch,
+run `rm -f .dotest` before running the command with mailbox
+names.
+
+
+SEE ALSO
+--------
+gitlink:git-applymbox[1], gitlink:git-applypatch[1].
+
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+Documentation
+--------------
+Documentation by Petr Baudis, Junio C Hamano and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
index 391d6f5..eb8f906 100644 (file)
@@ -1,19 +1,18 @@
 git-apply(1)
 ============
-v0.1, June 2005
 
 NAME
 ----
-git-apply - Apply patch on a GIT index file and a work tree
+git-apply - Apply patch on a git index file and a work tree
 
 
 SYNOPSIS
 --------
-'git-apply' [--no-merge] [--stat] [--summary] [--check] [--index] [--show-files] [--apply] [<patch>...]
+'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--index-info] [-z] [<patch>...]
 
 DESCRIPTION
 -----------
-Reads supplied diff output and applies it on a GIT index file
+Reads supplied diff output and applies it on a git index file
 and a work tree.
 
 OPTIONS
@@ -22,15 +21,16 @@ OPTIONS
        The files to read patch from.  '-' can be used to read
        from the standard input.
 
---no-merge::
-       The default mode of operation is the merge behaviour
-       which is not implemented yet.  This flag explicitly
-       tells the program not to use the merge behaviour.
-
 --stat::
        Instead of applying the patch, output diffstat for the
        input.  Turns off "apply".
 
+--numstat::
+       Similar to \--stat, but shows number of added and
+       deleted lines in decimal notation and pathname without
+       abbreviation, to make it more machine friendly.  Turns
+       off "apply".
+
 --summary::
        Instead of applying the patch, output a condensed
        summary of information obtained from git diff extended
@@ -51,8 +51,19 @@ OPTIONS
        up-to-date, it is flagged as an error.  This flag also
        causes the index file to be updated.
 
---show-files::
-       Show summary of files that are affected by the patch.
+--index-info::
+       Newer git-diff output has embedded 'index information'
+       for each blob to help identify the original version that
+       the patch applies to.  When this flag is given, and if
+       the original version of the blob is available locally,
+       outputs information about them to the standard output.
+
+-z::
+       When showing the index information, do not munge paths,
+       but use NUL terminated machine readable format.  Without
+       this flag, the pathnames output will have TAB, LF, and
+       backslash characters replaced with `\t`, `\n`, and `\\`,
+       respectively.
 
 --apply::
        If you use any of the options marked ``Turns off
@@ -72,5 +83,5 @@ Documentation by Junio C Hamano
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index f6d857c..f74c6a4 100644 (file)
@@ -8,7 +8,7 @@ git-applymbox - Apply a series of patches in a mailbox
 
 SYNOPSIS
 --------
-'git-applymbox' [-u] [-k] [-q] ( -c .dotest/<num> | <mbox> ) [ <signoff> ]
+'git-applymbox' [-u] [-k] [-q] [-m] ( -c .dotest/<num> | <mbox> ) [ <signoff> ]
 
 DESCRIPTION
 -----------
@@ -22,7 +22,7 @@ OPTIONS
 -q::
        Apply patches interactively.  The user will be given
        opportunity to edit the log message and the patch before
-       attempting to apply patch in each e-mail message.
+       attempting to apply it.
 
 -k::
        Usually the program 'cleans up' the Subject: header line
@@ -33,6 +33,14 @@ OPTIONS
        munging, and is most useful when used to read back 'git
        format-patch --mbox' output.
 
+-m::
+       Patches are applied with `git-apply` command, and unless
+       it cleanly applies without fuzz, the processing fails.
+       With this flag, if a tree that the patch applies cleanly
+       is found in a repository, the patch is applied to the
+       tree and then a 3-way merge between the resulting tree
+       and the current tree.
+
 -u::
        By default, the commit log message, author name and
        author email are taken from the e-mail without any
@@ -67,7 +75,7 @@ OPTIONS
 
 SEE ALSO
 --------
-link:git-applypatch.html[git-applypatch].
+gitlink:git-am[1], gitlink:git-applypatch[1].
 
 
 Author
@@ -80,5 +88,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index b894632..5b9037d 100644 (file)
@@ -30,7 +30,7 @@ OPTIONS
 <patch>::
        The patch to apply.
 
-<info>:
+<info>::
        Author and subject information extracted from e-mail,
        used on "author" line and as the first line of the
        commit log message.
@@ -46,5 +46,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index fa0779b..fcda012 100644 (file)
@@ -3,7 +3,7 @@ git-archimport(1)
 
 NAME
 ----
-git-archimport - Import an Arch repository into GIT
+git-archimport - Import an Arch repository into git
 
 
 SYNOPSIS
@@ -20,31 +20,34 @@ 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). 
 
 The script expects you to provide the key roots where it can start the import 
-from an 'initial import' or 'tag' type of Arch commit. It will follow and import 
-new branches within the provided roots. 
+from an 'initial import' or 'tag' type of Arch commit. It will follow and 
+import new branches within the provided roots. 
 
 It expects to be dealing with one project only. If it sees 
-branches that have different roots, it will refuse to run. In that case, edit your
-<archive/branch> parameters to define clearly the scope of the import. 
+branches that have different roots, it will refuse to run. In that case, 
+edit your <archive/branch> parameters to define clearly the scope of the 
+import. 
 
-`git-archimport` uses `tla` extensively in the background to access the Arch repository.
+`git-archimport` uses `tla` extensively in the background to access the 
+Arch repository.
 Make sure you have a recent version of `tla` available in the path. `tla` must
 know about the repositories you pass to `git-archimport`. 
 
 For the initial import `git-archimport` expects to find itself in an empty 
 directory. To follow the development of a project that uses Arch, rerun 
-`git-archimport` with the same parameters as the initial import to perform incremental imports.
+`git-archimport` with the same parameters as the initial import to perform 
+incremental imports.
 
 MERGES
 ------
-Patch merge data from Arch is used to mark merges in GIT as well. GIT 
+Patch merge data from Arch is used to mark merges in git as well. git 
 does not care much about tracking patches, and only considers a merge when a
 branch incorporates all the commits since the point they forked. The end result
-is that GIT will have a good idea of how far branches have diverged. So the 
+is that git will have a good idea of how far branches have diverged. So the 
 import process does lose some patch-trading metadata.
 
 Fortunately, when you try and merge branches imported from Arch, 
-GIT will find a good merge base, and it has a good chance of identifying 
+git will find a good merge base, and it has a good chance of identifying 
 patches that have been traded out-of-sequence between the branches. 
 
 OPTIONS
@@ -78,5 +81,5 @@ Documentation by Junio C Hamano, Martin Langhoff and the git-list <git@vger.kern
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index f10df53..39fa665 100644 (file)
@@ -76,7 +76,7 @@ During the bisection process, you can say
 
 to see the currently remaining suspects in `gitk`.
 
-The good/bad you told the command is logged, and `git bisect
+The good/bad input is logged, and `git bisect
 log` shows what you have done so far.  You can truncate its
 output somewhere and save it in a file, and run
 
@@ -91,10 +91,10 @@ Author
 Written by Linus Torvalds <torvalds@osdl.org>
 
 Documentation
---------------
+-------------
 Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 914c0e6..a7121a4 100644 (file)
@@ -23,7 +23,7 @@ OPTIONS
        The name of the branch to create.
 
 start-point::
-       Where to make the branch; defaults to HEAD.
+       Where to create the branch; defaults to HEAD.
 
 Author
 ------
@@ -35,5 +35,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 2131a29..ab4dcae 100644 (file)
@@ -1,6 +1,5 @@
 git-cat-file(1)
 ===============
-v0.1, May 2005
 
 NAME
 ----
@@ -32,7 +31,7 @@ OPTIONS
 
 <type>::
        Typically this matches the real type of <object> but asking
-       for a type that can trivially dereferenced from the given
+       for a type that can trivially be dereferenced from the given
        <object> is also permitted.  An example is to ask for a
        "tree" with <object> being a commit object that contains it,
        or to ask for a "blob" with <object> being a tag object that
@@ -57,5 +56,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
new file mode 100644 (file)
index 0000000..636e951
--- /dev/null
@@ -0,0 +1,50 @@
+git-check-ref-format(1)
+=======================
+
+NAME
+----
+git-check-ref-format - Make sure ref name is well formed.
+
+SYNOPSIS
+--------
+'git-check-ref-format' <refname>
+
+DESCRIPTION
+-----------
+Checks if a given 'refname' is acceptable, and exits non-zero if
+it is not.
+
+A reference is used in git to specify branches and tags.  A
+branch head is stored under `$GIT_DIR/refs/heads` directory, and
+a tag is stored under `$GIT_DIR/refs/tags` directory.  git
+imposes the following rules on how refs are named:
+
+. It could be named hierarchically (i.e. separated with slash
+  `/`), but each of its component cannot begin with a dot `.`;
+
+. It cannot have two consecutive dots `..` anywhere;
+
+. It cannot have ASCII control character (i.e. bytes whose
+  values are lower than \040, or \177 `DEL`), space, tilde `~`,
+  caret `{caret}`, or colon `:` anywhere;
+
+. It cannot end with a slash `/`.
+
+These rules makes it easy for shell script based tools to parse
+refnames, and also avoids ambiguities in certain refname
+expressions (see gitlink:git-rev-parse[1]).  Namely:
+
+. double-dot `..` are often used as in `ref1..ref2`, and in some
+  context this notation means `{caret}ref1 ref2` (i.e. not in
+  ref1 and in ref2).
+
+. tilde `~` and caret `{caret}` are used to introduce postfix
+  'nth parent' and 'peel onion' operation.
+
+. colon `:` is used as in `srcref:dstref` to mean "use srcref\'s
+  value and store it in dstref" in fetch and push operations.
+
+
+GIT
+---
+Part of the gitlink:git[7] suite
index bb15214..589dc9a 100644 (file)
@@ -1,6 +1,5 @@
 git-checkout-index(1)
 =====================
-v0.1, May 2005
 
 NAME
 ----
@@ -30,8 +29,8 @@ OPTIONS
        forces overwrite of existing files
 
 -a::
-       checks out all files in the cache (will then continue to
-       process listed files).
+       checks out all files in the cache.  Cannot be used
+       together with explicit filenames.
 
 -n::
        Don't checkout new files, only refresh files already checked
@@ -44,15 +43,9 @@ OPTIONS
 --::
        Do not interpret any more arguments as options.
 
-Note that the order of the flags matters:
+The order of the flags used to matter, but not anymore.
 
-     git-checkout-index -a -f file.c
-
-will first check out all files listed in the cache (but not overwrite
-any old ones), and then force-checkout `file.c` a second time (ie that
-one *will* overwrite any old contents with the same filename).
-
-Also, just doing "git-checkout-index" does nothing. You probably meant
+Just doing "git-checkout-index" does nothing. You probably meant
 "git-checkout-index -a". And if you want to force it, you want
 "git-checkout-index -f -a".
 
@@ -78,12 +71,12 @@ scripting!).
 The prefix ability basically makes it trivial to use
 git-checkout-index as an "export as tree" function. Just read the
 desired tree into the index, and do a
-  
+
         git-checkout-index --prefix=git-export-dir/ -a
-  
+
 and git-checkout-index will "export" the cache into the specified
 directory.
-  
+
 NOTE The final "/" is important. The exported name is literally just
 prefixed with the specified string, so you can also do something like
 
@@ -102,5 +95,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 3bc7743..b7bb1b4 100644 (file)
@@ -7,12 +7,24 @@ git-checkout - Checkout and switch to a branch.
 
 SYNOPSIS
 --------
-'git-checkout' [-f] [-b <new_branch>] [<branch>]
+'git-checkout' [-f] [-b <new_branch>] [<branch>] [<paths>...]
 
 DESCRIPTION
 -----------
-Updates the index and working tree to reflect the specified branch,
-<branch>. Updates HEAD to be <branch> or, if specified, <new_branch>.
+
+When <paths> are not given, this command switches branches, by
+updating the index and working tree to reflect the specified
+branch, <branch>, and updating HEAD to be <branch> or, if
+specified, <new_branch>.
+
+When <paths> are given, this command does *not* switch
+branches.  It updates the named paths in the working tree from
+the index file (i.e. it runs `git-checkout-index -f -u`).  In
+this case, `-f` and `-b` options are meaningless and giving
+either of them results in an error.  <branch> argument can be
+used to specify a specific tree-ish to update the index for the
+given paths before updating the working tree.
+
 
 OPTIONS
 -------
@@ -29,6 +41,30 @@ OPTIONS
        Branch to checkout; may be any object ID that resolves to a
        commit. Defaults to HEAD.
 
+
+EXAMPLE
+-------
+
+The following sequence checks out the `master` branch, reverts
+the `Makefile` to two revisions back, deletes hello.c by
+mistake, and gets it back from the index.
+
+------------
+$ git checkout master
+$ git checkout master~2 Makefile
+$ rm -f hello.c
+$ git checkout hello.c
+------------
+
+If you have an unfortunate branch that is named `hello.c`, the
+last step above would be confused as an instruction to switch to
+that branch.  You should instead write:
+
+------------
+$ git checkout -- hello.c
+------------
+
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org>
@@ -39,5 +75,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 38a4875..26e0467 100644 (file)
@@ -1,6 +1,5 @@
 git-cherry-pick(1)
 ==================
-v0.99.5 Aug 2005
 
 NAME
 ----
@@ -22,7 +21,7 @@ OPTIONS
        Commit to cherry-pick.
 
 -r::
-       Usuall the command appends which commit was
+       Usually the command appends which commit was
        cherry-picked after the original commit message when
        making a commit.  This option, '--replay', causes it to
        use the original commit message intact.  This is useful
@@ -38,9 +37,9 @@ OPTIONS
        option is used, your working tree does not have to match
        the HEAD commit.  The cherry-pick is done against the
        beginning state of your working tree.
-
-       This is useful when cherry-picking more than one commits'
-       effect to your working tree in a row.
++
+This is useful when cherry-picking more than one commits'
+effect to your working tree in a row.
 
 
 Author
@@ -53,5 +52,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 9ff7bc2..af87966 100644 (file)
@@ -38,5 +38,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 0dc89a9..cfc7b62 100644 (file)
@@ -1,6 +1,5 @@
 git-clone-pack(1)
 =================
-v0.1, July 2005
 
 NAME
 ----
@@ -9,27 +8,23 @@ git-clone-pack - Clones a repository by receiving packed objects.
 
 SYNOPSIS
 --------
-'git-clone-pack' [-q] [--exec=<git-upload-pack>] [<host>:]<directory> [<head>...]
+'git-clone-pack' [--exec=<git-upload-pack>] [<host>:]<directory> [<head>...]
 
 DESCRIPTION
 -----------
 Clones a repository into the current repository by invoking
 'git-upload-pack', possibly on the remote host via ssh, in
-the named repository, and invoking 'git-unpack-objects' locally
-to receive the pack.
+the named repository, and stores the sent pack in the local
+repository.
 
 OPTIONS
 -------
--q::
-       Pass '-q' flag to 'git-unpack-objects'; this makes the
-       cloning process less verbose.
-
 --exec=<git-upload-pack>::
        Use this to specify the path to 'git-upload-pack' on the
-       remote side, if is not found on your $PATH.
-       Installations of sshd ignores the user's environment
+       remote side, if it is not found on your $PATH.
+       Installations of sshd ignore the user's environment
        setup scripts for login shells (e.g. .bash_profile) and
-       your privately installed GIT may not be found on the system
+       your privately installed git may not be found on the system
        default $PATH.  Another workaround suggested is to set
        up your $PATH in ".bashrc", but this flag is for people
        who do not want to pay the overhead for non-interactive
@@ -61,5 +56,5 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index cff87ea..fefd298 100644 (file)
@@ -1,6 +1,5 @@
 git-clone(1)
 ============
-v0.1, July 2005
 
 NAME
 ----
@@ -9,14 +8,30 @@ git-clone - Clones a repository.
 
 SYNOPSIS
 --------
-'git clone' [-l] [-u <upload-pack>] [-q] <repository> <directory>
+'git-clone' [-l [-s]] [-q] [-n] [-u <upload-pack>] <repository> <directory>
 
 DESCRIPTION
 -----------
-Clones a repository into a newly created directory.
+Clones a repository into a newly created directory.  All remote
+branch heads are copied under `$GIT_DIR/refs/heads/`, except
+that the remote `master` is also copied to `origin` branch.
+
+In addition, `$GIT_DIR/remotes/origin` file is set up to have
+this line:
+
+       Pull: master:origin
+
+This is to help the typical workflow of working off of the
+remote `master` branch.  Every time `git pull` without argument
+is run, the progress on the remote `master` branch is tracked by
+copying it into the local `origin` branch, and merged into the
+branch you are currently working on.  Remote branches other than
+`master` are also added there to be tracked.
+
 
 OPTIONS
 -------
+--local::
 -l::
        When the repository to clone from is on a local machine,
        this flag bypasses normal "git aware" transport
@@ -25,10 +40,23 @@ OPTIONS
        The files under .git/objects/ directory are hardlinked
        to save space when possible.
 
+--shared::
+-s::
+       When the repository to clone is on the local machine,
+       instead of using hard links, automatically setup
+       .git/objects/info/alternatives to share the objects
+       with the source repository.  The resulting repository
+       starts out without any object of its own.
+
+--quiet::
 -q::
        Operate quietly.  This flag is passed to "rsync" and
        "git-clone-pack" commands when given.
 
+-n::
+       No checkout of HEAD is performed after the clone is complete.
+
+--upload-pack <upload-pack>::
 -u <upload-pack>::
        When given, and the repository to clone from is handled
        by 'git-clone-pack', '--exec=<upload-pack>' is passed to
@@ -37,14 +65,13 @@ OPTIONS
 
 <repository>::
        The (possibly remote) repository to clone from.  It can
-       be an "rsync://host/dir" URL, an "http://host/dir" URL,
-       or [<host>:]/dir notation that is used by 'git-clone-pack'.
-       Currently http transport is not supported.
+       be any URL git-fetch supports.
 
 <directory>::
        The name of a new directory to be cloned into.  It is an
        error to specify an existing directory.
 
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org>
@@ -56,5 +83,5 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 5536668..b64cd6a 100644 (file)
@@ -1,6 +1,5 @@
 git-commit-tree(1)
 ==================
-v0.1, May 2005
 
 NAME
 ----
@@ -36,7 +35,7 @@ OPTIONS
        An existing tree object
 
 -p <parent commit>::
-       Each '-p' indicates the id of a parent commit object.
+       Each '-p' indicates the id of a parent commit object.
        
 
 Commit Information
@@ -49,8 +48,8 @@ A commit encapsulates:
 - committer name and email and the commit time.
 
 If not provided, "git-commit-tree" uses your name, hostname and domain to
-provide author and committer info. This can be overridden using the
-following environment variables.
+provide author and committer info. This can be overridden by
+either `.git/config` file, or using the following environment variables.
 
        GIT_AUTHOR_NAME
        GIT_AUTHOR_EMAIL
@@ -58,11 +57,18 @@ following environment variables.
        GIT_COMMITTER_NAME
        GIT_COMMITTER_EMAIL
 
-(nb <,> and '\n's are stripped)
+(nb "<", ">" and "\n"s are stripped)
+
+In `.git/config` file, the following items are used:
+
+       [user]
+               name = "Your Name"
+               email = "your@email.address.xz"
 
 A commit comment is read from stdin (max 999 chars). If a changelog
-entry is not provided via '<' redirection, "git-commit-tree" will just wait
-for one to be entered and terminated with ^D
+entry is not provided via "<" redirection, "git-commit-tree" will just wait
+for one to be entered and terminated with ^D.
+
 
 Diagnostics
 -----------
@@ -75,7 +81,7 @@ Your sysadmin must hate you!::
 
 See Also
 --------
-link:git-write-tree.html[git-write-tree]
+gitlink:git-write-tree[1]
 
 
 Author
@@ -88,5 +94,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index afcf6ef..1edc278 100644 (file)
@@ -1,6 +1,5 @@
 git-commit(1)
 =============
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -8,7 +7,7 @@ git-commit - Record your changes
 
 SYNOPSIS
 --------
-'git commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] [-e] <file>...
+'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] [-e] <file>...
 
 DESCRIPTION
 -----------
@@ -69,4 +68,4 @@ Junio C Hamano <junkio@cox.net>
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index b1bc1c5..b1220c0 100644 (file)
@@ -1,10 +1,9 @@
 git-convert-objects(1)
 ======================
-v0.1, May 2005
 
 NAME
 ----
-git-convert-objects - Converts old-style GIT repository
+git-convert-objects - Converts old-style git repository
 
 
 SYNOPSIS
@@ -13,7 +12,7 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Converts old-style GIT repository to the latest format
+Converts old-style git repository to the latest format
 
 
 Author
@@ -26,5 +25,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 824852c..36888d9 100644 (file)
@@ -24,5 +24,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index edf9521..4b62256 100644 (file)
@@ -1,6 +1,5 @@
 git-cvsimport(1)
 ================
-v0.1, July 2005
 
 NAME
 ----
@@ -11,7 +10,7 @@ SYNOPSIS
 --------
 'git-cvsimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ]
                        [ -d <CVSROOT> ] [ -p <options-for-cvsps> ]
-                       [ -C <GIT_repository> ] [ -i ] [ -k ]
+                       [ -C <git_repository> ] [ -i ] [ -P <file> ] [ -k ]
                        [ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ]
 
 
@@ -31,7 +30,7 @@ OPTIONS
        are supported.
 
 -C <target-dir>::
-        The GIT repository to import to.  If the directory doesn't
+        The git repository to import to.  If the directory doesn't
         exist, it will be created.  Default is the current directory.
 
 -i::
@@ -51,15 +50,19 @@ OPTIONS
        The 'HEAD' branch from CVS is imported to the 'origin' branch within
        the git repository, as 'HEAD' already has a special meaning for git.
        Use this option if you want to import into a different branch.
-
-       Use '-o master' for continuing an import that was initially done by
-       the old cvs2git tool.
++
+Use '-o master' for continuing an import that was initially done by
+the old cvs2git tool.
 
 -p <options-for-cvsps>::
        Additional options for cvsps.
        The options '-u' and '-A' are implicit and should not be used here.
++
+If you need to pass multiple options, separate them with a comma.
 
-       If you need to pass multiple options, separate them with a comma.
+-P:: <cvsps-output-file>
+       Instead of calling cvsps, read the provided cvsps output file. Useful
+       for debugging or when cvsps is being handled outside cvsimport.
 
 -m::    
        Attempt to detect merges based on the commit message. This option
@@ -105,5 +108,5 @@ Documentation by Matthias Urlichs <smurf@smurf.noris.de>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 5fc45f2..67c5f22 100644 (file)
@@ -3,11 +3,12 @@ git-daemon(1)
 
 NAME
 ----
-git-daemon - A really simple server for GIT repositories.
+git-daemon - A really simple server for git repositories.
 
 SYNOPSIS
 --------
-'git-daemon' [--inetd | --port=n]
+'git-daemon' [--verbose] [--syslog] [--inetd | --port=n] [--export-all]
+             [--timeout=n] [--init-timeout=n] [directory...]
 
 DESCRIPTION
 -----------
@@ -20,18 +21,42 @@ what directory to upload, and it verifies that the directory is ok.
 
 It verifies that the directory has the magic file "git-daemon-export-ok", and
 it will refuse to export any git directory that hasn't explicitly been marked
-for export this way.
+for export this way (unless the '--export-all' parameter is specified). If you
+pass some directory paths as 'git-daemon' arguments, you can further restrict
+the offers to a whitelist comprising of those.
 
 This is ideally suited for read-only updates, ie pulling from git repositories.
 
 OPTIONS
 -------
+--export-all::
+       Allow pulling from all directories that look like GIT repositories
+       (have the 'objects' subdirectory and a 'HEAD' file), even if they
+       do not have the 'git-daemon-export-ok' file.
+
 --inetd::
        Have the server run as an inetd service.
 
 --port::
        Listen on an alternative port.
 
+--init-timeout::
+       Timeout between the moment the connection is established and the
+       client request is received (typically a rather low value, since
+       that should be basically immediate).
+
+--timeout::
+       Timeout for specific client sub-requests. This includes the time
+       it takes for the server to process the sub-request and time spent
+       waiting for next client's request.
+
+--syslog::
+       Log to syslog instead of stderr. Note that this option does not imply
+       --verbose, thus by default only error conditions will be logged.
+
+--verbose::
+       Log details about the incoming connections and requested files.
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org> and YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
@@ -42,5 +67,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 72c7a71..e387388 100644 (file)
@@ -1,6 +1,5 @@
 git-diff-files(1)
 =================
-v0.1, May 2005
 
 NAME
 ----
@@ -40,5 +39,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-diff-helper.txt b/Documentation/git-diff-helper.txt
deleted file mode 100644 (file)
index 26f5f39..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-git-diff-helper(1)
-==================
-v0.1, May 2005
-
-NAME
-----
-git-diff-helper - Generates patch format output for git-diff-*
-
-
-SYNOPSIS
---------
-'git-diff-helper' [-z] [-S<string>] [-O<orderfile>]
-
-DESCRIPTION
------------
-Reads output from "git-diff-index", "git-diff-tree" and "git-diff-files" and
-generates patch format output.
-
-OPTIONS
--------
--z::
-       \0 line termination on input
-
--S<string>::
-       Look for differences that contains the change in <string>.
-
---pickaxe-all::
-       When -S finds a change, show all the changes in that
-       changeset, not just the files that contains the change
-       in <string>.
-
--O<orderfile>::
-       Output the patch in the order specified in the
-       <orderfile>, which has one shell glob pattern per line.
-
-See Also
---------
-The section on generating patches in link:git-diff-index.html[git-diff-index]
-
-
-Author
-------
-Written by Junio C Hamano <junkio@cox.net>
-
-
-Documentation
---------------
-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
-
-GIT
----
-Part of the link:git.html[git] suite
-
index 12bfcb3..2fc3eed 100644 (file)
@@ -1,6 +1,5 @@
 git-diff-index(1)
 =================
-v0.1, May 2005
 
 NAME
 ----
@@ -86,8 +85,8 @@ the more useful of the two in that what it does can't be emulated with
 a "git-write-tree" + "git-diff-tree". Thus that's the default mode.
 The non-cached version asks the question:
 
-   show me the differences between HEAD and the currently checked out
-   tree - index contents _and_ files that aren't up-to-date
+  show me the differences between HEAD and the currently checked out
+  tree - index contents _and_ files that aren't up-to-date
 
 which is obviously a very useful question too, since that tells you what
 you *could* commit. Again, the output matches the "git-diff-tree -r"
@@ -107,13 +106,13 @@ not up-to-date and may contain new stuff. The all-zero sha1 means that to
 get the real diff, you need to look at the object in the working directory
 directly rather than do an object-to-object diff.
 
-NOTE! As with other commands of this type, "git-diff-index" does not
+NOTE: As with other commands of this type, "git-diff-index" does not
 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-cache" it to make the cache be in sync.
 
-NOTE 2! You can have a mixture of files show up as "has been updated"
+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
 tell which file is in which state, since the "has been updated" ones
 show a valid sha1, and the "not in sync with the index" ones will
@@ -130,5 +129,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 2084c70..28c60fc 100644 (file)
@@ -1,6 +1,5 @@
 git-diff-stages(1)
 ==================
-v0.1, June 2005
 
 NAME
 ----
@@ -38,4 +37,4 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index 816c592..f57c8d0 100644 (file)
@@ -1,6 +1,5 @@
 git-diff-tree(1)
 ================
-v0.1, May 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-diff-tree - Compares the content and mode of blobs found via two tree object
 
 SYNOPSIS
 --------
-'git-diff-tree' [--stdin] [-m] [-s] [-v] [--pretty] [-t] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
+'git-diff-tree' [--stdin] [-m] [-s] [-v] [--pretty] [-t] [-r] [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
 
 DESCRIPTION
 -----------
@@ -34,6 +33,9 @@ include::diff-options.txt[]
        Note that this parameter does not provide any wildcard or regexp
        features.
 
+-r::
+        recurse into sub-trees
+
 -t::
        show tree entry itself as well as subtrees.  Implies -r.
 
@@ -101,16 +103,18 @@ An example of normal usage is:
 which tells you that the last commit changed just one file (it's from
 this one:
 
-  commit 3c6f7ca19ad4043e9e72fa94106f352897e651a8
-  tree 5319e4d609cdd282069cc4dce33c1db559539b03
-  parent b4e628ea30d5ab3606119d2ea5caeab141d38df7
-  author Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
-  committer Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
+-----------------------------------------------------------------------------
+commit 3c6f7ca19ad4043e9e72fa94106f352897e651a8
+tree 5319e4d609cdd282069cc4dce33c1db559539b03
+parent b4e628ea30d5ab3606119d2ea5caeab141d38df7
+author Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
+committer Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
 
-  Make "git-fsck-objects" print out all the root commits it finds.
+Make "git-fsck-objects" print out all the root commits it finds.
 
-  Once I do the reference tracking, I'll also make it print out all the
-  HEAD commits it finds, which is even more interesting.
+Once I do the reference tracking, I'll also make it print out all the
+HEAD commits it finds, which is even more interesting.
+-----------------------------------------------------------------------------
 
 in case you care).
 
@@ -129,5 +133,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index fc37ea7..cadaf59 100644 (file)
@@ -48,5 +48,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-export.txt b/Documentation/git-export.txt
deleted file mode 100644 (file)
index d2d0dc4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-git-export(1)
-=============
-v0.1, May 2005
-
-NAME
-----
-git-export - Exports each commit and a diff against each of its parents
-
-
-SYNOPSIS
---------
-'git-export' top [base]
-
-DESCRIPTION
------------
-Exports each commit and diff against each of its parents, between
-top and base.  If base is not specified it exports everything.
-
-
-Author
-------
-Written by Linus Torvalds <torvalds@osdl.org>
-
-Documentation
---------------
-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
-
-GIT
----
-Part of the link:git.html[git] suite
-
index 59afa14..ea6faab 100644 (file)
@@ -1,6 +1,5 @@
 git-fetch-pack(1)
 =================
-v0.1, July 2005
 
 NAME
 ----
@@ -35,7 +34,7 @@ OPTIONS
        remote side, if is not found on your $PATH.
        Installations of sshd ignores the user's environment
        setup scripts for login shells (e.g. .bash_profile) and
-       your privately installed GIT may not be found on the system
+       your privately installed git may not be found on the system
        default $PATH.  Another workaround suggested is to set
        up your $PATH in ".bashrc", but this flag is for people
        who do not want to pay the overhead for non-interactive
@@ -66,4 +65,4 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index 8c1cc07..73f8a99 100644 (file)
@@ -1,6 +1,5 @@
 git-fetch(1)
 ============
-v0.99.5, Aug 2005
 
 NAME
 ----
@@ -26,6 +25,11 @@ OPTIONS
 -------
 include::pull-fetch-param.txt[]
 
+-a, \--append::
+       Append ref names and object names of fetched refs to the
+       existing contents of $GIT_DIR/FETCH_HEAD.  Without this
+       option old data in $GIT_DIR/FETCH_HEAD will be overwritten.
+
 -u, \--update-head-ok::
        By default 'git-fetch' refuses to update the head which
        corresponds to the current branch.  This flag disables the
@@ -33,15 +37,20 @@ include::pull-fetch-param.txt[]
        update the index and working directory, so use it with care.
 
 
+SEE ALSO
+--------
+gitlink:git-pull[1]
+
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org> and
 Junio C Hamano <junkio@cox.net>
 
 Documentation
---------------
+-------------
 Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
diff --git a/Documentation/git-fmt-merge-msg.txt b/Documentation/git-fmt-merge-msg.txt
new file mode 100644 (file)
index 0000000..a70eb39
--- /dev/null
@@ -0,0 +1,39 @@
+git-fmt-merge-msg(1)
+====================
+
+NAME
+----
+git-fmt-merge-msg - Produce a merge commit message
+
+
+SYNOPSIS
+--------
+'git-fmt-merge-msg' <$GIT_DIR/FETCH_HEAD
+
+DESCRIPTION
+-----------
+Takes the list of merged objects on stdin and produces a suitable
+commit message to be used for the merge commit, usually to be
+passed as the '<merge-message>' argument of `git-merge`.
+
+This script is intended mostly for internal use by scripts
+automatically invoking `git-merge`.
+
+
+SEE ALSO
+--------
+gitlink:git-merge[1]
+
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+Documentation
+--------------
+Documentation by Petr Baudis, Junio C Hamano and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
index b314c3a..7a3abec 100644 (file)
@@ -8,7 +8,7 @@ git-format-patch - Prepare patches for e-mail submission.
 
 SYNOPSIS
 --------
-'git-format-patch' [-n][-o <dir>][-k][--mbox][--diff-options] <his> [<mine>]
+'git-format-patch' [-n][-o <dir>|--stdout][-k][--mbox][--diff-options] <his> [<mine>]
 
 DESCRIPTION
 -----------
@@ -54,6 +54,30 @@ OPTIONS
        concatenated together and fed to `git-applymbox`.
        Implies --author and --date.
 
+--stdout::
+       This flag generates the mbox formatted output to the
+       standard output, instead of saving them into a file per
+       patch and implies --mbox.
+
+
+EXAMPLES
+--------
+
+git-format-patch -k --stdout R1..R2 | git-am -3 -k::
+       Extract commits between revisions R1 and R2, and apply
+       them on top of the current branch using `git-am` to
+       cherry-pick them.
+
+git-format-patch origin::
+       Extract commits the current branch accumulated since it
+       pulled from origin the last time in a patch form for
+       e-mail submission.
+
+
+See Also
+--------
+gitlink:git-am[1], gitlink:git-send-email
+
 
 Author
 ------
@@ -65,5 +89,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 2b86404..5dc9dbd 100644 (file)
@@ -1,6 +1,5 @@
 git-fsck-objects(1)
 ===================
-v0.1, May 2005
 
 NAME
 ----
@@ -19,9 +18,9 @@ OPTIONS
 -------
 <object>::
        An object to treat as the head of an unreachability trace.
-
-       If no objects are given, git-fsck-objects defaults to using the
-       index file and all SHA1 references in .git/refs/* as heads.
++
+If no objects are given, git-fsck-objects defaults to using the
+index file and all SHA1 references in .git/refs/* as heads.
 
 --unreachable::
        Print out objects that exist but that aren't readable from any
@@ -42,22 +41,22 @@ OPTIONS
        ($GIT_DIR/objects), making sure that it is consistent and
        complete without referring to objects found in alternate
        object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES,
-       nor packed GIT archives found in $GIT_DIR/objects/pack;
+       nor packed git archives found in $GIT_DIR/objects/pack;
        cannot be used with --full.
 
 --full::
        Check not just objects in GIT_OBJECT_DIRECTORY
        ($GIT_DIR/objects), but also the ones found in alternate
        object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES,
-       and in packed GIT archives found in $GIT_DIR/objects/pack
+       and in packed git archives found in $GIT_DIR/objects/pack
        and corresponding pack subdirectories in alternate
        object pools; cannot be used with --standalone.
 
 --strict::
        Enable more strict checking, namely to catch a file mode
        recorded with g+w bit set, which was created by older
-       versions of GIT.  Existing repositories, including the
-       Linux kernel, GIT itself, and sparse repository have old
+       versions of git.  Existing repositories, including the
+       Linux kernel, git itself, and sparse repository have old
        objects that triggers this check, but it is recommended
        to check new projects with this flag.
 
@@ -81,7 +80,7 @@ Any corrupt objects you will have to find in backups or other archives
 the hopes that somebody else has the object you have corrupted).
 
 Of course, "valid tree" doesn't mean that it wasn't generated by some
-evil person, and the end result might be crap. Git is a revision
+evil person, and the end result might be crap. git is a revision
 tracking system, not a quality assurance system ;)
 
 Extracted Diagnostics
@@ -128,7 +127,7 @@ GIT_OBJECT_DIRECTORY::
 GIT_INDEX_FILE::
        used to specify the index file of the cache
 
-GIT_ALTERNATE_OBJECT_DIRECTORIES:
+GIT_ALTERNATE_OBJECT_DIRECTORIES::
        used to specify additional object database roots (usually unset)
 
 Author
@@ -141,5 +140,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 0eb5e28..30b1fbf 100644 (file)
@@ -33,5 +33,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index c275ae2..0175793 100644 (file)
@@ -1,6 +1,5 @@
 git-grep(1)
 ===========
-v0.99.6, Sep 2005
 
 NAME
 ----
@@ -43,5 +42,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 4dd06f7..9239f11 100644 (file)
@@ -1,6 +1,5 @@
 git-hash-object(1)
 ==================
-v0.1, May 2005
 
 NAME
 ----
@@ -40,5 +39,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 9cd862e..088624f 100644 (file)
@@ -1,10 +1,9 @@
 git-http-fetch(1)
 =================
-v0.1, May 2005
 
 NAME
 ----
-git-http-fetch - Downloads a remote GIT repository via HTTP
+git-http-fetch - Downloads a remote git repository via HTTP
 
 
 SYNOPSIS
@@ -13,7 +12,7 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Downloads a remote GIT repository via HTTP.
+Downloads a remote git repository via HTTP.
 
 -c::
        Get the commit objects.
@@ -38,5 +37,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-http-push.txt b/Documentation/git-http-push.txt
new file mode 100644 (file)
index 0000000..c7066d6
--- /dev/null
@@ -0,0 +1,89 @@
+git-http-push(1)
+================
+
+NAME
+----
+git-http-push - Push missing objects using HTTP/DAV.
+
+
+SYNOPSIS
+--------
+'git-http-push' [--complete] [--force] [--verbose] <url> <ref> [<ref>...]
+
+DESCRIPTION
+-----------
+Sends missing objects to remote repository, and updates the
+remote branch.
+
+
+OPTIONS
+-------
+--complete::
+       Do not assume that the remote repository is complete in its
+       current state, and verify all objects in the entire local
+       ref's history exist in the remote repository.
+
+--force::
+       Usually, the command refuses to update a remote ref that
+       is not an ancestor of the local ref used to overwrite it.
+       This flag disables the check.  What this means is that
+       the remote repository can lose commits; use it with
+       care.
+
+--verbose::
+       Report the list of objects being walked locally and the
+       list of objects successfully sent to the remote repository.
+
+<ref>...:
+       The remote refs to update.
+
+
+Specifying the Refs
+-------------------
+
+A '<ref>' specification can be either a single pattern, or a pair
+of such patterns separated by a colon ":" (this means that a ref name
+cannot have a colon in it).  A single pattern '<name>' is just a 
+shorthand for '<name>:<name>'.
+
+Each pattern pair consists of the source side (before the colon)
+and the destination side (after the colon).  The ref to be
+pushed is determined by finding a match that matches the source
+side, and where it is pushed is determined by using the
+destination side.
+
+ - It is an error if <src> does not match exactly one of the
+   local refs.
+
+ - If <dst> does not match any remote ref, either
+
+   * it has to start with "refs/"; <dst> is used as the
+     destination literally in this case.
+
+   * <src> == <dst> and the ref that matched the <src> must not
+     exist in the set of remote refs; the ref matched <src>
+     locally is used as the name of the destination.
+
+Without '--force', the <src> ref is stored at the remote only if
+<dst> does not exist, or <dst> is a proper subset (i.e. an
+ancestor) of <src>.  This check, known as "fast forward check",
+is performed in order to avoid accidentally overwriting the
+remote ref and lose other peoples' commits from there.
+
+With '--force', the fast forward check is disabled for all refs.
+
+Optionally, a <ref> parameter can be prefixed with a plus '+' sign
+to disable the fast-forward check only on that ref.
+
+
+Author
+------
+Written by Nick Hengeveld <nickh@reactrix.com>
+
+Documentation
+--------------
+Documentation by Nick Hengeveld
+
+GIT
+---
+Part of the gitlink:git[7] suite
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.txt
new file mode 100644 (file)
index 0000000..71ce557
--- /dev/null
@@ -0,0 +1,44 @@
+git-index-pack(1)
+=================
+
+NAME
+----
+git-index-pack - Build pack index file for an existing packed archive
+
+
+SYNOPSIS
+--------
+'git-index-pack' [-o <index-file>] <pack-file>
+
+
+DESCRIPTION
+-----------
+Reads a packed archive (.pack) from the specified file, and
+builds a pack index file (.idx) for it.  The packed archive
+together with the pack index can then be placed in the
+objects/pack/ directory of a git repository.
+
+
+OPTIONS
+-------
+-o <index-file>::
+       Write the generated pack index into the specified
+       file.  Without this option the name of pack index
+       file is constructed from the name of packed archive
+       file by replacing .pack with .idx (and the program
+       fails if the name of packed archive does not end
+       with .pack).
+
+
+Author
+------
+Written by Sergey Vlasov <vsu@altlinux.ru>
+
+Documentation
+-------------
+Documentation by Sergey Vlasov
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
index fb8b522..ef1826a 100644 (file)
@@ -1,6 +1,5 @@
 git-init-db(1)
 ==============
-v0.1, May 2005
 
 NAME
 ----
@@ -37,5 +36,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index aad7d99..87abec1 100644 (file)
@@ -1,10 +1,9 @@
 git-local-fetch(1)
 ==================
-v0.1, May 2005
 
 NAME
 ----
-git-local-fetch - Duplicates another GIT repository on a local system
+git-local-fetch - Duplicates another git repository on a local system
 
 
 SYNOPSIS
@@ -13,7 +12,7 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Duplicates another GIT repository on a local system.
+Duplicates another git repository on a local system.
 
 OPTIONS
 -------
@@ -40,5 +39,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index d1c24f7..9cac088 100644 (file)
@@ -1,6 +1,5 @@
 git-log(1)
 ==========
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-log - Show commit logs
 
 SYNOPSIS
 --------
-'git log' <option>...
+'git-log' <option>...
 
 DESCRIPTION
 -----------
@@ -31,6 +30,24 @@ OPTIONS
        Show only commits between the named two commits.
 
 
+Examples
+--------
+git log --no-merges::
+
+       Show the whole commit history, but skip any merges
+
+git log v2.6.12.. include/scsi drivers/scsi::
+
+       Show all commits since version 'v2.6.12' that changed any file
+       in the include/scsi or drivers/scsi subdirectories
+
+git log --since="2 weeks ago" -- gitk::
+
+       Show the changes during the last two weeks to the file 'gitk'.
+       The "--" is necessary to avoid confusion with the *branch* named
+       'gitk'
+
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org>
@@ -41,5 +58,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 9c5ef8e..8c1784d 100644 (file)
@@ -1,6 +1,5 @@
 git-ls-files(1)
 ===============
-v0.1, May 2005
 
 NAME
 ----
@@ -10,11 +9,11 @@ git-ls-files - Information about files in the cache/working directory
 SYNOPSIS
 --------
 'git-ls-files' [-z] [-t]
-               (--[cached|deleted|others|ignored|stage|unmerged|killed])\*
-               (-[c|d|o|i|s|u|k])\*
+               (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])\*
+               (-[c|d|o|i|s|u|k|m])\*
                [-x <pattern>|--exclude=<pattern>]
                [-X <file>|--exclude-from=<file>]
-               [--exclude-per-directory=<file>]
+               [--exclude-per-directory=<file>] [--] [<file>]\*
 
 DESCRIPTION
 -----------
@@ -33,6 +32,9 @@ OPTIONS
 -d|--deleted::
        Show deleted files in the output
 
+-m|--modified::
+       Show modified files in the output
+
 -o|--others::
        Show other files in the output
 
@@ -48,11 +50,11 @@ OPTIONS
 
 -k|--killed::
        Show files on the filesystem that need to be removed due
-       to file/directory conflicts for checkout-cache to
+       to file/directory conflicts for checkout-index to
        succeed.
 
 -z::
-       \0 line termination on output
+       \0 line termination on output.
 
 -x|--exclude=<pattern>::
        Skips files matching pattern.
@@ -68,12 +70,20 @@ OPTIONS
 -t::
        Identify the file status with the following tags (followed by
        a space) at the start of each line:
-       H       cached
-       M       unmerged
-       R       removed/deleted
-       K       to be killed
+       H::     cached
+       M::     unmerged
+       R::     removed/deleted
+       C::     modifed/changed
+       K::     to be killed
        ?       other
 
+--::
+       Do not interpret any more arguments as options.
+
+<file>::
+       Files to show. If no files are given all files which match the other
+       specified criteria are shown.
+
 Output
 ------
 show files just outputs the filename unless '--stage' is specified in
@@ -90,6 +100,10 @@ the dircache records up to three such pairs; one from tree O in stage
 the user (or the porcelain) to see what should eventually be recorded at the
 path. (see git-read-tree for more information on state)
 
+When `-z` option is not used, TAB, LF, and backslash characters
+in pathnames are represented as `\t`, `\n`, and `\\`,
+respectively.
+
 
 Exclude Patterns
 ----------------
@@ -100,13 +114,13 @@ flags --others or --ignored are specified.
 
 These exclude patterns come from these places:
 
(1) command line flag --exclude=<pattern> specifies a single
 1. command line flag --exclude=<pattern> specifies a single
      pattern.
 
(2) command line flag --exclude-from=<file> specifies a list of
 2. command line flag --exclude-from=<file> specifies a list of
      patterns stored in a file.
 
(3) command line flag --exclude-per-directory=<name> specifies
 3. command line flag --exclude-per-directory=<name> specifies
      a name of the file in each directory 'git-ls-files'
      examines, and if exists, its contents are used as an
      additional list of patterns.
@@ -158,12 +172,13 @@ An exclude pattern is of the following format:
  - otherwise, it is a shell glob pattern, suitable for
    consumption by fnmatch(3) with FNM_PATHNAME flag.  I.e. a
    slash in the pattern must match a slash in the pathname.
-   "Documentation/*.html" matches "Documentation/git.html" but
+   "Documentation/\*.html" matches "Documentation/git.html" but
    not "ppc/ppc.html".  As a natural exception, "/*.c" matches
    "cat-file.c" but not "mozilla-sha1/sha1.c".
 
 An example:
 
+--------------------------------------------------------------
     $ cat .git/ignore
     # ignore objects and archives, anywhere in the tree.
     *.[oa]
@@ -176,11 +191,12 @@ An example:
         --exclude='Documentation/*.[0-9]' \
         --exclude-from=.git/ignore \
         --exclude-per-directory=.gitignore
+--------------------------------------------------------------
 
 
 See Also
 --------
-link:git-read-tree.html[git-read-tree]
+gitlink:git-read-tree[1]
 
 
 Author
@@ -193,5 +209,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index c3152b1..c0a80d4 100644 (file)
@@ -1,6 +1,5 @@
 git-ls-remote(1)
 ================
-v0.1, May 2005
 
 NAME
 ----
@@ -60,5 +59,5 @@ Written by Junio C Hamano <junkio@cox.net>
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index fdb215e..ba0438e 100644 (file)
@@ -1,6 +1,5 @@
 git-ls-tree(1)
 ==============
-v0.1, May 2005
 
 NAME
 ----
@@ -39,6 +38,10 @@ Output Format
 -------------
         <mode> SP <type> SP <object> TAB <file>
 
+When `-z` option is not used, TAB, LF, and backslash characters
+in pathnames are represented as `\t`, `\n`, and `\\`,
+respectively.
+
 
 Author
 ------
@@ -51,5 +54,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index eb3a3d1..dc7d725 100644 (file)
@@ -61,5 +61,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 789d3a9..03a9477 100644 (file)
@@ -7,7 +7,7 @@ git-mailsplit - Totally braindamaged mbox splitter program.
 
 SYNOPSIS
 --------
-'git-mailsplit' <mbox> <directory>
+'git-mailsplit' [-d<prec>] [<mbox>] <directory>
 
 DESCRIPTION
 -----------
@@ -17,14 +17,23 @@ directory so you can process them further from there.
 OPTIONS
 -------
 <mbox>::
-       Mbox file to split.
+       Mbox file to split.  If not given, the mbox is read from
+       the standard input.
 
 <directory>::
        Directory in which to place the individual messages.
 
+-d<prec>::
+       Instead of the default 4 digits with leading zeros,
+       different precision can be specified for the generated
+       filenames.
+
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org>
+and Junio C Hamano <junkio@cox.net>
+
 
 Documentation
 --------------
@@ -32,5 +41,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 1e27bf2..d1d56f1 100644 (file)
@@ -1,6 +1,5 @@
 git-merge-base(1)
 =================
-v0.1, May 2005
 
 NAME
 ----
@@ -30,5 +29,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 1b99f2b..d072fda 100644 (file)
@@ -1,6 +1,5 @@
 git-merge-index(1)
 ==================
-v0.1, May 2005
 
 NAME
 ----
@@ -85,5 +84,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index b84d14d..86aad37 100644 (file)
@@ -1,6 +1,5 @@
 git-merge-one-file(1)
 =====================
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -27,5 +26,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index a48697f..b3ef19b 100644 (file)
@@ -1,6 +1,5 @@
 git-merge(1)
 ============
-v0.99.6, Sep 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-merge - Grand Unified Merge Driver
 
 SYNOPSIS
 --------
-'git-merge' [-n] [-s <strategy>]... <msg> <head> <remote> <remote>...
+'git-merge' [-n] [--no-commit] [-s <strategy>]... <msg> <head> <remote> <remote>...
 
 
 DESCRIPTION
@@ -20,14 +19,12 @@ which drives multiple merge strategy scripts.
 
 OPTIONS
 -------
--n::
-       Do not show diffstat at the end of the merge.
+include::merge-pull-opts.txt[]
 
--s <strategy>::
-       use that merge strategy; can be given more than once to
-       specify them in the order they should be tried.  If
-       there is no `-s` option, built-in list of strategies is
-       used instead.
+<msg>::
+       The commit message to be used for the merge commit (in case
+       it is created). The `git-fmt-merge-msg` script can be used
+       to give a good default for automated `git-merge` invocations.
 
 <head>::
        our branch head commit.
@@ -37,6 +34,13 @@ OPTIONS
        least one <remote>.  Specifying more than one <remote>
        obviously means you are trying an Octopus.
 
+include::merge-strategies.txt[]
+
+
+SEE ALSO
+--------
+gitlink:git-fmt-merge-msg[1], gitlink:git-pull[1]
+
 
 Author
 ------
@@ -49,4 +53,4 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index 708f4ef..2860a3d 100644 (file)
@@ -1,6 +1,5 @@
 git-mktag(1)
 ============
-v0.1, May 2005
 
 NAME
 ----
@@ -44,5 +43,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-mv.txt b/Documentation/git-mv.txt
new file mode 100644 (file)
index 0000000..f2d5882
--- /dev/null
@@ -0,0 +1,51 @@
+git-mv(1)
+=========
+
+NAME
+----
+git-mv - Script used to move or rename a file, directory or symlink.
+
+
+SYNOPSIS
+--------
+'git-mv' [-f] [-n] <source> <destination>
+'git-mv' [-f] [-k] [-n] <source> ... <destination directory>
+
+DESCRIPTION
+-----------
+This script is used to move or rename a file, directory or symlink.
+In the first form, it renames <source>, which must exist and be either
+a file, symlink or directory, to <destination>, which must not exist.
+In the second form, the last argument has to be an existing
+directory; the given sources will be moved into this directory.
+
+The index is updated after successful completion, but the change must still be
+committed.
+
+OPTIONS
+-------
+-f::
+       Force renaming or moving even targets exist
+-k::
+        Skip move or rename actions which would lead to an error
+       condition. An error happens when a source is neither existing nor
+        controlled by GIT, or when it would overwrite an existing
+        file unless '-f' is given.
+-n::
+       Do nothing; only show what would happen
+
+
+Author
+------
+Written by Linus Torvalds <torvalds@osdl.org>
+Rewritten by Ryan Anderson <ryan@michonline.com>
+Move functionality added by Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
+
+Documentation
+--------------
+Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
diff --git a/Documentation/git-name-rev.txt b/Documentation/git-name-rev.txt
new file mode 100644 (file)
index 0000000..e37b0b8
--- /dev/null
@@ -0,0 +1,66 @@
+git-name-rev(1)
+===============
+
+NAME
+----
+git-name-rev - Find symbolic names for given revs.
+
+
+SYNOPSIS
+--------
+'git-name-rev' [--tags] ( --all | --stdin | <commitish>... )
+
+DESCRIPTION
+-----------
+Finds symbolic names suitable for human digestion for revisions given in any
+format parsable by git-rev-parse.
+
+
+OPTIONS
+-------
+
+--tags::
+       Do not use branch names, but only tags to name the commits
+
+--all::
+       List all commits reachable from all refs
+
+--stdin::
+       Read from stdin, append "(<rev_name>)" to all sha1's of name'able
+       commits, and pass to stdout
+
+EXAMPLE
+-------
+
+Given a commit, find out where it is relative to the local refs. Say somebody
+wrote you about that phantastic commit 33db5f4d9027a10e477ccf054b2c1ab94f74c85a.
+Of course, you look into the commit, but that only tells you what happened, but
+not the context.
+
+Enter git-name-rev:
+
+------------
+% git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
+------------
+
+Now you are wiser, because you know that it happened 940 revisions before v0.99.
+
+Another nice thing you can do is:
+
+------------
+% git log | git name-rev --stdin
+------------
+
+
+Author
+------
+Written by Johannes Schindelin <Johannes.Schindelin@gmx.de>
+
+Documentation
+--------------
+Documentation by Johannes Schindelin.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
index 7a9cc54..6e32ea3 100644 (file)
@@ -1,6 +1,5 @@
 git-octopus(1)
 ==============
-v0.99.5, Aug 2005
 
 NAME
 ----
@@ -35,5 +34,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 5ce195c..d1e93db 100644 (file)
@@ -1,6 +1,5 @@
 git-pack-objects(1)
 ===================
-v0.1, July 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-pack-objects - Create a packed archive of objects.
 
 SYNOPSIS
 --------
-'git-pack-objects' [--incremental] [--window=N] [--depth=N] {--stdout | base-name} < object-list
+'git-pack-objects' [--local] [--incremental] [--window=N] [--depth=N] {--stdout | base-name} < object-list
 
 
 DESCRIPTION
@@ -31,7 +30,7 @@ transport by their peers.
 
 Placing both in the pack/ subdirectory of $GIT_OBJECT_DIRECTORY (or
 any of the directories on $GIT_ALTERNATE_OBJECT_DIRECTORIES)
-enables GIT to read from such an archive.
+enables git to read from such an archive.
 
 
 OPTIONS
@@ -65,6 +64,11 @@ base-name::
        This flag causes an object already in a pack ignored
        even if it appears in the standard input.
 
+--local::
+       This flag is similar to `--incremental`; instead of
+       ignoring all packed objects, it only ignores objects
+       that are packed and not in the local object store
+       (i.e. borrowed from an alternate).
 
 Author
 ------
@@ -76,9 +80,10 @@ Documentation by Junio C Hamano
 
 See-Also
 --------
-git-repack(1) git-prune-packed(1)
+gitlink:git-repack[1]
+gitlink:git-prune-packed[1]
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 7ee0145..fc27afe 100644 (file)
@@ -45,4 +45,4 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index b6fa2a8..c8bd197 100644 (file)
@@ -18,6 +18,12 @@ ID" are almost guaranteed to be the same thing.
 
 IOW, you can use this thing to look for likely duplicate commits.
 
+When dealing with git-diff-tree output, it takes advantage of
+the fact that the patch is prefixed with the object name of the
+commit, and outputs two 40-byte hexadecimal string.  The first
+string is the patch ID, and the second string is the commit ID.
+This can be used to make a mapping from patch ID to commit ID.
+
 OPTIONS
 -------
 <patch>::
@@ -33,5 +39,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 9007540..915d3f8 100644 (file)
@@ -1,6 +1,5 @@
 git-peek-remote(1)
 ==================
-v0.1, July 2005
 
 NAME
 ----
@@ -23,7 +22,7 @@ OPTIONS
        remote side, if it is not found on your $PATH. Some
        installations of sshd ignores the user's environment
        setup scripts for login shells (e.g. .bash_profile) and
-       your privately installed GIT may not be found on the system
+       your privately installed git may not be found on the system
        default $PATH.  Another workaround suggested is to set
        up your $PATH in ".bashrc", but this flag is for people
        who do not want to pay the overhead for non-interactive
@@ -49,5 +48,5 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 3fca275..28a1500 100644 (file)
@@ -1,6 +1,5 @@
 git-prune-packed(1)
 =====================
-v0.1, August 2005
 
 NAME
 ----
@@ -34,9 +33,10 @@ Documentation by Ryan Anderson <ryan@michonline.com>
 
 See-Also
 --------
-git-pack-objects(1) git-repack(1)
+gitlink:git-pack-objects[1]
+gitlink:git-repack[1]
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index f368427..3367c9b 100644 (file)
@@ -1,6 +1,5 @@
 git-prune(1)
 ============
-v0.99.5, Aug 2005
 
 NAME
 ----
@@ -39,5 +38,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 235a036..7ebb08d 100644 (file)
@@ -1,6 +1,5 @@
 git-pull(1)
 ===========
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -9,22 +8,109 @@ git-pull - Pull and merge from another repository.
 
 SYNOPSIS
 --------
-'git-pull' <repository> <refspec>...
+'git-pull' <options> <repository> <refspec>...
 
 
 DESCRIPTION
 -----------
-Runs 'git-fetch' with the given parameters.
-
-When only one ref is downloaded, runs 'git resolve' to merge it
-into the local HEAD.  Otherwise uses 'git octopus' to merge them
-into the local HEAD.
+Runs `git-fetch` with the given parameters, and calls `git-merge`
+to merge the retrieved head(s) into the current branch.
 
+Note that you can use `.` (current directory) as the
+<repository> to pull from the local repository -- this is useful
+when merging local branches into the current branch.
 
 OPTIONS
 -------
 include::pull-fetch-param.txt[]
 
+-a, \--append::
+       Append ref names and object names of fetched refs to the
+       existing contents of `$GIT_DIR/FETCH_HEAD`.  Without this
+       option old data in `$GIT_DIR/FETCH_HEAD` will be overwritten.
+
+include::merge-pull-opts.txt[]
+
+include::merge-strategies.txt[]
+
+
+
+EXAMPLES
+--------
+
+git pull, git pull origin::
+       Fetch the default head from the repository you cloned
+       from and merge it into your current branch.
+
+git pull -s ours . obsolete::
+       Merge local branch `obsolete` into the current branch,
+       using `ours` merge strategy.
+
+git pull . fixes enhancements::
+       Bundle local branch `fixes` and `enhancements` on top of
+       the current branch, making an Octopus merge.
+
+git pull --no-commit . maint::
+       Merge local branch `maint` into the current branch, but
+       do not make a commit automatically.  This can be used
+       when you want to include further changes to the merge,
+       or want to write your own merge commit message.
++
+You should refrain from abusing this option to sneak substantial
+changes into a merge commit.  Small fixups like bumping
+release/version name would be acceptable.
+
+Command line pull of multiple branches from one repository::
++
+------------------------------------------------
+$ cat .git/remotes/origin
+URL: git://git.kernel.org/pub/scm/git/git.git
+Pull: master:origin
+
+$ git checkout master
+$ git fetch origin master:origin +pu:pu maint:maint
+$ git pull . origin
+------------------------------------------------
++
+Here, a typical `$GIT_DIR/remotes/origin` file from a
+`git-clone` operation is used in combination with
+command line options to `git-fetch` to first update
+multiple branches of the local repository and then
+to merge the remote `origin` branch into the local
+`master` branch.  The local `pu` branch is updated
+even if it does not result in a fast forward update.
+Here, the pull can obtain its objects from the local
+repository using `.`, as the previous `git-fetch` is
+known to have already obtained and made available
+all the necessary objects.
+
+
+Pull of multiple branches from one repository using `$GIT_DIR/remotes` file::
++
+------------------------------------------------
+$ cat .git/remotes/origin
+URL: git://git.kernel.org/pub/scm/git/git.git
+Pull: master:origin
+Pull: +pu:pu
+Pull: maint:maint
+
+$ git checkout master
+$ git pull origin
+------------------------------------------------
++
+Here, a typical `$GIT_DIR/remotes/origin` file from a
+`git-clone` operation has been hand-modified to include
+the branch-mapping of additional remote and local
+heads directly.  A single `git-pull` operation while
+in the `master` branch will fetch multiple heads and
+merge the remote `origin` head into the current,
+local `master` branch.
+
+
+SEE ALSO
+--------
+gitlink:git-fetch[1], gitlink:git-merge[1]
+
 
 Author
 ------
@@ -33,9 +119,11 @@ and Junio C Hamano <junkio@cox.net>
 
 Documentation
 --------------
-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
+Documentation by Jon Loeliger,
+David Greaves,
+Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index b8993eb..f45ac5e 100644 (file)
@@ -21,6 +21,15 @@ OPTIONS
 -------
 include::pull-fetch-param.txt[]
 
+\--all::
+       Instead of naming each ref to push, specifies all refs
+       to be pushed.
+
+-f, \--force::
+       Usually, the command refuses to update a local ref that is
+       not an ancestor of the remote ref used to overwrite it.
+       This flag disables the check.  What this means is that the
+       local repository can lose commits; use it with care.
 
 Author
 ------
@@ -32,5 +41,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index d9c5a13..7db5fb5 100644 (file)
@@ -1,6 +1,5 @@
 git-read-tree(1)
 ================
-v0.1, May 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-read-tree - Reads tree information into the directory cache
 
 SYNOPSIS
 --------
-'git-read-tree' (<tree-ish> | [-m [-u]] <tree-ish1> [<tree-ish2> [<tree-ish3>]])
+'git-read-tree' (<tree-ish> | [-m [-u|-i]] <tree-ish1> [<tree-ish2> [<tree-ish3>]])
 
 
 DESCRIPTION
@@ -35,6 +34,16 @@ OPTIONS
        After a successful merge, update the files in the work
        tree with the result of the merge.
 
+-i::
+       Usually a merge requires the index file as well as the
+       files in the working tree are up to date with the
+       current head commit, in order not to lose local
+       changes.  This flag disables the check with the working
+       tree and is meant to be used when creating a merge of
+       trees that are not directly related to the current
+       working tree status into a temporary index file.
+
+
 <tree-ish#>::
        The id of the tree object(s) to be read/merged.
 
@@ -74,10 +83,10 @@ fast forward situation).
 When two trees are specified, the user is telling git-read-tree
 the following:
 
-    (1) The current index and work tree is derived from $H, but
+     1. The current index and work tree is derived from $H, but
         the user may have local changes in them since $H;
 
-    (2) The user wants to fast-forward to $M.
+     2. The user wants to fast-forward to $M.
 
 In this case, the "git-read-tree -m $H $M" command makes sure
 that no local change is lost as the result of this "merge".
@@ -251,7 +260,7 @@ updated to the result of the merge.
 
 See Also
 --------
-link:git-write-tree.html[git-write-tree]; link:git-ls-files.html[git-ls-files]
+gitlink:git-write-tree[1]; gitlink:git-ls-files[1]
 
 
 Author
@@ -264,5 +273,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 09bd328..16c158f 100644 (file)
@@ -31,5 +31,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 2c6065f..8afde14 100644 (file)
@@ -1,6 +1,5 @@
 git-receive-pack(1)
 ===================
-v0.1, July 2005
 
 NAME
 ----
@@ -80,7 +79,7 @@ OPTIONS
 
 SEE ALSO
 --------
-link:git-send-pack.html[git-send-pack]
+gitlink:git-send-pack[1]
 
 
 Author
@@ -93,4 +92,4 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index 25975ae..6240535 100644 (file)
@@ -33,5 +33,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 2c24bfa..583cb03 100644 (file)
@@ -1,6 +1,5 @@
 git-rename(1)
 =============
-v0.1, May 2005
 
 NAME
 ----
@@ -29,5 +28,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index d8e3ad0..0c1ae49 100644 (file)
@@ -1,6 +1,5 @@
 git-repack(1)
 =============
-v0.99.5, August 2005
 
 NAME
 ----
@@ -51,9 +50,10 @@ Documentation by Ryan Anderson <ryan@michonline.com>
 
 See-Also
 --------
-git-pack-objects(1) git-prune-packed(1)
+gitlink:git-pack-objects[1]
+gitlink:git-prune-packed[1]
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 27a66ac..2463ec9 100644 (file)
@@ -36,5 +36,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index a6567c4..31ec207 100644 (file)
@@ -41,5 +41,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index d058318..4e57c2b 100644 (file)
@@ -1,6 +1,5 @@
 git-resolve(1)
 ==============
-v0.99.5, Aug 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-resolve - Merge two commits
 
 SYNOPSIS
 --------
-'git resolve' <current> <merged> <message>
+'git-resolve' <current> <merged> <message>
 
 DESCRIPTION
 -----------
@@ -33,5 +32,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 32c06a1..064ccb1 100644 (file)
@@ -1,6 +1,5 @@
 git-rev-list(1)
 ===============
-v0.1, May 2005
 
 NAME
 ----
@@ -9,7 +8,18 @@ git-rev-list - Lists commit objects in reverse chronological order
 
 SYNOPSIS
 --------
-'git-rev-list' [ *--max-count*=number ] [ *--max-age*=timestamp ] [ *--min-age*=timestamp ] [ *--bisect* ] [ *--pretty* ] [ *--objects* ] [ *--merge-order* [ *--show-breaks* ] ] <commit> [ <commit> ...] [ ^<commit> ...]
+'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>... ]
 
 DESCRIPTION
 -----------
@@ -17,71 +27,112 @@ Lists commit objects in reverse chronological order starting at the
 given commit(s), taking ancestry relationship into account.  This is
 useful to produce human-readable log output.
 
-Commits which are stated with a preceding '^' cause listing to stop at
-that point. Their parents are implied. "git-rev-list foo bar ^baz" thus
+Commits which are stated with a preceding '{caret}' cause listing to stop at
+that point. Their parents are implied. "git-rev-list foo bar {caret}baz" thus
 means "list all the commits which are included in 'foo' and 'bar', but
 not in 'baz'".
 
-If *--pretty* is specified, print the contents of the commit changesets
-in human-readable form.
-
-The *--objects* flag causes 'git-rev-list' to print the object IDs of
-any object referenced by the listed commits. 'git-rev-list --objects foo
-^bar' thus means "send me all object IDs which I need to download if
-I have the commit object 'bar', but not 'foo'".
-
-The *--bisect* flag limits output to the one commit object which is
-roughly halfway between the included and excluded commits. Thus,
-if 'git-rev-list --bisect foo ^bar
-^baz' outputs 'midpoint', the output
-of 'git-rev-list foo ^midpoint' and 'git-rev-list midpoint
-^bar
-^baz'
-would be of roughly the same length. Finding the change which introduces
-a regression is thus reduced to a binary search: repeatedly generate and
-test new 'midpoint's until the commit chain is of length one.
-
-If *--merge-order* is specified, the commit history is decomposed into a
-unique sequence of minimal, non-linear epochs and maximal, linear epochs.
-Non-linear epochs are then linearised by sorting them into merge order, which
-is described below.
-
+A special notation <commit1>..<commit2> can be used as a
+short-hand for {caret}<commit1> <commit2>.
+
+
+OPTIONS
+-------
+--pretty::
+       Print the contents of the commit changesets in human-readable form.
+
+--header::
+       Print the contents of the commit in raw-format; each
+       record is separated with a NUL character.
+
+--objects::
+       Print the object IDs of any object referenced by the listed commits.
+       'git-rev-list --objects foo ^bar' thus means "send me all object IDs
+       which I need to download if I have the commit object 'bar', but
+       not 'foo'".
+
+--unpacked::
+       Only useful with `--objects`; print the object IDs that
+       are not in packs.
+
+--bisect::
+       Limit output to the one commit object which is roughly halfway
+       between the included and excluded commits. Thus, if 'git-rev-list
+       --bisect foo ^bar ^baz' outputs 'midpoint', the output
+       of 'git-rev-list foo ^midpoint' and 'git-rev-list midpoint
+       ^bar ^baz' would be of roughly the same length. Finding the change
+       which introduces a regression is thus reduced to a binary search:
+       repeatedly generate and test new 'midpoint's until the commit chain
+       is of length one.
+
+--max-count::
+       Limit the number of commits output.
+
+--max-age=timestamp, --min-age=timestamp::
+       Limit the commits output to specified time range.
+
+--sparse::
+       When optional paths are given, the command outputs only
+       the commits that changes at least one of them, and also
+       ignores merges that do not touch the given paths.  This
+       flag makes the command output all eligible commits
+       (still subject to count and age limitation), but apply
+       merge simplification nevertheless.
+
+--all::
+       Pretend as if all the refs in `$GIT_DIR/refs/` are
+       listed on the command line as <commit>.
+
+--topo-order::
+       By default, the commits are shown in reverse
+       chronological order.  This option makes them appear in
+       topological order (i.e. descendant commits are shown
+       before their parents).
+
+--merge-order::
+       When specified the commit history is decomposed into a unique
+       sequence of minimal, non-linear epochs and maximal, linear epochs.
+       Non-linear epochs are then linearised by sorting them into merge
+       order, which is described below.
++
 Maximal, linear epochs correspond to periods of sequential development.
 Minimal, non-linear epochs correspond to periods of divergent development
 followed by a converging merge. The theory of epochs is described in more
 detail at
 link:http://blackcubes.dyndns.org/epoch/[http://blackcubes.dyndns.org/epoch/].
-
++
 The merge order for a non-linear epoch is defined as a linearisation for which
 the following invariants are true:
-
++
     1. if a commit P is reachable from commit N, commit P sorts after commit N
        in the linearised list.
     2. if Pi and Pj are any two parents of a merge M (with i < j), then any
        commit N, such that N is reachable from Pj but not reachable from Pi,
        sorts before all commits reachable from Pi.
-
++
 Invariant 1 states that later commits appear before earlier commits they are
 derived from.
-
++
 Invariant 2 states that commits unique to "later" parents in a merge, appear
 before all commits from "earlier" parents of a merge.
 
-If *--show-breaks* is specified, each item of the list is output with a
-2-character prefix consisting of one of: (|), (^), (=) followed by a space.
-
+--show-breaks::
+       Each item of the list is output with a 2-character prefix consisting
+       of one of: (|), (^), (=) followed by a space.
++
 Commits marked with (=) represent the boundaries of minimal, non-linear epochs
 and correspond either to the start of a period of divergent development or to
 the end of such a period.
-
++
 Commits marked with (|) are direct parents of commits immediately preceding
 the marked commit in the list.
-
++
 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.
++
+`--show-breaks` is only valid if `--merge-order` is also specified.
 
-*--show-breaks* is only valid if *--merge-order* is also specified.
 
 Author
 ------
@@ -95,5 +146,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 067e4f0..431b8f6 100644 (file)
@@ -54,13 +54,13 @@ OPTIONS
        `git-diff-\*`).
 
 --not::
-       When showing object names, prefix them with '^' and
-       strip '^' prefix from the object names that already have
+       When showing object names, prefix them with '{caret}' and
+       strip '{caret}' prefix from the object names that already have
        one.
 
 --symbolic::
        Usually the object names are output in SHA1 form (with
-       possible '^' prefix); this option makes them output in a
+       possible '{caret}' prefix); this option makes them output in a
        form as close to the original input as possible.
 
 
@@ -72,6 +72,14 @@ OPTIONS
        path of the current directory relative to the top-level
        directory.
 
+--since=datestring, --after=datestring::
+       Parses the date string, and outputs corresponding
+       --max-age= parameter for git-rev-list command.
+
+--until=datestring, --before=datestring::
+       Parses the date string, and outputs corresponding
+       --min-age= parameter for git-rev-list command.
+
 <args>...::
        Flags and parameters to be parsed.
 
@@ -79,8 +87,9 @@ OPTIONS
 SPECIFYING REVISIONS
 --------------------
 
-A revision parameter typically names a commit object.  They use
-what is called an 'extended SHA1' syntax.
+A revision parameter typically, but not necessarily, names a
+commit object.  They use what is called an 'extended SHA1'
+syntax.
 
 * The full SHA1 object name (40-byte hexadecimal string), or
   a substring of such that is unique within the repository.
@@ -91,24 +100,63 @@ what is called an 'extended SHA1' syntax.
 * A symbolic ref name.  E.g. 'master' typically means the commit
   object referenced by $GIT_DIR/refs/heads/master.  If you
   happen to have both heads/master and tags/master, you can
-  explicitly say 'heads/master' to tell GIT which one you mean.
+  explicitly say 'heads/master' to tell git which one you mean.
 
-* A suffix '^' to a revision parameter means the first parent of
-  that commit object.  '^<n>' means the <n>th parent (i.e.
-  'rev^'
-  is equivalent to 'rev^1').  As a special rule,
-  'rev^0' means the commit itself and is used when 'rev' is the
+* A suffix '{caret}' to a revision parameter means the first parent of
+  that commit object.  '{caret}<n>' means the <n>th parent (i.e.
+  'rev{caret}'
+  is equivalent to 'rev{caret}1').  As a special rule,
+  'rev{caret}0' means the commit itself and is used when 'rev' is the
   object name of a tag object that refers to a commit object.
 
 * A suffix '~<n>' to a revision parameter means the commit
   object that is the <n>th generation grand-parent of the named
   commit object, following only the first parent.  I.e. rev~3 is
-  equivalent to rev^^^ which is equivalent to rev^1^1^1.
-
-'git-rev-parse' also accepts a prefix '^' to revision parameter,
+  equivalent to rev{caret}{caret}{caret} which is equivalent to\
+  rev{caret}1{caret}1{caret}1.
+
+* A suffix '{caret}' followed by an object type name enclosed in
+  brace pair (e.g. `v0.99.8{caret}\{commit\}`) means the object
+  could be a tag, and dereference the tag recursively until an
+  object of that type is found or the object cannot be
+  dereferenced anymore (in which case, barf).  `rev{caret}0`
+  introduced earlier is a short-hand for `rev{caret}\{commit\}`.
+
+* A suffix '{caret}' followed by an empty brace pair
+  (e.g. `v0.99.8{caret}\{\}`) means the object could be a tag,
+  and dereference the tag recursively until a non-tag object is
+  found.
+
+'git-rev-parse' also accepts a prefix '{caret}' to revision parameter,
 which is passed to 'git-rev-list'.  Two revision parameters
 concatenated with '..' is a short-hand for writing a range
-between them.  I.e. 'r1..r2' is equivalent to saying '^r1 r2'
+between them.  I.e. 'r1..r2' is equivalent to saying '{caret}r1 r2'
+
+Here is an illustration, by Jon Loeliger.  Both node B and C are
+a commit parents of commit node A.  Parent commits are ordered
+left-to-right.
+
+    G   H   I   J
+     \ /     \ /
+      D   E   F
+       \  |  /
+        \ | /
+         \|/
+          B     C
+           \   /
+            \ /
+             A
+
+    A =      = A^0
+    B = A^   = A^1     = A~1
+    C = A^2  = A^2
+    D = A^^  = A^1^1   = A~2
+    E = B^2  = A^^2
+    F = B^3  = A^^3
+    G = A^^^ = A^1^1^1 = A~3
+    H = D^2  = B^^2    = A^^^2  = A~2^2
+    I = F^   = B^3^    = A^^3^
+    J = F^2  = B^3^2   = A^^3^2
 
 
 Author
@@ -122,5 +170,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-rev-tree.txt b/Documentation/git-rev-tree.txt
deleted file mode 100644 (file)
index 2ec7ed0..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-git-rev-tree(1)
-===============
-v0.1, May 2005
-
-NAME
-----
-git-rev-tree - Provides the revision tree for one or more commits
-
-
-SYNOPSIS
---------
-'git-rev-tree' [--edges] [--cache <cache-file>] [^]<commit> [[^]<commit>]
-
-DESCRIPTION
------------
-Provides the revision tree for one or more commits.
-
-OPTIONS
--------
---edges::
-       Show edges (ie places where the marking changes between parent
-       and child)
-
---cache <cache-file>::
-       Use the specified file as a cache from a previous git-rev-list run
-       to speed things up.  Note that this "cache" is totally different
-       concept from the directory index.  Also this option is not
-       implemented yet.
-
-[^]<commit>::
-       The commit id to trace (a leading caret means to ignore this
-       commit-id and below)
-
-Output
-------
-
-        <date> <commit>:<flags> [<parent-commit>:<flags> ]\*
-
-<date>::
-       Date in 'seconds since epoch'
-
-<commit>::
-       id of commit object
-
-<parent-commit>::
-       id of each parent commit object (>1 indicates a merge)
-
-<flags>::
-
-       The flags are read as a bitmask representing each commit
-       provided on the commandline. eg: given the command:
-
-                $ git-rev-tree <com1> <com2> <com3>
-
-       The output:
-
-           <date> <commit>:5
-
-        means that <commit> is reachable from <com1>(1) and <com3>(4)
-       
-A revtree can get quite large. "git-rev-tree" will eventually allow
-you to cache previous state so that you don't have to follow the whole
-thing down.
-
-So the change difference between two commits is literally
-
-       git-rev-tree [commit-id1]  > commit1-revtree
-       git-rev-tree [commit-id2]  > commit2-revtree
-       join -t : commit1-revtree commit2-revtree > common-revisions
-
-(this is also how to find the most common parent - you'd look at just
-the head revisions - the ones that aren't referred to by other
-revisions - in "common-revision", and figure out the best one. I
-think.)
-
-
-Author
-------
-Written by Linus Torvalds <torvalds@osdl.org>
-
-Documentation
---------------
-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
-
-GIT
----
-Part of the link:git.html[git] suite
-
index a3f9a56..feebd81 100644 (file)
@@ -29,9 +29,9 @@ OPTIONS
        working tree does not have to match the HEAD commit.
        The revert is done against the beginning state of your
        working tree.
-
-       This is useful when reverting more than one commits'
-       effect to your working tree in a row.
++
+This is useful when reverting more than one commits'
+effect to your working tree in a row.
 
 
 Author
@@ -44,5 +44,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index fa11efc..b9bec55 100644 (file)
@@ -1,6 +1,5 @@
 git-send-email(1)
 =================
-v0.1, July 2005
 
 NAME
 ----
@@ -21,35 +20,37 @@ The header of the email is configurable by command line options.  If not
 specified on the command line, the user will be prompted with a ReadLine
 enabled interface to provide the necessary information.
 
+OPTIONS
+-------
 The options available are:
 
-  --to
+--to::
        Specify the primary recipient of the emails generated.
        Generally, this will be the upstream maintainer of the
        project involved.
 
-   --from
+--from::
        Specify the sender of the emails.  This will default to
        the value GIT_COMMITTER_IDENT, as returned by "git-var -l".
        The user will still be prompted to confirm this entry.
 
-   --compose
+--compose::
        Use \$EDITOR to edit an introductory message for the
        patch series.
 
-   --subject
+--subject::
        Specify the initial subject of the email thread.
        Only necessary if --compose is also set.  If --compose
        is not set, this will be prompted for.
 
-   --in-reply-to
+--in-reply-to::
        Specify the contents of the first In-Reply-To header.
        Subsequent emails will refer to the previous email 
        instead of this if --chain-reply-to is set (the default)
        Only necessary if --compose is also set.  If --compose
        is not set, this will be prompted for.
 
-   --chain-reply-to, --no-chain-reply-to
+--chain-reply-to, --no-chain-reply-to::
        If this is set, each email will be sent as a reply to the previous
        email sent.  If disabled with "--no-chain-reply-to", all emails after
        the first will be sent as replies to the first email sent.  When using
@@ -57,7 +58,7 @@ The options available are:
        entire patch series.
        Default is --chain-reply-to
 
-   --smtp-server
+--smtp-server::
        If set, specifies the outgoing SMTP server to use.  Defaults to
        localhost.
 
@@ -75,5 +76,5 @@ Documentation by Ryan Anderson
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 5ed25f5..577f06a 100644 (file)
@@ -1,6 +1,5 @@
 git-send-pack(1)
 ================
-v0.1, July 2005
 
 NAME
 ----
@@ -61,9 +60,9 @@ this flag.
 Without '--all' and without any '<ref>', the refs that exist
 both on the local side and on the remote side are updated.
 
-When '<ref>'s are specified explicitly, it can be either a
+When one or more '<ref>' are specified explicitly, it can be either a
 single pattern, or a pair of such pattern separated by a colon
-':' (this means that a ref name cannot have a colon in it).  A
+":" (this means that a ref name cannot have a colon in it).  A
 single pattern '<name>' is just a shorthand for '<name>:<name>'.
 
 Each pattern pair consists of the source side (before the colon)
@@ -79,10 +78,10 @@ destination side.
 
  - If <dst> does not match any remote ref, either
 
-   - it has to start with "refs/"; <dst> is used as the
+   * it has to start with "refs/"; <dst> is used as the
      destination literally in this case.
 
-   - <src> == <dst> and the ref that matched the <src> must not
+   * <src> == <dst> and the ref that matched the <src> must not
      exist in the set of remote refs; the ref matched <src>
      locally is used as the name of the destination.
 
@@ -108,4 +107,4 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index fcf2cdf..6ef59ac 100644 (file)
@@ -14,11 +14,12 @@ DESCRIPTION
 
 Sets up the normal git environment variables and a few helper functions
 (currently just "die()"), and returns ok if it all looks like a git archive.
-So use it something like
+So, to make the rest of the git scripts more careful and readable,
+use it as follows:
 
-       . git-sh-setup || die "Not a git archive"
-
-to make the rest of the git scripts more careful and readable.
+-------------------------------------------------
+. git-sh-setup || die "Not a git archive"
+-------------------------------------------------
 
 Author
 ------
@@ -30,5 +31,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-shell.txt b/Documentation/git-shell.txt
new file mode 100644 (file)
index 0000000..3f4d804
--- /dev/null
@@ -0,0 +1,35 @@
+git-shell(1)
+============
+
+NAME
+----
+git-shell - Restricted login shell for GIT over SSH only
+
+
+SYNOPSIS
+--------
+'git-shell -c <command> <argument>'
+
+DESCRIPTION
+-----------
+This is meant to be used as a login shell for SSH accounts you want
+to restrict to GIT pull/push access only. It permits execution only
+of server-side GIT commands implementing the pull/push functionality.
+The commands can be executed only by the '-c' option; the shell is not
+interactive.
+
+Currently, only the `git-receive-pack` and `git-upload-pack` commands
+are permitted to be called, with a single required argument.
+
+Author
+------
+Written by Linus Torvalds <torvalds@osdl.org>
+
+Documentation
+--------------
+Documentation by Petr Baudis and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
index 6968ca6..65ca77f 100644 (file)
@@ -1,6 +1,5 @@
 git-shortlog(1)
 ===============
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-shortlog - Summarize 'git log' output.
 
 SYNOPSIS
 --------
-'git log --pretty=short | git shortlog'
+'git-log --pretty=short | git shortlog'
 
 DESCRIPTION
 -----------
@@ -27,5 +26,5 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 39e0682..c6c97b2 100644 (file)
@@ -1,6 +1,5 @@
 git-show-branch(1)
 ==================
-v0.99.5, Aug 2005
 
 NAME
 ----
@@ -8,7 +7,7 @@ git-show-branch - Show branches and their commits.
 
 SYNOPSIS
 --------
-'git show-branch [--all] [--heads] [--tags] [--more=<n> | --list | --independent | --merge-base] <reference>...'
+'git-show-branch [--all] [--heads] [--tags] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] <reference>...'
 
 DESCRIPTION
 -----------
@@ -45,6 +44,15 @@ OPTIONS
        Among the <reference>s given, display only the ones that
        cannot be reached from any other <reference>.
 
+--no-name::
+       Do not show naming strings for each commit.
+
+--sha1-name::
+       Instead of naming the commits using the path to reach
+       them from heads (e.g. "master~2" to mean the grandparent
+       of "master"), name them with the unique prefix of their
+       object names.
+
 Note that --more, --list, --independent and --merge-base options
 are mutually exclusive.
 
@@ -89,21 +97,6 @@ whose commit message is "Add 'git show-branch'.  "fixes" branch
 adds one commit 'Introduce "reset type"'.  "mhf" branch has many
 other commits.
 
-When only one head is given, the output format changes slightly
-to conserve space.  The '+' sign to show which commit is
-reachable from which head and the first N lines to show the list
-of heads being displayed are both meaningless so they are
-omitted.  Also the label given to each commit does not repeat
-the name of the branch because it is obvious.
-
-------------------------------------------------
-$ git show-branch --more=4 master
-[master] Add 'git show-branch'.
-[~1] Add a new extended SHA1 syntax <name>~<num>
-[~2] Fix "git-diff A B"
-[~3] git-ls-files: generalized pathspecs
-[~4] Make "git-ls-files" work in subdirectories
-------------------------------------------------
 
 Author
 ------
@@ -117,4 +110,4 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index beefe94..be09b62 100644 (file)
@@ -1,6 +1,5 @@
 git-show-index(1)
 =================
-v0.1, July 2005
 
 NAME
 ----
@@ -14,7 +13,7 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Reads given idx file for packed GIT archive created with
+Reads given idx file for packed git archive created with
 git-pack-objects command, and dumps its contents.
 
 The information it outputs is subset of what you can get from
@@ -32,5 +31,5 @@ Documentation by Junio C Hamano
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 4ef03f6..b7116b3 100644 (file)
@@ -1,6 +1,5 @@
 git-ssh-fetch(1)
 ================
-v0.1, May 2005
 
 NAME
 ----
@@ -48,5 +47,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index f1aa0df..702674e 100644 (file)
@@ -1,6 +1,5 @@
 git-ssh-upload(1)
 =================
-v0.1, Jun 2005
 
 NAME
 ----
@@ -44,5 +43,5 @@ Documentation by Daniel Barkalow
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 886fb7c..753fc08 100644 (file)
@@ -1,6 +1,5 @@
 git-status(1)
 =============
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-status - Show working tree status.
 
 SYNOPSIS
 --------
-'git status'
+'git-status'
 
 DESCRIPTION
 -----------
@@ -42,5 +41,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 4f82efb..528a1b6 100644 (file)
@@ -29,5 +29,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt
new file mode 100644 (file)
index 0000000..88bdc08
--- /dev/null
@@ -0,0 +1,137 @@
+git-svnimport(1)
+================
+v0.1, July 2005
+
+NAME
+----
+git-svnimport - Import a SVN repository into git
+
+
+SYNOPSIS
+--------
+'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
+                       [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_nr_changes]
+                       [ -b branch_subdir ] [ -t trunk_subdir ] [ -T tag_subdir ]
+                       [ -s start_chg ] [ -m ] [ -M regex ]
+                       <SVN_repository_URL> [ <path> ]
+
+
+DESCRIPTION
+-----------
+Imports a SVN repository into git. It will either create a new
+repository, or incrementally import into an existing one.
+
+SVN access is done by the SVN:: Perl module.
+
+git-svnimport assumes that SVN repositories are organized into one
+"trunk" directory where the main development happens, "branch/FOO"
+directories for branches, and "/tags/FOO" directories for tags.
+Other subdirectories are ignored.
+
+git-svnimport creates a file ".git/svn2git", which is required for
+incremental SVN imports.
+
+OPTIONS
+-------
+-C <target-dir>::
+        The GIT repository to import to.  If the directory doesn't
+        exist, it will be created.  Default is the current directory.
+
+-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.
+
+-i::
+       Import-only: don't perform a checkout after importing.  This option
+       ensures the working directory and cache remain untouched and will
+       not create them if they do not exist.
+
+-t <trunk_subdir>::
+       Name the SVN trunk. Default "trunk".
+
+-T <tag_subdir>::
+       Name the SVN subdirectory for tags. Default "tags".
+
+-b <branch_subdir>::
+       Name the SVN subdirectory for branches. Default "branches".
+
+-o <branch-for-HEAD>::
+       The 'trunk' branch from SVN is imported to the 'origin' branch within
+       the git repository. Use this option if you want to import into a
+       different branch.
+
+-m::
+       Attempt to detect merges based on the commit message. This option
+       will enable default regexes that try to capture the name source
+       branch name from the commit message.
+
+-M <regex>::
+       Attempt to detect merges based on the commit message with a custom
+       regex. It can be used with -m to also see the default regexes.
+       You must escape forward slashes.
+
+-l <max_num_changes>::
+       Limit the number of SVN changesets we pull before quitting.
+       This option is necessary because the SVN library has serious memory
+       leaks; the recommended value for nontrivial imports is 100.
+
+       git-svnimport will still exit with a zero exit code. You can check
+       the size of the file ".git/svn2git" to determine whether to call
+       the importer again.
+
+-v::
+       Verbosity: let 'svnimport' report what it is doing.
+
+-d::
+       Use direct HTTP requests if possible. The "<path>" argument is used
+       only for retrieving the SVN logs; the path to the contents is
+       included in the SVN log.
+
+-D::
+       Use direct HTTP requests if possible. The "<path>" argument is used
+       for retrieving the logs, as well as for the contents.
++
+There's no safe way to automatically find out which of these options to
+use, so you need to try both. Usually, the one that's wrong will die
+with a 40x error pretty quickly.
+
+<SVN_repository_URL>::
+       The URL of the SVN module you want to import. For local
+       repositories, use "file:///absolute/path".
++
+If you're using the "-d" or "-D" option, this is the URL of the SVN
+repository itself; it usually ends in "/svn".
+
+<SVN_repository_URL>::
+       The URL of the SVN module you want to import. For local
+       repositories, use "file:///absolute/path".
+
+<path>
+       The path to the module you want to check out.
+
+-h::
+       Print a short usage message and exit.
+
+OUTPUT
+------
+If '-v' is specified, the script reports what it is doing.
+
+Otherwise, success is indicated the Unix way, i.e. by simply exiting with
+a zero exit status.
+
+Author
+------
+Written by Matthias Urlichs <smurf@smurf.noris.de>, with help from
+various participants of the git-list <git@vger.kernel.org>.
+
+Based on a cvs2git script by the same author.
+
+Documentation
+--------------
+Documentation by Matthias Urlichs <smurf@smurf.noris.de>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
diff --git a/Documentation/git-symbolic-ref.txt b/Documentation/git-symbolic-ref.txt
new file mode 100644 (file)
index 0000000..a851ae2
--- /dev/null
@@ -0,0 +1,52 @@
+git-symbolic-ref(1)
+===================
+
+NAME
+----
+git-symbolic-ref - read and modify symbolic refs
+
+SYNOPSIS
+--------
+'git-symbolic-ref' <name> [<ref>]
+
+DESCRIPTION
+-----------
+Given one argument, reads which branch head the given symbolic
+ref refers to and outputs its path, relative to the `.git/`
+directory.  Typically you would give `HEAD` as the <name>
+argument to see on which branch your working tree is on.
+
+Give two arguments, create or update a symbolic ref <name> to
+point at the given branch <ref>.
+
+Traditionally, `.git/HEAD` is a symlink pointing at
+`refs/heads/master`.  When we want to switch to another branch,
+we did `ln -sf refs/heads/newbranch .git/HEAD`, and when we want
+to find out which branch we are on, we did `readlink .git/HEAD`.
+This was fine, and internally that is what still happens by
+default, but on platforms that does not have working symlinks,
+or that does not have the `readlink(1)` command, this was a bit
+cumbersome.  On some platforms, `ln -sf` does not even work as
+advertised (horrors).
+
+A symbolic ref can be a regular file that stores a string that
+begins with `ref: refs/`.  For example, your `.git/HEAD` *can*
+be a regular file whose contents is `ref: refs/heads/master`.
+This can be used on a filesystem that does not support symbolic
+links.  Instead of doing `readlink .git/HEAD`, `git-symbolic-ref
+HEAD` can be used to find out which branch we are on.  To point
+the HEAD to `newbranch`, instead of `ln -sf refs/heads/newbranch
+.git/HEAD`, `git-symbolic-ref HEAD refs/heads/newbranch` can be
+used.
+
+Currently, .git/HEAD uses a regular file symbolic ref on Cygwin,
+and everywhere else it is implemented as a symlink.  This can be
+changed at compilation time.
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+GIT
+---
+Part of the gitlink:git[7] suite
index 0e1be72..3984812 100644 (file)
@@ -1,28 +1,34 @@
 git-tag(1)
 ==========
-v0.99.4, Aug 2005
 
 NAME
 ----
 git-tag -  Create a tag object signed with GPG
 
 
-
 SYNOPSIS
 --------
-'git-tag' [-s | -a] [-f] <name>
+'git-tag' [-a | -s | -u <key-id>] [-f] [-m <msg>] <name> [<head>]
 
 DESCRIPTION
 -----------
-Adds a "tag" reference in .git/refs/tags/
+Adds a 'tag' reference in .git/refs/tags/
+
+Unless `-f` is given, the tag must not yet exist in
+`.git/refs/tags/` directory.
 
-Unless "-f" is given, the tag must not yet exist in ".git/refs/tags"
+If one of `-a`, `-s`, or `-u <key-id>` is passed, the command
+creates a 'tag' object, and requires the tag message.  Unless
+`-m <msg>` is given, an editor is started for the user to type
+in the tag message.
 
-If "-s" or "-a" is passed, the user will be prompted for a tag message.
-and a tag object is created.  Otherwise just the SHA1 object
-name of the commit object is written.
+Otherwise just the SHA1 object name of the commit object is
+written (i.e. an lightweight tag).
 
-A GnuPG signed tag object will be created when "-s" is used.
+A GnuPG signed tag object will be created when `-s` or `-u
+<key-id>` is used.  When `-u <key-id>` is not used, the
+committer identity for the current user is used to find the
+GnuPG key for signing.
 
 
 Author
@@ -36,4 +42,4 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index 9323ddd..2139b6f 100644 (file)
@@ -1,6 +1,5 @@
 git-tar-tree(1)
 ===============
-v0.1, May 2005
 
 NAME
 ----
@@ -35,5 +34,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 2f2130d..213dc81 100644 (file)
@@ -1,6 +1,5 @@
 git-unpack-file(1)
 ==================
-v0.1, May 2005
 
 NAME
 ----
@@ -33,5 +32,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index a42a75e..b716ba1 100644 (file)
@@ -1,6 +1,5 @@
 git-unpack-objects(1)
 =====================
-v0.1, July 2005
 
 NAME
 ----
@@ -35,5 +34,5 @@ Documentation by Junio C Hamano
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 54b5f24..58b9e49 100644 (file)
@@ -1,6 +1,5 @@
 git-update-index(1)
 ===================
-v0.1, May 2005
 
 NAME
 ----
@@ -10,11 +9,13 @@ git-update-index - Modifies the index or directory cache
 SYNOPSIS
 --------
 'git-update-index'
-            [--add] [--remove] [--refresh] [--replace]
-            [--ignore-missing]
-            [--force-remove]
+            [--add] [--remove | --force-remove] [--replace] 
+            [--refresh [-q] [--unmerged] [--ignore-missing]]
             [--cacheinfo <mode> <object> <file>]\*
-            [--info-only]
+            [--chmod=(+|-)x]
+            [--info-only] [--index-info]
+            [-z] [--stdin]
+            [--verbose]
             [--] [<file>]\*
 
 DESCRIPTION
@@ -42,12 +43,28 @@ OPTIONS
        Looks at the current cache and checks to see if merges or
        updates are needed by checking stat() information.
 
+-q::
+        Quiet.  If --refresh finds that the cache needs an update, the
+        default behavior is to error out.  This option makes
+        git-update-index continue anyway.
+
+--unmerged::
+        If --refresh finds unmerged changes in the cache, the default 
+        behavior is to error out.  This option makes git-update-index 
+        continue anyway.
+
 --ignore-missing::
        Ignores missing files during a --refresh
 
 --cacheinfo <mode> <object> <path>::
        Directly insert the specified info into the cache.
        
+--index-info::
+        Read index info from stdin.
+
+--chmod=(+|-)x::
+        Set the execute permissions on the updated files.        
+
 --info-only::
        Do not create objects in the object database for all
        <file> arguments that follow this flag; just insert
@@ -65,12 +82,24 @@ OPTIONS
        that conflicts with the entry being added are
        automatically removed with warning messages.
 
+--stdin::
+       Instead of taking list of paths from the command line,
+       read list of paths from the standard input.  Paths are
+       separated by LF (i.e. one path per line) by default.
+
+--verbose::
+        Report what is being added and removed from index.
+
+-z::
+       Only meaningful with `--stdin`; paths are separated with
+       NUL character instead of LF.
+
 --::
        Do not interpret any more arguments as options.
 
 <file>::
        Files to act on.
-       Note that files begining with '.' are discarded. This includes
+       Note that files beginning with '.' are discarded. This includes
        `./file` and `dir/./file`. If you don't want this, then use     
        cleaner names.
        The same applies to directories ending '/' and paths with '//'
@@ -92,7 +121,7 @@ Using --cacheinfo or --info-only
 current working directory.  This is useful for minimum-checkout
 merging.
 
-  To pretend you have a file with mode and sha1 at path, say:
+To pretend you have a file with mode and sha1 at path, say:
 
    $ git-update-index --cacheinfo mode sha1 path
 
@@ -112,6 +141,17 @@ To update and refresh only the files already checked out:
    git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
 
 
+Configuration
+-------------
+
+The command honors `core.filemode` configuration variable.  If
+your repository is on an filesystem whose executable bits are
+unreliable, this should be set to 'false'.  This causes the
+command to ignore differences in file modes recorded in the
+index and the file mode on the filesystem if they differ only on
+executable bit.   On such an unfortunate filesystem, you may
+need to use `git-update-index --chmod=`.
+
 Author
 ------
 Written by Linus Torvalds <torvalds@osdl.org>
@@ -122,5 +162,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
diff --git a/Documentation/git-update-ref.txt b/Documentation/git-update-ref.txt
new file mode 100644 (file)
index 0000000..69715aa
--- /dev/null
@@ -0,0 +1,58 @@
+git-update-ref(1)
+=================
+
+NAME
+----
+git-update-ref - update the object name stored in a ref safely
+
+SYNOPSIS
+--------
+`git-update-ref` <ref> <newvalue> [<oldvalue>]
+
+DESCRIPTION
+-----------
+Given two arguments, stores the <newvalue> in the <ref>, possibly
+dereferencing the symbolic refs.  E.g. `git-update-ref HEAD
+<newvalue>` updates the current branch head to the new object.
+
+Given three arguments, stores the <newvalue> in the <ref>,
+possibly dereferencing the symbolic refs, after verifying that
+the current value of the <ref> matches <oldvalue>.
+E.g. `git-update-ref refs/heads/master <newvalue> <oldvalue>`
+updates the master branch head to <newvalue> only if its current
+value is <oldvalue>.
+
+It also allows a "ref" file to be a symbolic pointer to another
+ref file by starting with the four-byte header sequence of
+"ref:".
+
+More importantly, it allows the update of a ref file to follow
+these symbolic pointers, whether they are symlinks or these
+"regular file symbolic refs".  It follows *real* symlinks only
+if they start with "refs/": otherwise it will just try to read
+them and update them as a regular file (i.e. it will allow the
+filesystem to follow them, but will overwrite such a symlink to
+somewhere else with a regular filename).
+
+In general, using
+
+       git-update-ref HEAD "$head"
+
+should be a _lot_ safer than doing
+
+       echo "$head" > "$GIT_DIR/HEAD"
+
+both from a symlink following standpoint *and* an error checking
+standpoint.  The "refs/" rule for symlinks means that symlinks
+that point to "outside" the tree are safe: they'll be followed
+for reading but not for writing (so we'll never write through a
+ref symlink to some other tree, if you have copied a whole
+archive by creating a symlink tree).
+
+Author
+------
+Written by Linus Torvalds <torvalds@osdl.org>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
index 39222c3..3d0dea0 100644 (file)
@@ -1,6 +1,5 @@
 git-update-server-info(1)
 =========================
-v0.1, July 2005
 
 NAME
 ----
@@ -55,5 +54,5 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index be597a1..3d8f8ef 100644 (file)
@@ -1,6 +1,5 @@
 git-upload-pack(1)
 ==================
-v0.1, July 2005
 
 NAME
 ----
@@ -37,4 +36,4 @@ Documentation by Junio C Hamano.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
index ebe87d6..c22d34f 100644 (file)
@@ -1,6 +1,5 @@
 git-var(1)
 ==========
-v0.1, July 2005
 
 NAME
 ----
@@ -15,21 +14,23 @@ DESCRIPTION
 -----------
 Prints a git logical variable.
 
--l causes the logical variables to be listed.
+OPTIONS
+-------
+-l::
+       Cause the logical variables to be listed.
 
 EXAMPLE
 --------
-$git-var GIT_AUTHOR_IDENT
-
-Eric W. Biederman <ebiederm@lnxi.com> 1121223278 -0600
+       $ git-var GIT_AUTHOR_IDENT
+       Eric W. Biederman <ebiederm@lnxi.com> 1121223278 -0600
 
 
 VARIABLES
 ----------
-GIT_AUTHOR_IDENT
+GIT_AUTHOR_IDENT::
     The author of a piece of code.
 
-GIT_COMMITTER_IDENT
+GIT_COMMITTER_IDENT::
     The person who put a piece of code into git.
 
 Diagnostics
@@ -43,8 +44,8 @@ Your sysadmin must hate you!::
 
 See Also
 --------
-link:git-commit-tree.html[git-commit-tree]
-link:git-tag.html[git-tag]
+gitlink:git-commit-tree[1]
+gitlink:git-tag[1]
 
 Author
 ------
@@ -56,5 +57,5 @@ Documentation by Eric Biederman and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index d1043eb..cd74ffd 100644 (file)
@@ -1,10 +1,9 @@
 git-verify-pack(1)
 ==================
-v0.1, June 2005
 
 NAME
 ----
-git-verify-pack - Validate packed GIT archive files.
+git-verify-pack - Validate packed git archive files.
 
 
 SYNOPSIS
@@ -14,7 +13,7 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Reads given idx file for packed GIT archive created with
+Reads given idx file for packed git archive created with
 git-pack-objects command and verifies idx file and the
 corresponding pack file.
 
@@ -25,15 +24,19 @@ OPTIONS
 
 -v::
        After verifying the pack, show list of objects contained
-       in the pack.  The format used is:
+       in the pack.
 
-               SHA1 type size offset-in-packfile
+OUTPUT FORMAT
+-------------
+When specifying the -v option the format used is:
 
-       for objects that are not deltified in the pack, and
+       SHA1 type size offset-in-packfile
 
-               SHA1 type size offset-in-packfile depth base-SHA1
+for objects that are not deltified in the pack, and
 
-       for objects that are deltified.
+       SHA1 type size offset-in-packfile depth base-SHA1
+
+for objects that are deltified.
 
 Author
 ------
@@ -45,5 +48,5 @@ Documentation by Junio C Hamano
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 98db1b3..b8a73c4 100644 (file)
@@ -28,5 +28,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 7420053..6c150b0 100644 (file)
@@ -1,6 +1,5 @@
 git-whatchanged(1)
 ==================
-v0.99.4, Aug 2005
 
 NAME
 ----
@@ -9,7 +8,7 @@ git-whatchanged - Show logs with difference each commit introduces.
 
 SYNOPSIS
 --------
-'git whatchanged' <option>...
+'git-whatchanged' <option>...
 
 DESCRIPTION
 -----------
@@ -44,6 +43,27 @@ OPTIONS
        <format> can be one of 'raw', 'medium', 'short', 'full',
        and 'oneline'.
 
+-m::
+       By default, differences for merge commits are not shown.
+       With this flag, show differences to that commit from all
+       of its parents.
+
+       However, it is not very useful in general, although it
+       *is* useful on a file-by-file basis.
+
+Examples
+--------
+git-whatchanged -p v2.6.12.. include/scsi drivers/scsi::
+
+       Show as patches the commits since version 'v2.6.12' that changed
+       any file in the include/scsi or drivers/scsi subdirectories
+
+git-whatchanged --since="2 weeks ago" -- gitk::
+
+       Show the changes during the last two weeks to the file 'gitk'.
+       The "--" is necessary to avoid confusion with the *branch* named
+       'gitk'
+
 
 Author
 ------
@@ -57,5 +77,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 5cd54ab..51be44d 100644 (file)
@@ -1,6 +1,5 @@
 git-write-tree(1)
 =================
-v0.1, May 2005
 
 NAME
 ----
@@ -39,5 +38,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index bec562e..2f9622f 100644 (file)
@@ -1,6 +1,5 @@
 git(7)
 ======
-v0.99.6, Sep 2005
 
 NAME
 ----
@@ -21,8 +20,8 @@ at the link:tutorial.html[tutorial] document.
 
 The <<Discussion>> section below contains much useful definition and
 clarification info - read that first.  And of the commands, I suggest
-reading link:git-update-index.html[git-update-index] and
-link:git-read-tree.html[git-read-tree] first - I wish I had!
+reading gitlink:git-update-index[1] and
+gitlink:git-read-tree[1] first - I wish I had!
 
 If you are migrating from CVS, link:cvs-migration.html[cvs migration]
 document may be helpful after you finish the tutorial.
@@ -55,105 +54,100 @@ SCMs layered over git.
 
 Manipulation commands
 ~~~~~~~~~~~~~~~~~~~~~
-link:git-apply.html[git-apply]::
+gitlink:git-apply[1]::
        Reads a "diff -up1" or git generated patch file and
        applies it to the working tree.
 
-link:git-checkout-index.html[git-checkout-index]::
+gitlink:git-checkout-index[1]::
        Copy files from the cache to the working directory
-       Previously this command was known as git-checkout-cache.
 
-link:git-commit-tree.html[git-commit-tree]::
+gitlink:git-commit-tree[1]::
        Creates a new commit object
 
-link:git-hash-object.html[git-hash-object]::
+gitlink:git-hash-object[1]::
        Computes the object ID from a file.
 
-link:git-init-db.html[git-init-db]::
+gitlink:git-index-pack.html[1]::
+       Build pack index file for an existing packed archive.
+
+gitlink:git-init-db[1]::
        Creates an empty git object database
 
-link:git-merge-index.html[git-merge-index]::
+gitlink:git-merge-index[1]::
        Runs a merge for files needing merging
-       Previously this command was known as git-merge-cache.
 
-link:git-mktag.html[git-mktag]::
+gitlink:git-mktag[1]::
        Creates a tag object
 
-link:git-pack-objects.html[git-pack-objects]::
+gitlink:git-pack-objects[1]::
        Creates a packed archive of objects.
 
-link:git-prune-packed.html[git-prune-packed]::
+gitlink:git-prune-packed[1]::
        Remove extra objects that are already in pack files.
 
-link:git-read-tree.html[git-read-tree]::
+gitlink:git-read-tree[1]::
        Reads tree information into the directory cache
 
-link:git-unpack-objects.html[git-unpack-objects]::
+gitlink:git-unpack-objects[1]::
        Unpacks objects out of a packed archive.
 
-link:git-update-index.html[git-update-index]::
+gitlink:git-update-index[1]::
        Modifies the index or directory cache
-       Previously this command was known as git-update-cache.
 
-link:git-write-tree.html[git-write-tree]::
+gitlink:git-write-tree[1]::
        Creates a tree from the current cache
 
 
 Interrogation commands
 ~~~~~~~~~~~~~~~~~~~~~~
 
-link:git-cat-file.html[git-cat-file]::
+gitlink:git-cat-file[1]::
        Provide content or type information for repository objects
 
-link:git-diff-index.html[git-diff-index]::
+gitlink:git-diff-index[1]::
        Compares content and mode of blobs between the cache and repository
-       Previously this command was known as git-diff-cache.
 
-link:git-diff-files.html[git-diff-files]::
+gitlink:git-diff-files[1]::
        Compares files in the working tree and the cache
 
-link:git-diff-stages.html[git-diff-stages]::
+gitlink:git-diff-stages[1]::
        Compares two "merge stages" in the index file.
 
-link:git-diff-tree.html[git-diff-tree]::
+gitlink:git-diff-tree[1]::
        Compares the content and mode of blobs found via two tree objects
 
-link:git-export.html[git-export]::
-       Exports each commit and a diff against each of its parents
-
-link:git-fsck-objects.html[git-fsck-objects]::
+gitlink:git-fsck-objects[1]::
        Verifies the connectivity and validity of the objects in the database
-       Previously this command was known as git-fsck-cache.
 
-link:git-ls-files.html[git-ls-files]::
+gitlink:git-ls-files[1]::
        Information about files in the cache/working directory
 
-link:git-ls-tree.html[git-ls-tree]::
+gitlink:git-ls-tree[1]::
        Displays a tree object in human readable form
 
-link:git-merge-base.html[git-merge-base]::
+gitlink:git-merge-base[1]::
        Finds as good a common ancestor as possible for a merge
 
-link:git-rev-list.html[git-rev-list]::
-       Lists commit objects in reverse chronological order
+gitlink:git-name-rev[1]::
+       Find symbolic names for given revs
 
-link:git-rev-tree.html[git-rev-tree]::
-       Provides the revision tree for one or more commits
+gitlink:git-rev-list[1]::
+       Lists commit objects in reverse chronological order
 
-link:git-show-index.html[git-show-index]::
+gitlink:git-show-index[1]::
        Displays contents of a pack idx file.
 
-link:git-tar-tree.html[git-tar-tree]::
+gitlink:git-tar-tree[1]::
        Creates a tar archive of the files in the named tree
 
-link:git-unpack-file.html[git-unpack-file]::
+gitlink:git-unpack-file[1]::
        Creates a temporary file with a blob's contents
 
-link:git-var.html[git-var]::
+gitlink:git-var[1]::
        Displays a git logical variable
 
-link:git-verify-pack.html[git-verify-pack]::
-       Validates packed GIT archive files
+gitlink:git-verify-pack[1]::
+       Validates packed git archive files
 
 The interrogate commands may create files - and you can force them to
 touch the working file set - but in general they don't
@@ -162,43 +156,42 @@ touch the working file set - but in general they don't
 Synching repositories
 ~~~~~~~~~~~~~~~~~~~~~
 
-link:git-clone-pack.html[git-clone-pack]::
+gitlink:git-clone-pack[1]::
        Clones a repository into the current repository (engine
        for ssh and local transport)
 
-link:git-fetch-pack.html[git-fetch-pack]::
+gitlink:git-fetch-pack[1]::
        Updates from a remote repository.
 
-link:git-http-fetch.html[git-http-fetch]::
-       Downloads a remote GIT repository via HTTP
-       Previously this command was known as git-http-pull.
+gitlink:git-http-fetch[1]::
+       Downloads a remote git repository via HTTP
 
-link:git-local-fetch.html[git-local-fetch]::
-       Duplicates another GIT repository on a local system
-       Previously this command was known as git-local-pull.
+gitlink:git-local-fetch[1]::
+       Duplicates another git repository on a local system
 
-link:git-peek-remote.html[git-peek-remote]::
+gitlink:git-peek-remote[1]::
        Lists references on a remote repository using upload-pack protocol.
 
-link:git-receive-pack.html[git-receive-pack]::
+gitlink:git-receive-pack[1]::
        Invoked by 'git-send-pack' to receive what is pushed to it.
 
-link:git-send-pack.html[git-send-pack]::
+gitlink:git-send-pack[1]::
        Pushes to a remote repository, intelligently.
 
-link:git-ssh-fetch.html[git-ssh-fetch]::
+gitlink:git-shell[1]::
+       Restricted shell for GIT-only SSH access.
+
+gitlink:git-ssh-fetch[1]::
        Pulls from a remote repository over ssh connection
-       Previously this command was known as git-ssh-pull.
 
-link:git-ssh-upload.html[git-ssh-upload]::
+gitlink:git-ssh-upload[1]::
        Helper "server-side" program used by git-ssh-fetch
-       Previously this command was known as git-ssh-push.
 
-link:git-update-server-info.html[git-update-server-info]::
+gitlink:git-update-server-info[1]::
        Updates auxiliary information on a dumb server to help
        clients discover references and packs on it.
 
-link:git-upload-pack.html[git-upload-pack]::
+gitlink:git-upload-pack[1]::
        Invoked by 'git-clone-pack' and 'git-fetch-pack' to push
        what are asked for.
 
@@ -206,114 +199,97 @@ link:git-upload-pack.html[git-upload-pack]::
 Porcelain-ish Commands
 ----------------------
 
-link:git-add.html[git-add]::
+gitlink:git-add[1]::
        Add paths to the index file.
-       Previously this command was known as git-add-script.
 
-link:git-applymbox.html[git-applymbox]::
+gitlink:git-am[1]::
+       Apply patches from a mailbox, but cooler.
+
+gitlink:git-applymbox[1]::
        Apply patches from a mailbox.
 
-link:git-bisect.html[git-bisect]::
+gitlink:git-bisect[1]::
        Find the change that introduced a bug.
-       Previously this command was known as git-bisect-script.
 
-link:git-branch.html[git-branch]::
+gitlink:git-branch[1]::
        Create and Show branches.
-       Previously this command was known as git-branch-script.
 
-link:git-checkout.html[git-checkout]::
+gitlink:git-checkout[1]::
        Checkout and switch to a branch.
-       Previously this command was known as git-checkout-script.
 
-link:git-cherry-pick.html[git-cherry-pick]::
+gitlink:git-cherry-pick[1]::
        Cherry-pick the effect of an existing commit.
-       Previously this command was known as git-cherry-pick-script.
 
-link:git-clone.html[git-clone]::
+gitlink:git-clone[1]::
        Clones a repository into a new directory.
-       Previously this command was known as git-clone-script.
 
-link:git-commit.html[git-commit]::
+gitlink:git-commit[1]::
        Record changes to the repository.
-       Previously this command was known as git-commit-script.
 
-link:git-diff.html[git-diff]::
+gitlink:git-diff[1]::
        Show changes between commits, commit and working tree, etc.
-       Previously this command was known as git-diff-script.
 
-link:git-fetch.html[git-fetch]::
+gitlink:git-fetch[1]::
        Download from a remote repository via various protocols.
-       Previously this command was known as git-fetch-script.
 
-link:git-format-patch.html[git-format-patch]::
+gitlink:git-format-patch[1]::
        Prepare patches for e-mail submission.
-       Previously this command was known as git-format-patch-script.
 
-link:git-grep.html[git-grep]::
+gitlink:git-grep[1]::
        Print lines matching a pattern
 
-link:git-log.html[git-log]::
+gitlink:git-log[1]::
        Shows commit logs.
-       Previously this command was known as git-log-script.
 
-link:git-ls-remote.html[git-ls-remote]::
+gitlink:git-ls-remote[1]::
        Shows references in a remote or local repository.
-       Previously this command was known as git-ls-remote-script.
 
-link:git-merge.html[git-merge]::
+gitlink:git-merge[1]::
        Grand unified merge driver.
 
-link:git-octopus.html[git-octopus]::
+gitlink:git-mv[1]::
+       Move or rename a file, a directory, or a symlink.
+
+gitlink:git-octopus[1]::
        Merge more than two commits.
-       Previously this command was known as git-octopus-script.
 
-link:git-pull.html[git-pull]::
+gitlink:git-pull[1]::
        Fetch from and merge with a remote repository.
-       Previously this command was known as git-pull-script.
 
-link:git-push.html[git-push]::
+gitlink:git-push[1]::
        Update remote refs along with associated objects.
-       Previously this command was known as git-push-script.
 
-link:git-rebase.html[git-rebase]::
+gitlink:git-rebase[1]::
        Rebase local commits to new upstream head.
-       Previously this command was known as git-rebase-script.
 
-link:git-rename.html[git-rename]::
+gitlink:git-rename[1]::
        Rename files and directories.
-       Previously this command was known as git-rename-script.
 
-link:git-repack.html[git-repack]::
+gitlink:git-repack[1]::
        Pack unpacked objects in a repository.
-       Previously this command was known as git-repack-script.
 
-link:git-reset.html[git-reset]::
+gitlink:git-reset[1]::
        Reset current HEAD to the specified state.
-       Previously this command was known as git-reset-script.
 
-link:git-resolve.html[git-resolve]::
+gitlink:git-resolve[1]::
        Merge two commits.
-       Previously this command was known as git-resolve-script.
 
-link:git-revert.html[git-revert]::
+gitlink:git-revert[1]::
        Revert an existing commit.
-       Previously this command was known as git-revert-script.
 
-link:git-shortlog.html[git-shortlog]::
+gitlink:git-shortlog[1]::
        Summarizes 'git log' output.
 
-link:git-show-branch.html[git-show-branch]::
+gitlink:git-show-branch[1]::
        Show branches and their commits.
 
-link:git-status.html[git-status]::
+gitlink:git-status[1]::
        Shows the working tree status.
-       Previously this command was known as git-status-script.
 
-link:git-verify-tag.html[git-verify-tag]::
+gitlink:git-verify-tag[1]::
        Check the GPG signature of tag.
-       Previously this command was known as git-verify-tag-script.
 
-link:git-whatchanged.html[git-whatchanged]::
+gitlink:git-whatchanged[1]::
        Shows commit logs and differences they introduce.
 
 
@@ -321,95 +297,126 @@ Ancillary Commands
 ------------------
 Manipulators:
 
-link:git-applypatch.html[git-applypatch]::
+gitlink:git-applypatch[1]::
        Apply one patch extracted from an e-mail.
 
-link:git-archimport.html[git-archimport]::
+gitlink:git-archimport[1]::
        Import an arch repository into git.
-       Previously this command was known as git-archimport-script.
 
-link:git-convert-objects.html[git-convert-objects]::
-       Converts old-style GIT repository
-       Previously this command was known as git-convert-cache.
+gitlink:git-convert-objects[1]::
+       Converts old-style git repository
 
-link:git-cvsimport.html[git-cvsimport]::
+gitlink:git-cvsimport[1]::
        Salvage your data out of another SCM people love to hate.
-       Previously this command was known as git-cvsimport-script.
 
-link:git-merge-one-file.html[git-merge-one-file]::
+gitlink:git-merge-one-file[1]::
        The standard helper program to use with "git-merge-index"
-       Previously this command was known as git-merge-one-file-script.
 
-link:git-prune.html[git-prune]::
+gitlink:git-prune[1]::
        Prunes all unreachable objects from the object database
-       Previously this command was known as git-prune-script.
 
-link:git-relink.html[git-relink]::
+gitlink:git-relink[1]::
        Hardlink common objects in local repositories.
-       Previously this command was known as git-relink-script.
 
-link:git-sh-setup.html[git-sh-setup]::
+gitlink:git-svnimport[1]::
+       Import a SVN repository into git.
+
+gitlink:git-sh-setup[1]::
        Common git shell script setup code.
-       Previously this command was known as git-sh-setup-script.
 
-link:git-tag.html[git-tag]::
+gitlink:git-symbolic-ref[1]::
+       Read and modify symbolic refs
+
+gitlink:git-tag[1]::
        An example script to create a tag object signed with GPG
-       Previously this command was known as git-tag-script.
+
+gitlink:git-update-ref[1]::
+       Update the object name stored in a ref safely.
 
 
 Interrogators:
 
-link:git-cherry.html[git-cherry]::
+gitlink:git-check-ref-format[1]::
+       Make sure ref name is well formed.
+
+gitlink:git-cherry[1]::
        Find commits not merged upstream.
 
-link:git-count-objects.html[git-count-objects]::
+gitlink:git-count-objects[1]::
        Count unpacked number of objects and their disk consumption.
-       Previously this command was known as git-count-objects-script.
 
-link:git-daemon.html[git-daemon]::
-       A really simple server for GIT repositories.
+gitlink:git-daemon[1]::
+       A really simple server for git repositories.
 
-link:git-diff-helper.html[git-diff-helper]::
-       Generates patch format output for git-diff-*
-
-link:git-get-tar-commit-id.html[git-get-tar-commit-id]::
+gitlink:git-get-tar-commit-id[1]::
        Extract commit ID from an archive created using git-tar-tree.
 
-link:git-mailinfo.html[git-mailinfo]::
+gitlink:git-mailinfo[1]::
        Extracts patch from a single e-mail message.
 
-link:git-mailsplit.html[git-mailsplit]::
+gitlink:git-mailsplit[1]::
        git-mailsplit.
 
-link:git-patch-id.html[git-patch-id]::
+gitlink:git-patch-id[1]::
        Compute unique ID for a patch.
 
-link:git-parse-remote.html[git-parse-remote]::
+gitlink:git-parse-remote[1]::
        Routines to help parsing $GIT_DIR/remotes/
-       Previously this command was known as git-parse-remote-script.
 
-link:git-request-pull.html[git-request-pull]::
+gitlink:git-request-pull[1]::
        git-request-pull.
-       Previously this command was known as git-request-pull-script.
 
-link:git-rev-parse.html[git-rev-parse]::
+gitlink:git-rev-parse[1]::
        Pick out and massage parameters.
 
-link:git-send-email.html[git-send-email]::
+gitlink:git-send-email[1]::
        Send patch e-mails out of "format-patch --mbox" output.
-       Previously this command was known as git-send-email-script.
 
-link:git-stripspace.html[git-stripspace]::
+gitlink:git-symbolic-refs[1]::
+       Read and modify symbolic refs.
+
+gitlink:git-stripspace[1]::
        Filter out empty lines.
 
 
 Commands not yet documented
 ---------------------------
 
-link:gitk.html[gitk]::
+gitlink:gitk[1]::
        gitk.
 
 
+Configuration Mechanism
+-----------------------
+
+Starting from 0.99.9 (actually mid 0.99.8.GIT), .git/config file
+is used to hold per-repository configuration options.  It is a
+simple text file modelled after `.ini` format familiar to some
+people.  Here is an example:
+
+------------
+#
+# This is the config file, and
+# a '#' or ';' character indicates
+# a comment
+#
+
+; core variables
+[core]
+       ; Don't trust file modes
+       filemode = false
+
+; user identity
+[user]
+       name = "Junio C Hamano"
+       email = "junkio@twinsun.com"
+
+------------
+
+Various commands read from the configuration file and adjust
+their operation accordingly.
+
+
 Identifier Terminology
 ----------------------
 <object>::
@@ -511,16 +518,16 @@ git Commits
 'GIT_AUTHOR_DATE'::
 'GIT_COMMITTER_NAME'::
 'GIT_COMMITTER_EMAIL'::
-       see link:git-commit-tree.html[git-commit-tree]
+       see gitlink:git-commit-tree[1]
 
 git Diffs
 ~~~~~~~~~
 'GIT_DIFF_OPTS'::
 'GIT_EXTERNAL_DIFF'::
        see the "generating patches" section in :
-       link:git-diff-index.html[git-diff-index];
-       link:git-diff-files.html[git-diff-files];
-       link:git-diff-tree.html[git-diff-tree]
+       gitlink:git-diff-index[1];
+       gitlink:git-diff-files[1];
+       gitlink:git-diff-tree[1]
 
 Discussion[[Discussion]]
 ------------------------
@@ -536,5 +543,5 @@ Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index 8e2f479..eb126d7 100644 (file)
@@ -24,6 +24,19 @@ OPTIONS
        Some argument not yet documented.
 
 
+Examples
+--------
+gitk v2.6.12.. include/scsi drivers/scsi::
+
+       Show as the changes since version 'v2.6.12' that changed any
+       file in the include/scsi or drivers/scsi subdirectories
+
+gitk --since="2 weeks ago" -- gitk::
+
+       Show the changes during the last two weeks to the file 'gitk'.
+       The "--" is necessary to avoid confusion with the *branch* named
+       'gitk'
+
 Author
 ------
 Written by Paul Mackerras <paulus@samba.org>
@@ -34,5 +47,5 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 
 GIT
 ---
-Part of the link:git.html[git] suite
+Part of the gitlink:git[7] suite
 
index a069b7b..eb7b471 100644 (file)
@@ -1,5 +1,5 @@
 object::
-       The unit of storage in GIT. It is uniquely identified by
+       The unit of storage in git. It is uniquely identified by
        the SHA1 of its contents. Consequently, an object can not
        be changed.
 
index 57f4720..7ee3571 100644 (file)
@@ -1,6 +1,5 @@
-Hooks used by GIT
+Hooks used by git
 =================
-v0.99.6, Sep 2005
 
 Hooks are little scripts you can place in `$GIT_DIR/hooks`
 directory to trigger action at certain points.  When
index b3b4d2c..d30fa85 100644 (file)
@@ -245,7 +245,7 @@ gb=$(tput setab 2)
 rb=$(tput setab 1)
 restore=$(tput setab 9)
 
-if [ `git-rev-tree release ^test | wc -c` -gt 0 ]
+if [ `git-rev-list release ^test | wc -c` -gt 0 ]
 then
        echo $rb Warning: commits in release that are not in test $restore
        git-whatchanged release ^test
@@ -262,7 +262,7 @@ do
        status=
        for ref in test release linus
        do
-               if [ `git-rev-tree $branch ^$ref | wc -c` -gt 0 ]
+               if [ `git-rev-list $branch ^$ref | wc -c` -gt 0 ]
                then
                        status=$status${ref:0:1}
                fi
index d593ab9..50638c7 100755 (executable)
@@ -2,7 +2,7 @@
 
 T="$1"
 
-for h in *.html howto/*.txt howto/*.html
+for h in *.html *.txt howto/*.txt howto/*.html
 do
        diff -u -I'Last updated [0-9][0-9]-[A-Z][a-z][a-z]-' "$T/$h" "$h" || {
                echo >&2 "# install $h $T/$h"
@@ -12,7 +12,7 @@ do
        }
 done
 strip_leading=`echo "$T/" | sed -e 's|.|.|g'`
-for th in "$T"/*.html "$T"/howto/*.txt "$T"/howto/*.html
+for th in "$T"/*.html "$T"/*.txt "$T"/howto/*.txt "$T"/howto/*.html
 do
        h=`expr "$th" : "$strip_leading"'\(.*\)'`
        case "$h" in
diff --git a/Documentation/merge-pull-opts.txt b/Documentation/merge-pull-opts.txt
new file mode 100644 (file)
index 0000000..d9164a0
--- /dev/null
@@ -0,0 +1,14 @@
+-n, --no-summary::
+       Do not show diffstat at the end of the merge.
+
+--no-commit::
+       Perform the merge but pretend the merge failed and do
+       not autocommit, to give the user a chance to inspect and
+       further tweak the merge result before committing.
+
+-s <strategy>::
+       use that merge strategy; can be given more than once to
+       specify them in the order they should be tried.  If
+       there is no `-s` option, built-in list of strategies is
+       used instead (`git-merge-resolve` when merging a single
+       head, `git-merge-octopus` otherwise).
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt
new file mode 100644 (file)
index 0000000..3ec56d2
--- /dev/null
@@ -0,0 +1,35 @@
+MERGE STRATEGIES
+----------------
+
+resolve::
+       This can only resolve two heads (i.e. the current branch
+       and another branch you pulled from) using 3-way merge
+       algorithm.  It tries to carefully detect criss-cross
+       merge ambiguities and is considered generally safe and
+       fast.  This is the default merge strategy when pulling
+       one branch.
+
+recursive::
+       This can only resolve two heads using 3-way merge
+       algorithm.  When there are more than one common
+       ancestors that can be used for 3-way merge, it creates a
+       merged tree of the common ancestores and uses that as
+       the reference tree for the 3-way merge.  This has been
+       reported to result in fewer merge conflicts without
+       causing mis-merges by tests done on actual merge commits
+       taken from Linux 2.6 kernel development history.
+       Additionally this can detect and handle merges involving
+       renames.
+
+octopus::
+       This resolves more than two-head case, but refuses to do
+       complex merge that needs manual resolution.  It is
+       primarily meant to be used for bundling topic branch
+       heads together.  This is the default merge strategy when
+       pulling more than one branch.
+
+ours::
+       This resolves any number of heads, but the result of the
+       merge is always the current branch head.  It is meant to
+       be used to supersede old development history of side
+       branches.
index 8642182..5c2888e 100644 (file)
 <repository>::
-       The "remote" repository to pull from.  One of the
-       following notations can be used to name the repository
-       to pull from:
-
-               Rsync URL
-                       rsync://remote.machine/path/to/repo.git/
-
-               HTTP(s) URL
-                       http://remote.machine/path/to/repo.git/
-
-               GIT URL
-                       git://remote.machine/path/to/repo.git/
-                       remote.machine:/path/to/repo.git/
-
-               Local directory
-                       /path/to/repo.git/
-
-       In addition to the above, as a short-hand, the name of a
-       file in $GIT_DIR/remotes directory can be given; the
-       named file should be in the following format:
-
-               URL: one of the above URL format
-               Push: <refspec>...
-               Pull: <refspec>...
-
-       When such a short-hand is specified in place of
-       <repository> without <refspec> parameters on the command
-       line, <refspec>... specified on Push lines or Pull lines
-       are used for "git push" and "git fetch/pull",
-       respectively.
-
-       The name of a file in $GIT_DIR/branches directory can be
-       specified as an older notation short-hand; the named
-       file should contain a single line, a URL in one of the
-       above formats, optionally followed by a hash '#' and the
-       name of remote head (URL fragment notation).
-       $GIT_DIR/branches/<remote> file that stores a <url>
-       without the fragment is equivalent to have this in the
-       corresponding file in the $GIT_DIR/remotes/ directory
-
-               URL: <url>
-               Pull: refs/heads/master:<remote>
-
-       while having <url>#<head> is equivalent to
-
-               URL: <url>
-               Pull: refs/heads/<head>:<remote>
+       The "remote" repository that is the source of a fetch
+       or pull operation, or the destination of a push operation.
+       One of the following notations can be used
+       to name the remote repository:
++
+===============================================================
+- Rsync URL:           rsync://remote.machine/path/to/repo.git/
+- HTTP(s) URL:         http://remote.machine/path/to/repo.git/
+- git URL:             git://remote.machine/path/to/repo.git/
+                       or remote.machine:/path/to/repo.git/
+- Local directory:     /path/to/repo.git/
+===============================================================
++
+In addition to the above, as a short-hand, the name of a
+file in `$GIT_DIR/remotes` directory can be given; the
+named file should be in the following format:
++
+       URL: one of the above URL format
+       Push: <refspec>
+       Pull: <refspec>
++
+When such a short-hand is specified in place of
+<repository> without <refspec> parameters on the command
+line, <refspec> specified on `Push:` lines or `Pull:`
+lines are used for `git-push` and `git-fetch`/`git-pull`,
+respectively.  Multiple `Push:` and and `Pull:` lines may
+be specified for additional branch mappings.
++
+The name of a file in `$GIT_DIR/branches` directory can be
+specified as an older notation short-hand; the named
+file should contain a single line, a URL in one of the
+above formats, optionally followed by a hash `#` and the
+name of remote head (URL fragment notation).
+`$GIT_DIR/branches/<remote>` file that stores a <url>
+without the fragment is equivalent to have this in the
+corresponding file in the `$GIT_DIR/remotes/` directory.
++
+       URL: <url>
+       Pull: refs/heads/master:<remote>
++
+while having `<url>#<head>` is equivalent to
++
+       URL: <url>
+       Pull: refs/heads/<head>:<remote>
 
 <refspec>::
        The canonical format of a <refspec> parameter is
-       '+?<src>:<dst>'; that is, an optional plus '+', followed
-       by the source ref, followed by a colon ':', followed by
+       `+?<src>:<dst>`; that is, an optional plus `+`, followed
+       by the source ref, followed by a colon `:`, followed by
        the destination ref.
++
+When used in `git-push`, the <src> side can be an
+arbitrary "SHA1 expression" that can be used as an
+argument to `git-cat-file -t`.  E.g. `master~4` (push
+four parents before the current master head).
++
+For `git-push`, the local ref that matches <src> is used
+to fast forward the remote ref that matches <dst>.  If
+the optional plus `+` is used, the remote ref is updated
+even if it does not result in a fast forward update.
++
+For `git-fetch` and `git-pull`, the remote ref that matches <src>
+is fetched, and if <dst> is not empty string, the local
+ref that matches it is fast forwarded using <src>.
+Again, if the optional plus `+` is used, the local ref
+is updated even if it does not result in a fast forward
+update.
++
+[NOTE]
+If the remote branch from which you want to pull is
+modified in non-linear ways such as being rewound and
+rebased frequently, then a pull will attempt a merge with
+an older version of itself, likely conflict, and fail.
+It is under these conditions that you would want to use
+the `+` sign to indicate non-fast-forward updates will
+be needed.  There is currently no easy way to determine
+or declare that a branch will be made available in a
+repository with this behavior; the pulling user simply
+must know this is the expected usage pattern for a branch.
++
+[NOTE]
+You never do your own development on branches that appear
+on the right hand side of a <refspec> colon on `Pull:` lines;
+they are to be updated by `git-fetch`.  If you intend to do
+development derived from a remote branch `B`, have a `Pull:`
+line to track it (i.e. `Pull: B:remote-B`), and have a separate
+branch `my-B` to do your development on top of it.  The latter
+is created by `git branch my-B remote-B` (or its equivalent `git
+checkout -b my-B remote-B`).  Run `git fetch` to keep track of
+the progress of the remote side, and when you see something new
+on the remote branch, merge it into your development branch with
+`git pull . remote-B`, while you are on `my-B` branch.
+The common `Pull: master:origin` mapping of a remote `master`
+branch to a local `origin` branch, which is then merged to a
+ocal development branch, again typically named `master`, is made
+when you run `git clone` for you to follow this pattern.
++
+[NOTE]
+There is a difference between listing multiple <refspec>
+directly on `git-pull` command line and having multiple
+`Pull:` <refspec> lines for a <repository> and running
+`git-pull` command without any explicit <refspec> parameters.
+<refspec> listed explicitly on the command line are always
+merged into the current branch after fetching.  In other words,
+if you list more than one remote refs, you would be making
+an Octopus.  While `git-pull` run without any explicit <refspec>
+parameter takes default <refspec>s from `Pull:` lines, it
+merges only the first <refspec> found into the current branch,
+after fetching all the remote refs.  This is because making an
+Octopus from remote refs is rarely done, while keeping track
+of multiple remote heads in one-go by fetching more than one
+is often useful.
++
+Some short-cut notations are also supported.
++
+* For backward compatibility, `tag` is almost ignored;
+  it just makes the following parameter <tag> to mean a
+  refspec `refs/tags/<tag>:refs/tags/<tag>`.
+* A parameter <ref> without a colon is equivalent to
+  <ref>: when pulling/fetching, and <ref>`:`<ref> when
+  pushing.  That is, do not store it locally if
+  fetching, and update the same name if pushing.
 
-       When used in "git push", the <src> side can be an
-       arbitrary "SHA1 expression" that can be used as an
-       argument to "git-cat-file -t".  E.g. "master~4" (push
-       four parents before the current master head).
-
-        For "git push", the local ref that matches <src> is used
-        to fast forward the remote ref that matches <dst>.  If
-        the optional plus '+' is used, the remote ref is updated
-        even if it does not result in a fast forward update.
-
-       For "git fetch/pull", the remote ref that matches <src>
-       is fetched, and if <dst> is not empty string, the local
-       ref that matches it is fast forwarded using <src>.
-       Again, if the optional plus '+' is used, the local ref
-       is updated even if it does not result in a fast forward
-       update.
-
-       Some short-cut notations are also supported.
-
-       * For backward compatibility, "tag" is almost ignored;
-          it just makes the following parameter <tag> to mean a
-          refspec "refs/tags/<tag>:refs/tags/<tag>".
-
-        * A parameter <ref> without a colon is equivalent to
-          <ref>: when pulling/fetching, and <ref>:<ref> when
-          pushing.  That is, do not store it locally if
-          fetching, and update the same name if pushing.
-
--a, \--append::
-       Append ref names and object names of fetched refs to the
-       existing contents of $GIT_DIR/FETCH_HEAD.  Without this
-       option old data in $GIT_DIR/FETCH_HEAD will be overwritten.
-
--f, \--force::
-       Usually, the command refuses to update a local ref that is
-       not an ancestor of the remote ref used to overwrite it.
-       This flag disables the check.  What this means is that the
-       local repository can lose commits; use it with care.
index d20fa80..1b5f228 100644 (file)
@@ -1,6 +1,5 @@
-GIT repository layout
+git repository layout
 =====================
-v0.99.5, Sep 2005
 
 You may find these things in your git repository (`.git`
 directory for a repository associated with your working tree, or
@@ -120,7 +119,7 @@ info/grafts::
 info/exclude::
        This file, by convention among Porcelains, stores the
        exclude pattern list.  `git status` looks at it, but
-       otherwise it is not looked at by any of the core GIT
+       otherwise it is not looked at by any of the core git
        commands.
 
 remotes::
index b3a9915..24c8410 100644 (file)
@@ -10,6 +10,9 @@ This replaces the index with a different tree, keeping the stat info
 for entries that don't change, and allowing -u to make the minimum
 required changes to the working tree to have it match.
 
+Entries marked '+' have stat information. Spaces marked '*' don't
+affect the result.
+
    index   tree    result
    -----------------------
    *       (empty) (empty)
@@ -20,7 +23,30 @@ required changes to the working tree to have it match.
 Two-way merge
 -------------
 
+It is permitted for the index to lack an entry; this does not prevent
+any case from applying.
+
+If the index exists, it is an error for it not to match either the old
+or the result.
+
+If multiple cases apply, the one used is listed first.
+
+A result which changes the index is an error if the index is not empty
+and not up-to-date.
+
+Entries marked '+' have stat information. Spaces marked '*' don't
+affect the result.
 
+ case  index   old     new     result
+ -------------------------------------
+ 0/2   (empty) *       (empty) (empty)
+ 1/3   (empty) *       new     new
+ 4/5   index+  (empty) (empty) index+
+ 6/7   index+  (empty) index   index+
+ 10    index+  index   (empty) (empty)
+ 14/15 index+  old     old     index+
+ 18/19 index+  old     index   index+
+ 20    index+  index   new     new
 
 Three-way merge
 ---------------
@@ -44,30 +70,28 @@ up-to-date.
 *empty* means that the tree must not have a directory-file conflict
  with the entry.
 
-For multiple ancestors or remotes, a '+' means that this case applies
-even if only one ancestor or remote fits; normally, all of the
-ancestors or remotes must be the same.
+For multiple ancestors, a '+' means that this case applies even if
+only one ancestor or remote fits; a '^' means all of the ancestors
+must be the same.
 
 case  ancest    head    remote    result
 ----------------------------------------
 1     (empty)+  (empty) (empty)   (empty)
 2ALT  (empty)+  *empty* remote    remote
-2ALT  (empty)+  *empty* remote    remote
 2     (empty)^  (empty) remote    no merge
 3ALT  (empty)+  head    *empty*   head
 3     (empty)^  head    (empty)   no merge
 4     (empty)^  head    remote    no merge
 5ALT  *         head    head      head
-6     ancest^   (empty) (empty)   no merge
-8ALT  ancest    (empty) ancest    (empty)
+6     ancest+   (empty) (empty)   no merge
+8     ancest^   (empty) ancest    no merge
 7     ancest+   (empty) remote    no merge
+10    ancest^   ancest  (empty)   no merge
 9     ancest+   head    (empty)   no merge
-10ALT ancest    ancest  (empty)   (empty)
-11    ancest+   head    remote    no merge
 16    anc1/anc2 anc1    anc2      no merge
 13    ancest+   head    ancest    head
 14    ancest+   ancest  remote    remote
-14ALT ancest+   ancest  remote    remote
+11    ancest+   head    remote    no merge
 
 Only #2ALT and #3ALT use *empty*, because these are the only cases
 where there can be conflicts that didn't exist before. Note that we
@@ -89,4 +113,9 @@ right. This is a case of a reverted patch (in some direction, maybe
 multiple times), and the right answer depends on looking at crossings
 of history or common ancestors of the ancestors.
 
-The status as of Sep 5 is that multiple remotes are not supported
\ No newline at end of file
+Note that, between #6, #7, #9, and #11, all cases not otherwise
+covered are handled in this table.
+
+For #8 and #10, there is alternative behavior, not currently
+implemented, where the result is (empty). As currently implemented,
+the automatic merge will generally give this effect.
index 928a22c..214673d 100644 (file)
@@ -1,6 +1,5 @@
 A short git tutorial
 ====================
-v0.99.5, Aug 2005
 
 Introduction
 ------------
@@ -52,7 +51,9 @@ your new project. You will now have a `.git` directory, and you can
 inspect that with `ls`. For your new empty project, it should show you
 three entries, among other things:
 
- - a symlink called `HEAD`, pointing to `refs/heads/master`
+ - a symlink called `HEAD`, pointing to `refs/heads/master` (if your
+   platform does not have native symlinks, it is a file containing the
+   line "ref: refs/heads/master")
 +
 Don't worry about the fact that the file that the `HEAD` link points to
 doesn't even exist yet -- you haven't created the commit that will
@@ -161,7 +162,7 @@ you'll have to use the object name, not the filename of the object:
        git-cat-file -t 557db03de997c86a4a028e1ebd3a1ceb225be238
 
 where the `-t` tells `git-cat-file` to tell you what the "type" of the
-object is. Git will tell you that you have a "blob" object (ie just a
+object is. git will tell you that you have a "blob" object (ie just a
 regular file), and you can see the contents with
 
        git-cat-file "blob" 557db03
@@ -228,6 +229,7 @@ which will spit out
 
 ------------
 diff --git a/hello b/hello
+index 557db03..263414f 100644
 --- a/hello
 +++ b/hello
 @@ -1 +1,2 @@
@@ -290,13 +292,16 @@ also wants to get a commit message
 on its standard input, and it will write out the resulting object name for the
 commit to its standard output.
 
-And this is where we start using the `.git/HEAD` file. The `HEAD` file is
-supposed to contain the reference to the top-of-tree, and since that's
-exactly what `git-commit-tree` spits out, we can do this all with a simple
-shell pipeline:
+And this is where we create the `.git/refs/heads/master` file
+which is pointed at by `HEAD`. This file is supposed to contain
+the reference to the top-of-tree of the master branch, and since
+that's exactly what `git-commit-tree` spits out, we can do this
+all with a sequence of simple shell commands:
 
 ------------------------------------------------
-echo "Initial commit" | git-commit-tree $(git-write-tree) > .git/HEAD
+tree=$(git-write-tree)
+commit=$(echo 'Initial commit' | git-commit-tree $tree)
+git-update-ref HEAD $(commit)
 ------------------------------------------------
 
 which will say:
@@ -378,7 +383,7 @@ come from the working tree or not.
 
 This is not hard to understand, as soon as you realize that git simply
 never knows (or cares) about files that it is not told about
-explicitly. Git will never go *looking* for files to compare, it
+explicitly. git will never go *looking* for files to compare, it
 expects you to tell it what the files are, and that's what the index
 is there for.
 ================
@@ -432,8 +437,8 @@ message headers, and a few one-liners that actually do the
 commit itself (`git-commit`).
 
 
-Checking it out
----------------
+Inspecting Changes
+------------------
 
 While creating changes is useful, it's even more useful if you can tell
 later what changed. The most useful command for this is another of the
@@ -450,6 +455,41 @@ the same diff that we've already seen several times, we can now do
 (again, `-p` means to show the difference as a human-readable patch),
 and it will show what the last commit (in `HEAD`) actually changed.
 
+[NOTE]
+============
+Here is an ASCII art by Jon Loeliger that illustrates how
+various diff-\* commands compare things.
+
+                      diff-tree
+                       +----+
+                       |    |
+                       |    |
+                       V    V
+                    +-----------+
+                    | Object DB |
+                    |  Backing  |
+                    |   Store   |
+                    +-----------+
+                      ^    ^
+                      |    |
+                      |    |  diff-index --cached
+                      |    |
+          diff-index  |    V
+                      |  +-----------+
+                      |  |   Index   |
+                      |  |  "cache"  |
+                      |  +-----------+
+                      |    ^
+                      |    |
+                      |    |  diff-files
+                      |    |
+                      V    V
+                    +-----------+
+                    |  Working  |
+                    | Directory |
+                    +-----------+
+============
+
 More interestingly, you can also give `git-diff-tree` the `-v` flag, which
 tells it to also show the commit message and author and date of the
 commit, and you can tell it to show a whole series of diffs.
@@ -544,7 +584,7 @@ name for the state at that point.
 Copying repositories
 --------------------
 
-Git repositories are normally totally self-sufficient, and it's worth noting
+git repositories are normally totally self-sufficient, and it's worth noting
 that unlike CVS, for example, there is no separate notion of
 "repository" and "working tree". A git repository normally *is* the
 working tree, with the local git information hidden in the `.git`
@@ -692,7 +732,9 @@ other point in the history than the current `HEAD`, you can do so by
 just telling `git checkout` what the base of the checkout would be.
 In other words, if you have an earlier tag or branch, you'd just do
 
-       git checkout -b mybranch earlier-commit
+------------
+git checkout -b mybranch earlier-commit
+------------
 
 and it would create the new branch `mybranch` at the earlier commit,
 and check out the state at that time.
@@ -700,17 +742,29 @@ and check out the state at that time.
 
 You can always just jump back to your original `master` branch by doing
 
-       git checkout master
+------------
+git checkout master
+------------
 
 (or any other branch-name, for that matter) and if you forget which
 branch you happen to be on, a simple
 
-       ls -l .git/HEAD
+------------
+ls -l .git/HEAD
+------------
 
-will tell you where it's pointing. To get the list of branches
-you have, you can say
+will tell you where it's pointing (Note that on platforms with bad or no
+symlink support, you have to execute
 
-       git branch
+------------
+cat .git/HEAD
+------------
+
+instead). To get the list of branches you have, you can say
+
+------------
+git branch
+------------
 
 which is nothing more than a simple script around `ls .git/refs/heads`.
 There will be asterisk in front of the branch you are currently on.
@@ -718,7 +772,9 @@ There will be asterisk in front of the branch you are currently on.
 Sometimes you may wish to create a new branch _without_ actually
 checking it out and switching to it. If so, just use the command
 
-       git branch <branchname> [startingpoint]
+------------
+git branch <branchname> [startingpoint]
+------------
 
 which will simply _create_ the branch, but will not do anything further. 
 You can then later -- once you decide that you want to actually develop
@@ -844,7 +900,6 @@ $ git show-branch master mybranch
  ! [mybranch] Some work.
 --
 +  [master] Merged "mybranch" changes.
-+  [master~1] Some fun.
 ++ [mybranch] Some work.
 ------------------------------------------------
 
@@ -859,15 +914,22 @@ All of them have plus `+` characters in the first column, which
 means they are now part of the `master` branch. Only the "Some
 work" commit has the plus `+` character in the second column,
 because `mybranch` has not been merged to incorporate these
-commits from the master branch.
+commits from the master branch.  The string inside brackets
+before the commit log message is a short name you can use to
+name the commit.  In the above example, 'master' and 'mybranch'
+are branch heads.  'master~1' is the first parent of 'master'
+branch head.  Please see 'git-rev-parse' documentation if you
+see more complex cases.
 
 Now, let's pretend you are the one who did all the work in
 `mybranch`, and the fruit of your hard work has finally been merged
 to the `master` branch. Let's go back to `mybranch`, and run
 resolve to get the "upstream changes" back to your branch.
 
-       git checkout mybranch
-       git resolve HEAD master "Merge upstream changes."
+------------
+git checkout mybranch
+git resolve HEAD master "Merge upstream changes."
+------------
 
 This outputs something like this (the actual commit object names
 would be different)
@@ -946,7 +1008,7 @@ This transport is the same as SSH transport but uses `sh` to run
 both ends on the local machine instead of running other end on
 the remote machine via `ssh`.
 
-GIT Native::
+git Native::
        `git://remote.machine/path/to/repo.git/`
 +
 This transport was designed for anonymous downloading.  Like SSH
@@ -967,13 +1029,13 @@ necessary objects.  Because of this behaviour, they are
 sometimes also called 'commit walkers'.
 +
 The 'commit walkers' are sometimes also called 'dumb
-transports', because they do not require any GIT aware smart
-server like GIT Native transport does.  Any stock HTTP server
+transports', because they do not require any git aware smart
+server like git Native transport does.  Any stock HTTP server
 would suffice.
 +
 There are (confusingly enough) `git-ssh-fetch` and `git-ssh-upload`
 programs, which are 'commit walkers'; they outlived their
-usefulness when GIT Native and SSH transports were introduced,
+usefulness when git Native and SSH transports were introduced,
 and not used by `git pull` or `git push` scripts.
 
 Once you fetch from the remote repository, you `resolve` that
@@ -1001,7 +1063,9 @@ multiple working trees, but disk space is cheap these days.
 
 [NOTE]
 You could even pull from your own repository by
-giving '.' as <remote-repository> parameter to `git pull`.
+giving '.' as <remote-repository> parameter to `git pull`.  This
+is useful when you want to merge a local branch (or more, if you
+are making an Octopus) into the current branch.
 
 It is likely that you will be pulling from the same remote
 repository from time to time. As a short hand, you can store
@@ -1077,19 +1141,23 @@ done only once.
 on the remote machine. The communication between the two over
 the network internally uses an SSH connection.
 
-Your private repository's GIT directory is usually `.git`, but
+Your private repository's git directory is usually `.git`, but
 your public repository is often named after the project name,
 i.e. `<project>.git`. Let's create such a public repository for
 project `my-git`. After logging into the remote machine, create
 an empty directory:
 
-       mkdir my-git.git
+------------
+mkdir my-git.git
+------------
 
-Then, make that directory into a GIT repository by running
+Then, make that directory into a git repository by running
 `git init-db`, but this time, since its name is not the usual
 `.git`, we do things slightly differently:
 
-       GIT_DIR=my-git.git git-init-db
+------------
+GIT_DIR=my-git.git git-init-db
+------------
 
 Make sure this directory is available for others you want your
 changes to be pulled by via the transport of your choice. Also
@@ -1113,7 +1181,9 @@ Your "public repository" is now ready to accept your changes.
 Come back to the machine you have your private repository. From
 there, run this command:
 
-       git push <public-host>:/path/to/my-git.git master
+------------
+git push <public-host>:/path/to/my-git.git master
+------------
 
 This synchronizes your public repository to match the named
 branch head (i.e. `master` in this case) and objects reachable
@@ -1123,7 +1193,9 @@ As a real example, this is how I update my public git
 repository. Kernel.org mirror network takes care of the
 propagation to other publicly visible machines:
 
-       git push master.kernel.org:/pub/scm/git/git.git/ 
+------------
+git push master.kernel.org:/pub/scm/git/git.git/ 
+------------
 
 
 Packing your repository
@@ -1136,7 +1208,9 @@ not so convenient to transport over the network. Since git objects are
 immutable once they are created, there is a way to optimize the
 storage by "packing them together". The command
 
-       git repack
+------------
+git repack
+------------
 
 will do it for you. If you followed the tutorial examples, you
 would have accumulated about 17 objects in `.git/objects/??/`
@@ -1160,7 +1234,9 @@ Our programs are always perfect ;-).
 Once you have packed objects, you do not need to leave the
 unpacked objects that are contained in the pack file anymore.
 
-       git prune-packed
+------------
+git prune-packed
+------------
 
 would remove them for you.
 
@@ -1356,4 +1432,101 @@ fast forward.  You need to pull and merge those other changes
 back before you push your work when it happens.
 
 
+Bundling your work together
+---------------------------
+
+It is likely that you will be working on more than one thing at
+a time.  It is easy to use those more-or-less independent tasks
+using branches with git.
+
+We have already seen how branches work in a previous example,
+with "fun and work" example using two branches.  The idea is the
+same if there are more than two branches.  Let's say you started
+out from "master" head, and have some new code in the "master"
+branch, and two independent fixes in the "commit-fix" and
+"diff-fix" branches:
+
+------------
+$ git show-branch
+! [commit-fix] Fix commit message normalization.
+ ! [diff-fix] Fix rename detection.
+  * [master] Release candidate #1
+---
+ +  [diff-fix] Fix rename detection.
+ +  [diff-fix~1] Better common substring algorithm.
++   [commit-fix] Fix commit message normalization.
+  + [master] Release candidate #1
++++ [diff-fix~2] Pretty-print messages.
+------------
+
+Both fixes are tested well, and at this point, you want to merge
+in both of them.  You could merge in 'diff-fix' first and then
+'commit-fix' next, like this:
+
+------------
+$ git resolve master diff-fix 'Merge fix in diff-fix'
+$ git resolve master commit-fix 'Merge fix in commit-fix'
+------------
+
+Which would result in:
+
+------------
+$ git show-branch
+! [commit-fix] Fix commit message normalization.
+ ! [diff-fix] Fix rename detection.
+  * [master] Merge fix in commit-fix
+---
+  + [master] Merge fix in commit-fix
++ + [commit-fix] Fix commit message normalization.
+  + [master~1] Merge fix in diff-fix
+ ++ [diff-fix] Fix rename detection.
+ ++ [diff-fix~1] Better common substring algorithm.
+  + [master~2] Release candidate #1
++++ [master~3] Pretty-print messages.
+------------
+
+However, there is no particular reason to merge in one branch
+first and the other next, when what you have are a set of truly
+independent changes (if the order mattered, then they are not
+independent by definition).  You could instead merge those two
+branches into the current branch at once.  First let's undo what
+we just did and start over.  We would want to get the master
+branch before these two merges by resetting it to 'master~2':
+
+------------
+$ git reset --hard master~2
+------------
+
+You can make sure 'git show-branch' matches the state before
+those two 'git resolve' you just did.  Then, instead of running
+two 'git resolve' commands in a row, you would pull these two
+branch heads (this is known as 'making an Octopus'):
+
+------------
+$ git pull . commit-fix diff-fix
+$ git show-branch
+! [commit-fix] Fix commit message normalization.
+ ! [diff-fix] Fix rename detection.
+  * [master] Octopus merge of branches 'diff-fix' and 'commit-fix'
+---
+  + [master] Octopus merge of branches 'diff-fix' and 'commit-fix'
++ + [commit-fix] Fix commit message normalization.
+ ++ [diff-fix] Fix rename detection.
+ ++ [diff-fix~1] Better common substring algorithm.
+  + [master~1] Release candidate #1
++++ [master~2] Pretty-print messages.
+------------
+
+Note that you should not do Octopus because you can.  An octopus
+is a valid thing to do and often makes it easier to view the
+commit history if you are pulling more than two independent
+changes at the same time.  However, if you have merge conflicts
+with any of the branches you are merging in and need to hand
+resolve, that is an indication that the development happened in
+those branches were not independent after all, and you should
+merge two at a time, documenting how you resolved the conflicts,
+and the reason why you preferred changes made in one side over
+the other.  Otherwise it would make the project history harder
+to follow, not easier.
+
 [ to be continued.. cvsimports ]
diff --git a/INSTALL b/INSTALL
index 6e336d7..bbb13f3 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -46,6 +46,9 @@ Issues of note:
          transfer, you are probabaly OK if you do not have
          them.
 
+       - expat library; git-http-push uses it for remote lock
+         management over DAV.  Similar to "curl" above, this is optional.
+
        - "GNU diff" to generate patches.  Of course, you don't _have_ to
          generate patches if you don't want to, but let's face it, you'll
          be wanting to. Or why did you get git in the first place?
index cfde69c..56e0fb1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,14 +6,24 @@
 # Define NO_OPENSSL environment variable if you do not have OpenSSL. You will
 # miss out git-rev-list --merge-order. This also implies MOZILLA_SHA1.
 #
-# Define NO_CURL if you do not have curl installed.  git-http-pull is not
-# built, and you cannot use http:// and https:// transports.
+# Define NO_CURL if you do not have curl installed.  git-http-pull and
+# git-http-push are not built, and you cannot use http:// and https://
+# transports.
+#
+# Define CURLDIR=/foo/bar if your curl header and library files are in
+# /foo/bar/include and /foo/bar/lib directories.
+#
+# Define NO_EXPAT if you do not have expat installed.  git-http-push is
+# not built, and you cannot push using http:// and https:// transports.
 #
 # Define NO_STRCASESTR if you don't have strcasestr.
 #
 # Define PPC_SHA1 environment variable when running make to make use of
 # a bundled SHA1 routine optimized for PowerPC.
 #
+# Define ARM_SHA1 environment variable when running make to make use of
+# a bundled SHA1 routine optimized for ARM.
+#
 # Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin).
 #
 # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
 # Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
 # Patrick Mauritz).
 #
-# Define NO_GETDOMAINNAME if your library lack it (SunOS, Patrick Mauritz).
+# Define NO_MMAP if you want to avoid mmap.
 #
 # Define WITH_OWN_SUBPROCESS_PY if you want to use with python 2.3.
 #
+# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
+#
 # Define COLLISION_CHECK below if you believe that SHA1's
 # 1461501637330902918203684832716283019655932542976 hashes do not give you
 # sufficient guarantee that no collisions between objects will ever happen.
 
-# DEFINES += -DCOLLISION_CHECK
-
 # Define USE_NSEC below if you want git to care about sub-second file mtimes
 # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and
 # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely
 # randomly break unless your underlying filesystem supports those sub-second
 # times (my ext3 doesn't).
 
-# DEFINES += -DUSE_NSEC
-
 # 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.
 
-# DEFINES += -DUSE_STDEV
-
-GIT_VERSION = 0.99.7d
+GIT_VERSION = 0.99.9e
 
+# CFLAGS is for the users to override from the command line.
 CFLAGS = -g -O2 -Wall
-ALL_CFLAGS = $(CFLAGS) $(PLATFORM_DEFINES) $(DEFINES)
+ALL_CFLAGS = $(CFLAGS)
 
 prefix = $(HOME)
 bindir = $(prefix)/bin
@@ -57,6 +64,7 @@ GIT_PYTHON_DIR = $(prefix)/share/git-core/python
 
 CC = gcc
 AR = ar
+TAR = tar
 INSTALL = install
 RPMBUILD = rpmbuild
 
@@ -78,43 +86,47 @@ SCRIPT_SH = \
        git-repack.sh git-request-pull.sh git-reset.sh \
        git-resolve.sh git-revert.sh git-sh-setup.sh git-status.sh \
        git-tag.sh git-verify-tag.sh git-whatchanged.sh git.sh \
-       git-applymbox.sh git-applypatch.sh \
+       git-applymbox.sh git-applypatch.sh git-am.sh \
        git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
-       git-merge-resolve.sh git-grep.sh
+       git-merge-resolve.sh git-merge-ours.sh git-grep.sh
 
 SCRIPT_PERL = \
        git-archimport.perl git-cvsimport.perl git-relink.perl \
-       git-rename.perl git-shortlog.perl
+       git-rename.perl git-shortlog.perl git-fmt-merge-msg.perl \
+       git-svnimport.perl git-mv.perl
 
 SCRIPT_PYTHON = \
        git-merge-recursive.py
 
 # The ones that do not have to link with lcrypto nor lz.
 SIMPLE_PROGRAMS = \
-       git-get-tar-commit-id git-mailinfo git-mailsplit git-stripspace \
-       git-daemon git-var
+       git-get-tar-commit-id$X git-mailinfo$X git-mailsplit$X \
+       git-stripspace$X git-var$X git-daemon$X
 
 # ... and all the rest
 PROGRAMS = \
-       git-apply git-cat-file \
-       git-checkout-index git-clone-pack git-commit-tree \
-       git-convert-objects git-diff-files \
-       git-diff-helper git-diff-index git-diff-stages \
-       git-diff-tree git-export git-fetch-pack git-fsck-objects \
-       git-hash-object git-init-db \
-       git-local-fetch git-ls-files git-ls-tree git-merge-base \
-       git-merge-index git-mktag git-pack-objects git-patch-id \
-       git-peek-remote git-prune-packed git-read-tree \
-       git-receive-pack git-rev-list git-rev-parse \
-       git-rev-tree git-send-pack git-show-branch \
-       git-show-index git-ssh-fetch \
-       git-ssh-upload git-tar-tree git-unpack-file \
-       git-unpack-objects git-update-index git-update-server-info \
-       git-upload-pack git-verify-pack git-write-tree \
-       $(SIMPLE_PROGRAMS)
-
-# Backward compatibility -- to be removed in 0.99.8
-PROGRAMS += git-ssh-pull git-ssh-push
+       git-apply$X git-cat-file$X \
+       git-checkout-index$X git-clone-pack$X git-commit-tree$X \
+       git-convert-objects$X git-diff-files$X \
+       git-diff-index$X git-diff-stages$X \
+       git-diff-tree$X git-fetch-pack$X git-fsck-objects$X \
+       git-hash-object$X git-index-pack$X git-init-db$X \
+       git-local-fetch$X git-ls-files$X git-ls-tree$X git-merge-base$X \
+       git-merge-index$X git-mktag$X git-pack-objects$X git-patch-id$X \
+       git-peek-remote$X git-prune-packed$X git-read-tree$X \
+       git-receive-pack$X git-rev-list$X git-rev-parse$X \
+       git-send-pack$X git-show-branch$X git-shell$X \
+       git-show-index$X git-ssh-fetch$X \
+       git-ssh-upload$X git-tar-tree$X git-unpack-file$X \
+       git-unpack-objects$X git-update-index$X git-update-server-info$X \
+       git-upload-pack$X git-verify-pack$X git-write-tree$X \
+       git-update-ref$X git-symbolic-ref$X git-check-ref-format$X \
+       git-name-rev$X $(SIMPLE_PROGRAMS)
+
+# Backward compatibility -- to be removed after 1.0
+PROGRAMS += git-ssh-pull$X git-ssh-push$X
+
+GIT_LIST_TWEAK =
 
 PYMODULES = \
        gitMergeCommon.py
@@ -125,10 +137,8 @@ endif
 
 ifdef WITH_SEND_EMAIL
        SCRIPT_PERL += git-send-email.perl
-endif
-
-ifndef NO_CURL
-       PROGRAMS += git-http-fetch
+else
+       GIT_LIST_TWEAK += -e '/^send-email$$/d'
 endif
 
 LIB_FILE=libgit.a
@@ -140,7 +150,7 @@ LIB_H = \
 
 DIFF_OBJS = \
        diff.o diffcore-break.o diffcore-order.o diffcore-pathspec.o \
-       diffcore-pickaxe.o diffcore-rename.o
+       diffcore-pickaxe.o diffcore-rename.o tree-diff.o
 
 LIB_OBJS = \
        blob.o commit.o connect.o count-delta.o csum-file.o \
@@ -148,19 +158,78 @@ LIB_OBJS = \
        object.o pack-check.o patch-delta.o path.o pkt-line.o \
        quote.o read-cache.o refs.o run-command.o \
        server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
-       tag.o tree.o usage.o $(DIFF_OBJS)
+       tag.o tree.o usage.o config.o environment.o ctype.o copy.o \
+       $(DIFF_OBJS)
 
 LIBS = $(LIB_FILE)
 LIBS += -lz
 
-ifeq ($(shell uname -s),Darwin)
+# Shell quote;
+# Result of this needs to be placed inside ''
+shq = $(subst ','\'',$(1))
+# This has surrounding ''
+shellquote = '$(call shq,$(1))'
+
+#
+# Platform specific tweaks
+#
+
+# We choose to avoid "if .. else if .. else .. endif endif"
+# because maintaining the nesting to match is a pain.  If
+# we had "elif" things would have been much nicer...
+uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
+uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
+
+ifeq ($(uname_S),Darwin)
        NEEDS_SSL_WITH_CRYPTO = YesPlease
        NEEDS_LIBICONV = YesPlease
+       ## fink
+       ALL_CFLAGS += -I/sw/include -L/sw/lib
+       ## darwinports
+       ALL_CFLAGS += -I/opt/local/include -L/opt/local/lib
 endif
-ifeq ($(shell uname -s),SunOS)
+ifeq ($(uname_S),SunOS)
        NEEDS_SOCKET = YesPlease
        NEEDS_NSL = YesPlease
-       PLATFORM_DEFINES += -D__EXTENSIONS__
+       NEEDS_LIBICONV = YesPlease
+       SHELL_PATH = /bin/bash
+       NO_STRCASESTR = YesPlease
+       INSTALL = ginstall
+       TAR = gtar
+       ALL_CFLAGS += -D__EXTENSIONS__
+endif
+ifeq ($(uname_O),Cygwin)
+       NO_STRCASESTR = YesPlease
+       NEEDS_LIBICONV = YesPlease
+       NO_IPV6 = YesPlease
+       X = .exe
+       ALL_CFLAGS += -DUSE_SYMLINK_HEAD=0
+endif
+ifeq ($(uname_S),OpenBSD)
+       NO_STRCASESTR = YesPlease
+       NEEDS_LIBICONV = YesPlease
+       ALL_CFLAGS += -I/usr/local/include -L/usr/local/lib
+endif
+ifneq (,$(findstring arm,$(uname_M)))
+       ARM_SHA1 = YesPlease
+endif
+
+-include config.mak
+
+ifndef NO_CURL
+       ifdef CURLDIR
+               # This is still problematic -- gcc does not want -R.
+               ALL_CFLAGS += -I$(CURLDIR)/include
+               CURL_LIBCURL = -L$(CURLDIR)/lib -R$(CURLDIR)/lib -lcurl
+       else
+               CURL_LIBCURL = -lcurl
+       endif
+       PROGRAMS += git-http-fetch$X
+       ifndef NO_EXPAT
+               EXPAT_LIBEXPAT = -lexpat
+               PROGRAMS += git-http-push$X
+       endif
 endif
 
 ifndef SHELL_PATH
@@ -176,32 +245,34 @@ endif
 ifndef NO_OPENSSL
        LIB_OBJS += epoch.o
        OPENSSL_LIBSSL = -lssl
+       ifdef OPENSSLDIR
+               # Again this may be problematic -- gcc does not always want -R.
+               ALL_CFLAGS += -I$(OPENSSLDIR)/include
+               OPENSSL_LINK = -L$(OPENSSLDIR)/lib -R$(OPENSSLDIR)/lib
+       else
+               OPENSSL_LINK =
+       endif
 else
-       DEFINES += '-DNO_OPENSSL'
+       ALL_CFLAGS += -DNO_OPENSSL
        MOZILLA_SHA1 = 1
        OPENSSL_LIBSSL =
 endif
 ifdef NEEDS_SSL_WITH_CRYPTO
-       LIB_4_CRYPTO = -lcrypto -lssl
+       LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
 else
-       LIB_4_CRYPTO = -lcrypto
+       LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
 endif
 ifdef NEEDS_LIBICONV
-       LIB_4_ICONV = -liconv
-else
-       LIB_4_ICONV =
-endif
-ifdef MOZILLA_SHA1
-       SHA1_HEADER = "mozilla-sha1/sha1.h"
-       LIB_OBJS += mozilla-sha1/sha1.o
-else
-       ifdef PPC_SHA1
-               SHA1_HEADER = "ppc/sha1.h"
-               LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
+       ifdef ICONVDIR
+               # Again this may be problematic -- gcc does not always want -R.
+               ALL_CFLAGS += -I$(ICONVDIR)/include
+               ICONV_LINK = -L$(ICONVDIR)/lib -R$(ICONVDIR)/lib
        else
-               SHA1_HEADER = <openssl/sha.h>
-               LIBS += $(LIB_4_CRYPTO)
+               ICONV_LINK =
        endif
+       LIB_4_ICONV = $(ICONV_LINK) -liconv
+else
+       LIB_4_ICONV =
 endif
 ifdef NEEDS_SOCKET
        LIBS += -lsocket
@@ -212,17 +283,43 @@ ifdef NEEDS_NSL
        SIMPLE_LIB += -lnsl
 endif
 ifdef NO_STRCASESTR
-       DEFINES += -Dstrcasestr=gitstrcasestr
+       ALL_CFLAGS += -Dstrcasestr=gitstrcasestr -DNO_STRCASESTR=1
        LIB_OBJS += compat/strcasestr.o
 endif
+ifdef NO_MMAP
+       ALL_CFLAGS += -Dmmap=gitfakemmap -Dmunmap=gitfakemunmap -DNO_MMAP
+       LIB_OBJS += compat/mmap.o
+endif
+ifdef NO_IPV6
+       ALL_CFLAGS += -DNO_IPV6 -Dsockaddr_storage=sockaddr_in
+endif
 
-DEFINES += '-DSHA1_HEADER=$(SHA1_HEADER)'
+ifdef PPC_SHA1
+       SHA1_HEADER = "ppc/sha1.h"
+       LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
+else
+ifdef ARM_SHA1
+       SHA1_HEADER = "arm/sha1.h"
+       LIB_OBJS += arm/sha1.o arm/sha1_arm.o
+else
+ifdef MOZILLA_SHA1
+       SHA1_HEADER = "mozilla-sha1/sha1.h"
+       LIB_OBJS += mozilla-sha1/sha1.o
+else
+       SHA1_HEADER = <openssl/sha.h>
+       LIBS += $(LIB_4_CRYPTO)
+endif
+endif
+endif
+
+ALL_CFLAGS += -DSHA1_HEADER=$(call shellquote,$(SHA1_HEADER))
 
 SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
          $(patsubst %.perl,%,$(SCRIPT_PERL)) \
          $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
-         gitk
+         gitk git-cherry-pick
 
+export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
 ### Build rules
 
 all: $(PROGRAMS) $(SCRIPTS)
@@ -232,56 +329,68 @@ all:
 
 git: git.sh Makefile
        rm -f $@+ $@
-       sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' <$@.sh >$@+
+       sed -e '1s|#!.*/sh|#!$(call shq,$(SHELL_PATH))|' \
+           -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
+           -e 's/@@X@@/$(X)/g' \
+           $(GIT_LIST_TWEAK) <$@.sh >$@+
        chmod +x $@+
        mv $@+ $@
 
 $(filter-out git,$(patsubst %.sh,%,$(SCRIPT_SH))) : % : %.sh
        rm -f $@
-       sed -e '1s|#!.*/sh|#!$(SHELL_PATH)|' $@.sh >$@
+       sed -e '1s|#!.*/sh|#!$(call shq,$(SHELL_PATH))|' \
+           -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
+           $@.sh >$@
        chmod +x $@
 
 $(patsubst %.perl,%,$(SCRIPT_PERL)) : % : %.perl
        rm -f $@
-       sed -e '1s|#!.*perl|#!$(PERL_PATH)|' $@.perl >$@
+       sed -e '1s|#!.*perl|#!$(call shq,$(PERL_PATH))|' \
+           -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
+           $@.perl >$@
        chmod +x $@
 
 $(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py
        rm -f $@
-       sed -e '1s|#!.*python|#!$(PYTHON_PATH)|' \
-           -e 's|@@GIT_PYTHON_PATH@@|$(GIT_PYTHON_DIR)|g' \
-               $@.py >$@
+       sed -e '1s|#!.*python|#!$(call shq,$(PYTHON_PATH))|' \
+           -e 's|@@GIT_PYTHON_PATH@@|$(call shq,$(GIT_PYTHON_DIR))|g' \
+           -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
+           $@.py >$@
        chmod +x $@
 
+git-cherry-pick: git-revert
+       cp $< $@
+
 %.o: %.c
        $(CC) -o $*.o -c $(ALL_CFLAGS) $<
 %.o: %.S
        $(CC) -o $*.o -c $(ALL_CFLAGS) $<
 
-git-%: %.o $(LIB_FILE)
+git-%$X: %.o $(LIB_FILE)
        $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)
 
-git-mailinfo : SIMPLE_LIB += $(LIB_4_ICONV)
+git-mailinfo$X : SIMPLE_LIB += $(LIB_4_ICONV)
 $(SIMPLE_PROGRAMS) : $(LIB_FILE)
-$(SIMPLE_PROGRAMS) : git-% : %.o
+$(SIMPLE_PROGRAMS) : git-%$X : %.o
        $(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIB_FILE) $(SIMPLE_LIB)
 
-git-http-fetch: fetch.o
-git-local-fetch: fetch.o
-git-ssh-fetch: rsh.o fetch.o
-git-ssh-upload: rsh.o
-git-ssh-pull: rsh.o fetch.o
-git-ssh-push: rsh.o
+git-http-fetch$X: fetch.o
+git-local-fetch$X: fetch.o
+git-ssh-fetch$X: rsh.o fetch.o
+git-ssh-upload$X: rsh.o
+git-ssh-pull$X: rsh.o fetch.o
+git-ssh-push$X: rsh.o
 
-git-http-fetch: LIBS += -lcurl
-git-rev-list: LIBS += $(OPENSSL_LIBSSL)
+git-http-fetch$X: LIBS += $(CURL_LIBCURL)
+git-http-push$X: LIBS += $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
+git-rev-list$X: LIBS += $(OPENSSL_LIBSSL)
 
 init-db.o: init-db.c
        $(CC) -c $(ALL_CFLAGS) \
-               -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir)"' $*.c
+               -DDEFAULT_GIT_TEMPLATE_DIR=$(call shellquote,"$(template_dir)") $*.c
 
 $(LIB_OBJS): $(LIB_H)
-$(patsubst git-%,%.o,$(PROGRAMS)): $(LIB_H)
+$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H)
 $(DIFF_OBJS): diffcore.h
 
 $(LIB_FILE): $(LIB_OBJS)
@@ -296,10 +405,10 @@ doc:
 test: all
        $(MAKE) -C t/ all
 
-test-date: test-date.c date.o
-       $(CC) $(ALL_CFLAGS) -o $@ test-date.c date.o
+test-date$X: test-date.c date.o ctype.o
+       $(CC) $(ALL_CFLAGS) -o $@ test-date.c date.o ctype.o
 
-test-delta: test-delta.c diff-delta.o patch-delta.o
+test-delta$X: test-delta.c diff-delta.o patch-delta.o
        $(CC) $(ALL_CFLAGS) -o $@ $^
 
 check:
@@ -310,13 +419,11 @@ check:
 ### Installation rules
 
 install: $(PROGRAMS) $(SCRIPTS)
-       $(INSTALL) -d -m755 $(DESTDIR)$(bindir)
-       $(INSTALL) $(PROGRAMS) $(SCRIPTS) $(DESTDIR)$(bindir)
-       $(INSTALL) git-revert $(DESTDIR)$(bindir)/git-cherry-pick
-       sh ./cmd-rename.sh $(DESTDIR)$(bindir)
+       $(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(bindir))
+       $(INSTALL) $(PROGRAMS) $(SCRIPTS) $(call shellquote,$(DESTDIR)$(bindir))
        $(MAKE) -C templates install
-       $(INSTALL) -d -m755 $(DESTDIR)$(GIT_PYTHON_DIR)
-       $(INSTALL) $(PYMODULES) $(DESTDIR)$(GIT_PYTHON_DIR)
+       $(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(GIT_PYTHON_DIR))
+       $(INSTALL) $(PYMODULES) $(call shellquote,$(DESTDIR)$(GIT_PYTHON_DIR))
 
 install-doc:
        $(MAKE) -C Documentation install
@@ -334,7 +441,7 @@ dist: git-core.spec git-tar-tree
        ./git-tar-tree HEAD $(GIT_TARNAME) > $(GIT_TARNAME).tar
        @mkdir -p $(GIT_TARNAME)
        @cp git-core.spec $(GIT_TARNAME)
-       tar rf $(GIT_TARNAME).tar $(GIT_TARNAME)/git-core.spec
+       $(TAR) rf $(GIT_TARNAME).tar $(GIT_TARNAME)/git-core.spec
        @rm -rf $(GIT_TARNAME)
        gzip -f -9 $(GIT_TARNAME).tar
 
@@ -343,20 +450,20 @@ rpm: dist
 
 deb: dist
        rm -rf $(GIT_TARNAME)
-       tar zxf $(GIT_TARNAME).tar.gz
+       $(TAR) zxf $(GIT_TARNAME).tar.gz
        dpkg-source -b $(GIT_TARNAME)
        cd $(GIT_TARNAME) && fakeroot debian/rules binary
 
 ### Cleaning rules
 
 clean: