
		Git installation

Normally you can just do "make" followed by "make install", and that
will install the git programs in your own ~/bin/ directory.  If you want
to do a global install, you can do

	$ make prefix=/usr all doc info ;# as yourself
	# make prefix=/usr install install-doc install-info ;# as root

(or prefix=/usr/local, of course).  Just like any program suite
that uses $prefix, the built results have some paths encoded,
which are derived from $prefix, so "make all; make prefix=/usr
install" would not work.

Alternatively you can use autoconf generated ./configure script to
set up install paths (via config.mak.autogen), so you can write instead

	$ make configure ;# as yourself
	$ ./configure --prefix=/usr ;# as yourself
	$ make all doc ;# as yourself
	# make install install-doc ;# as root


Issues of note:

 - git normally installs a helper script wrapper called "git", which
   conflicts with a similarly named "GNU interactive tools" program.

   Tough.  Either don't use the wrapper script, or delete the old GNU
   interactive tools.  None of the core git stuff needs the wrapper,
   it's just a convenient shorthand and while it is documented in some
   places, you can always replace "git commit" with "git-commit"
   instead.

   But let's face it, most of us don't have GNU interactive tools, and
   even if we had it, we wouldn't know what it does.  I don't think it
   has been actively developed since 1997, and people have moved over to
   graphical file managers.

 - You can use git after building but without installing if you
   wanted to.  Various git commands need to find other git
   commands and scripts to do their work, so you would need to
   arrange a few environment variables to tell them that their
   friends will be found in your built source area instead of at
   their standard installation area.  Something like this works
   for me:

	GIT_EXEC_PATH=`pwd`
	PATH=`pwd`:$PATH
	GITPERLLIB=`pwd`/perl/blib/lib
	export GIT_EXEC_PATH PATH GITPERLLIB

 - Git is reasonably self-sufficient, but does depend on a few external
   programs and libraries:

	- "zlib", the compression library. Git won't build without it.

	- "openssl".  Unless you specify otherwise, you'll get the SHA1
	  library from here.

	  If you don't have openssl, you can use one of the SHA1 libraries
	  that come with git (git includes the one from Mozilla, and has
	  its own PowerPC and ARM optimized ones too - see the Makefile).

	- "libcurl" and "curl" executable.  git-http-fetch and
	  git-fetch use them.  If you do not use http
	  transfer, you are probably 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.

        - "wish", the Tcl/Tk windowing shell is used in gitk to show the
          history graphically, and in git-gui.

	- "ssh" is used to push and pull over the net

	- "perl" and POSIX-compliant shells are needed to use most of
	  the barebone Porcelainish scripts.

	- "cpio" is used by git-merge for saving and restoring the index,
	  and by git-clone when doing a local (possibly hardlinked) clone.

 - Some platform specific issues are dealt with Makefile rules,
   but depending on your specific installation, you may not
   have all the libraries/tools needed, or you may have
   necessary libraries at unusual locations.  Please look at the
   top of the Makefile to see what can be adjusted for your needs.
   You can place local settings in config.mak and the Makefile
   will include them.  Note that config.mak is not distributed;
   the name is reserved for local settings.

 - To build and install documentation suite, you need to have
   the asciidoc/xmlto toolchain.  Because not many people are
   inclined to install the tools, the default build target
   ("make all") does _not_ build them.

   Building and installing the info file additionally requires
   makeinfo and docbook2X.  Version 0.8.3 is known to work.

   The documentation is written for AsciiDoc 7, but "make
   ASCIIDOC8=YesPlease doc" will let you format with AsciiDoc 8.

   Alternatively, pre-formatted documentation are available in
   "html" and "man" branches of the git repository itself.  For
   example, you could:

	$ mkdir manual && cd manual
	$ git init
	$ git fetch-pack git://git.kernel.org/pub/scm/git/git.git man html |
	  while read a b
	  do
	    echo $a >.git/$b
	  done
	$ cp .git/refs/heads/man .git/refs/heads/master
	$ git checkout

   to checkout the pre-built man pages.  Also in this repository:

	$ git checkout html

   would instead give you a copy of what you see at:

	http://www.kernel.org/pub/software/scm/git/docs/

   It has been reported that docbook-xsl version 1.72 and 1.73 are
   buggy; 1.72 misformats manual pages for callouts, and 1.73 needs
   the patch in contrib/patches/docbook-xsl-manpages-charmap.patch
