git(1)
======

NAME
----
git - the stupid content tracker


SYNOPSIS
--------
[verse]
'git' [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
    [-p|--paginate|--no-pager] [--no-replace-objects]
    [--bare] [--git-dir=<path>] [--work-tree=<path>]
    [-c <name>=<value>]
    [--help] <command> [<args>]

DESCRIPTION
-----------
Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

See linkgit:gittutorial[7] to get started, then see
link:everyday.html[Everyday Git] for a useful minimum set of commands, and
"man git-commandname" for documentation of each command.  CVS users may
also want to read linkgit:gitcvs-migration[7].  See
the link:user-manual.html[Git User's Manual] for a more in-depth
introduction.

The '<command>' is either a name of a Git command (see below) or an alias
as defined in the configuration file (see linkgit:git-config[1]).

Formatted and hyperlinked version of the latest git
documentation can be viewed at
`http://www.kernel.org/pub/software/scm/git/docs/`.

ifdef::stalenotes[]
[NOTE]
============

You are reading the documentation for the latest (possibly
unreleased) version of git, that is available from 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:

* link:v1.7.6.4/git.html[documentation for release 1.7.6.4]

* release notes for
  link:RelNotes/1.7.6.4.txt[1.7.6.4],
  link:RelNotes/1.7.6.3.txt[1.7.6.3],
  link:RelNotes/1.7.6.2.txt[1.7.6.2],
  link:RelNotes/1.7.6.1.txt[1.7.6.1],
  link:RelNotes/1.7.6.txt[1.7.6].

* link:v1.7.5.4/git.html[documentation for release 1.7.5.4]

* release notes for
  link:RelNotes/1.7.5.4.txt[1.7.5.4],
  link:RelNotes/1.7.5.3.txt[1.7.5.3],
  link:RelNotes/1.7.5.2.txt[1.7.5.2],
  link:RelNotes/1.7.5.1.txt[1.7.5.1],
  link:RelNotes/1.7.5.txt[1.7.5].

* link:v1.7.4.5/git.html[documentation for release 1.7.4.5]

* release notes for
  link:RelNotes/1.7.4.5.txt[1.7.4.5],
  link:RelNotes/1.7.4.4.txt[1.7.4.4],
  link:RelNotes/1.7.4.3.txt[1.7.4.3],
  link:RelNotes/1.7.4.2.txt[1.7.4.2],
  link:RelNotes/1.7.4.1.txt[1.7.4.1],
  link:RelNotes/1.7.4.txt[1.7.4].

* link:v1.7.3.5/git.html[documentation for release 1.7.3.5]

* release notes for
  link:RelNotes/1.7.3.5.txt[1.7.3.5],
  link:RelNotes/1.7.3.4.txt[1.7.3.4],
  link:RelNotes/1.7.3.3.txt[1.7.3.3],
  link:RelNotes/1.7.3.2.txt[1.7.3.2],
  link:RelNotes/1.7.3.1.txt[1.7.3.1],
  link:RelNotes/1.7.3.txt[1.7.3].

* link:v1.7.2.5/git.html[documentation for release 1.7.2.5]

* release notes for
  link:RelNotes/1.7.2.5.txt[1.7.2.5],
  link:RelNotes/1.7.2.4.txt[1.7.2.4],
  link:RelNotes/1.7.2.3.txt[1.7.2.3],
  link:RelNotes/1.7.2.2.txt[1.7.2.2],
  link:RelNotes/1.7.2.1.txt[1.7.2.1],
  link:RelNotes/1.7.2.txt[1.7.2].

* link:v1.7.1.4/git.html[documentation for release 1.7.1.4]

* release notes for
  link:RelNotes/1.7.1.4.txt[1.7.1.4],
  link:RelNotes/1.7.1.3.txt[1.7.1.3],
  link:RelNotes/1.7.1.2.txt[1.7.1.2],
  link:RelNotes/1.7.1.1.txt[1.7.1.1],
  link:RelNotes/1.7.1.txt[1.7.1].

* link:v1.7.0.9/git.html[documentation for release 1.7.0.9]

* release notes for
  link:RelNotes/1.7.0.9.txt[1.7.0.9],
  link:RelNotes/1.7.0.8.txt[1.7.0.8],
  link:RelNotes/1.7.0.7.txt[1.7.0.7],
  link:RelNotes/1.7.0.6.txt[1.7.0.6],
  link:RelNotes/1.7.0.5.txt[1.7.0.5],
  link:RelNotes/1.7.0.4.txt[1.7.0.4],
  link:RelNotes/1.7.0.3.txt[1.7.0.3],
  link:RelNotes/1.7.0.2.txt[1.7.0.2],
  link:RelNotes/1.7.0.1.txt[1.7.0.1],
  link:RelNotes/1.7.0.txt[1.7.0].

* link:v1.6.6.3/git.html[documentation for release 1.6.6.3]

* release notes for
  link:RelNotes/1.6.6.3.txt[1.6.6.3],
  link:RelNotes/1.6.6.2.txt[1.6.6.2],
  link:RelNotes/1.6.6.1.txt[1.6.6.1],
  link:RelNotes/1.6.6.txt[1.6.6].

* link:v1.6.5.9/git.html[documentation for release 1.6.5.9]

* release notes for
  link:RelNotes/1.6.5.9.txt[1.6.5.9],
  link:RelNotes/1.6.5.8.txt[1.6.5.8],
  link:RelNotes/1.6.5.7.txt[1.6.5.7],
  link:RelNotes/1.6.5.6.txt[1.6.5.6],
  link:RelNotes/1.6.5.5.txt[1.6.5.5],
  link:RelNotes/1.6.5.4.txt[1.6.5.4],
  link:RelNotes/1.6.5.3.txt[1.6.5.3],
  link:RelNotes/1.6.5.2.txt[1.6.5.2],
  link:RelNotes/1.6.5.1.txt[1.6.5.1],
  link:RelNotes/1.6.5.txt[1.6.5].

* link:v1.6.4.5/git.html[documentation for release 1.6.4.5]

* release notes for
  link:RelNotes/1.6.4.5.txt[1.6.4.5],
  link:RelNotes/1.6.4.4.txt[1.6.4.4],
  link:RelNotes/1.6.4.3.txt[1.6.4.3],
  link:RelNotes/1.6.4.2.txt[1.6.4.2],
  link:RelNotes/1.6.4.1.txt[1.6.4.1],
  link:RelNotes/1.6.4.txt[1.6.4].

* link:v1.6.3.4/git.html[documentation for release 1.6.3.4]

* release notes for
  link:RelNotes/1.6.3.4.txt[1.6.3.4],
  link:RelNotes/1.6.3.3.txt[1.6.3.3],
  link:RelNotes/1.6.3.2.txt[1.6.3.2],
  link:RelNotes/1.6.3.1.txt[1.6.3.1],
  link:RelNotes/1.6.3.txt[1.6.3].

* release notes for
  link:RelNotes/1.6.2.5.txt[1.6.2.5],
  link:RelNotes/1.6.2.4.txt[1.6.2.4],
  link:RelNotes/1.6.2.3.txt[1.6.2.3],
  link:RelNotes/1.6.2.2.txt[1.6.2.2],
  link:RelNotes/1.6.2.1.txt[1.6.2.1],
  link:RelNotes/1.6.2.txt[1.6.2].

* link:v1.6.1.3/git.html[documentation for release 1.6.1.3]

* release notes for
  link:RelNotes/1.6.1.3.txt[1.6.1.3],
  link:RelNotes/1.6.1.2.txt[1.6.1.2],
  link:RelNotes/1.6.1.1.txt[1.6.1.1],
  link:RelNotes/1.6.1.txt[1.6.1].

* link:v1.6.0.6/git.html[documentation for release 1.6.0.6]

* release notes for
  link:RelNotes/1.6.0.6.txt[1.6.0.6],
  link:RelNotes/1.6.0.5.txt[1.6.0.5],
  link:RelNotes/1.6.0.4.txt[1.6.0.4],
  link:RelNotes/1.6.0.3.txt[1.6.0.3],
  link:RelNotes/1.6.0.2.txt[1.6.0.2],
  link:RelNotes/1.6.0.1.txt[1.6.0.1],
  link:RelNotes/1.6.0.txt[1.6.0].

* link:v1.5.6.6/git.html[documentation for release 1.5.6.6]

* release notes for
  link:RelNotes/1.5.6.6.txt[1.5.6.6],
  link:RelNotes/1.5.6.5.txt[1.5.6.5],
  link:RelNotes/1.5.6.4.txt[1.5.6.4],
  link:RelNotes/1.5.6.3.txt[1.5.6.3],
  link:RelNotes/1.5.6.2.txt[1.5.6.2],
  link:RelNotes/1.5.6.1.txt[1.5.6.1],
  link:RelNotes/1.5.6.txt[1.5.6].

* link:v1.5.5.6/git.html[documentation for release 1.5.5.6]

* release notes for
  link:RelNotes/1.5.5.6.txt[1.5.5.6],
  link:RelNotes/1.5.5.5.txt[1.5.5.5],
  link:RelNotes/1.5.5.4.txt[1.5.5.4],
  link:RelNotes/1.5.5.3.txt[1.5.5.3],
  link:RelNotes/1.5.5.2.txt[1.5.5.2],
  link:RelNotes/1.5.5.1.txt[1.5.5.1],
  link:RelNotes/1.5.5.txt[1.5.5].

* link:v1.5.4.7/git.html[documentation for release 1.5.4.7]

* release notes for
  link:RelNotes/1.5.4.7.txt[1.5.4.7],
  link:RelNotes/1.5.4.6.txt[1.5.4.6],
  link:RelNotes/1.5.4.5.txt[1.5.4.5],
  link:RelNotes/1.5.4.4.txt[1.5.4.4],
  link:RelNotes/1.5.4.3.txt[1.5.4.3],
  link:RelNotes/1.5.4.2.txt[1.5.4.2],
  link:RelNotes/1.5.4.1.txt[1.5.4.1],
  link:RelNotes/1.5.4.txt[1.5.4].

* link:v1.5.3.8/git.html[documentation for release 1.5.3.8]

* release notes for
  link:RelNotes/1.5.3.8.txt[1.5.3.8],
  link:RelNotes/1.5.3.7.txt[1.5.3.7],
  link:RelNotes/1.5.3.6.txt[1.5.3.6],
  link:RelNotes/1.5.3.5.txt[1.5.3.5],
  link:RelNotes/1.5.3.4.txt[1.5.3.4],
  link:RelNotes/1.5.3.3.txt[1.5.3.3],
  link:RelNotes/1.5.3.2.txt[1.5.3.2],
  link:RelNotes/1.5.3.1.txt[1.5.3.1],
  link:RelNotes/1.5.3.txt[1.5.3].

* link:v1.5.2.5/git.html[documentation for release 1.5.2.5]

* release notes for
  link:RelNotes/1.5.2.5.txt[1.5.2.5],
  link:RelNotes/1.5.2.4.txt[1.5.2.4],
  link:RelNotes/1.5.2.3.txt[1.5.2.3],
  link:RelNotes/1.5.2.2.txt[1.5.2.2],
  link:RelNotes/1.5.2.1.txt[1.5.2.1],
  link:RelNotes/1.5.2.txt[1.5.2].

* link:v1.5.1.6/git.html[documentation for release 1.5.1.6]

* release notes for
  link:RelNotes/1.5.1.6.txt[1.5.1.6],
  link:RelNotes/1.5.1.5.txt[1.5.1.5],
  link:RelNotes/1.5.1.4.txt[1.5.1.4],
  link:RelNotes/1.5.1.3.txt[1.5.1.3],
  link:RelNotes/1.5.1.2.txt[1.5.1.2],
  link:RelNotes/1.5.1.1.txt[1.5.1.1],
  link:RelNotes/1.5.1.txt[1.5.1].

* link:v1.5.0.7/git.html[documentation for release 1.5.0.7]

* release notes for
  link:RelNotes/1.5.0.7.txt[1.5.0.7],
  link:RelNotes/1.5.0.6.txt[1.5.0.6],
  link:RelNotes/1.5.0.5.txt[1.5.0.5],
  link:RelNotes/1.5.0.3.txt[1.5.0.3],
  link:RelNotes/1.5.0.2.txt[1.5.0.2],
  link:RelNotes/1.5.0.1.txt[1.5.0.1],
  link:RelNotes/1.5.0.txt[1.5.0].

* documentation for release link:v1.4.4.4/git.html[1.4.4.4],
  link:v1.3.3/git.html[1.3.3],
  link:v1.2.6/git.html[1.2.6],
  link:v1.0.13/git.html[1.0.13].

============

endif::stalenotes[]

OPTIONS
-------
--version::
	Prints the git suite version that the 'git' program came from.

--help::
	Prints the synopsis and a list of the most commonly used
	commands. If the option '--all' or '-a' is given then all
	available commands are printed. If a git command is named this
	option will bring up the manual page for that command.
+
Other options are available to control how the manual page is
displayed. See linkgit:git-help[1] for more information,
because `git --help ...` is converted internally into `git
help ...`.

-c <name>=<value>::
	Pass a configuration parameter to the command. The value
	given will override values from configuration files.
	The <name> is expected in the same format as listed by
	'git config' (subkeys separated by dots).

--exec-path[=<path>]::
	Path to wherever your core git programs are installed.
	This can also be controlled by setting the GIT_EXEC_PATH
	environment variable. If no path is given, 'git' will print
	the current setting and then exit.

--html-path::
	Print the path, without trailing slash, where git's HTML
	documentation is installed and exit.

--man-path::
	Print the manpath (see `man(1)`) for the man pages for
	this version of git and exit.

--info-path::
	Print the path where the Info files documenting this
	version of git are installed and exit.

-p::
--paginate::
	Pipe all output into 'less' (or if set, $PAGER) if standard
	output is a terminal.  This overrides the `pager.<cmd>`
	configuration options (see the "Configuration Mechanism" section
	below).

--no-pager::
	Do not pipe git output into a pager.

--git-dir=<path>::
	Set the path to the repository. This can also be controlled by
	setting the GIT_DIR environment variable. It can be an absolute
	path or relative path to current working directory.

--work-tree=<path>::
	Set the path to the working tree. It can be an absolute path
	or a path relative to the current working directory.
	This can also be controlled by setting the GIT_WORK_TREE
	environment variable and the core.worktree configuration
	variable (see core.worktree in linkgit:git-config[1] for a
	more detailed discussion).

--bare::
	Treat the repository as a bare repository.  If GIT_DIR
	environment is not set, it is set to the current working
	directory.

--no-replace-objects::
	Do not use replacement refs to replace git objects. See
	linkgit:git-replace[1] for more information.


FURTHER DOCUMENTATION
---------------------

See the references above to get started using git.  The following is
probably more detail than necessary for a first-time user.

The link:user-manual.html#git-concepts[git concepts chapter of the
user-manual] and linkgit:gitcore-tutorial[7] both provide
introductions to the underlying git architecture.

See linkgit:gitworkflows[7] for an overview of recommended workflows.

See also the link:howto-index.html[howto] documents for some useful
examples.

The internals are documented in the
link:technical/api-index.html[GIT API documentation].

GIT COMMANDS
------------

We divide git into high level ("porcelain") commands and low level
("plumbing") commands.

High-level commands (porcelain)
-------------------------------

We separate the porcelain commands into the main commands and some
ancillary user utilities.

Main porcelain commands
~~~~~~~~~~~~~~~~~~~~~~~

include::cmds-mainporcelain.txt[]

Ancillary Commands
~~~~~~~~~~~~~~~~~~
Manipulators:

include::cmds-ancillarymanipulators.txt[]

Interrogators:

include::cmds-ancillaryinterrogators.txt[]


Interacting with Others
~~~~~~~~~~~~~~~~~~~~~~~

These commands are to interact with foreign SCM and with other
people via patch over e-mail.

include::cmds-foreignscminterface.txt[]


Low-level commands (plumbing)
-----------------------------

Although git includes its
own porcelain layer, its low-level commands are sufficient to support
development of alternative porcelains.  Developers of such porcelains
might start by reading about linkgit:git-update-index[1] and
linkgit:git-read-tree[1].

The interface (input, output, set of options and the semantics)
to these low-level commands are meant to be a lot more stable
than Porcelain level commands, because these commands are
primarily for scripted use.  The interface to Porcelain commands
on the other hand are subject to change in order to improve the
end user experience.

The following description divides
the low-level commands into commands that manipulate objects (in
the repository, index, and working tree), commands that interrogate and
compare objects, and commands that move objects and references between
repositories.


Manipulation commands
~~~~~~~~~~~~~~~~~~~~~

include::cmds-plumbingmanipulators.txt[]


Interrogation commands
~~~~~~~~~~~~~~~~~~~~~~

include::cmds-plumbinginterrogators.txt[]

In general, the interrogate commands do not touch the files in
the working tree.


Synching repositories
~~~~~~~~~~~~~~~~~~~~~

include::cmds-synchingrepositories.txt[]

The following are helper commands used by the above; end users
typically do not use them directly.

include::cmds-synchelpers.txt[]


Internal helper commands
~~~~~~~~~~~~~~~~~~~~~~~~

These are internal helper commands used by other commands; end
users typically do not use them directly.

include::cmds-purehelpers.txt[]


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 modeled after `.ini` format familiar to some
people.  Here is an example:

------------
#
# 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.  See linkgit:git-config[1] for a
list.


Identifier Terminology
----------------------
<object>::
	Indicates the object name for any type of object.

<blob>::
	Indicates a blob object name.

<tree>::
	Indicates a tree object name.

<commit>::
	Indicates a commit object name.

<tree-ish>::
	Indicates a tree, commit or tag object name.  A
	command that takes a <tree-ish> argument ultimately wants to
	operate on a <tree> object but automatically dereferences
	<commit> and <tag> objects that point at a <tree>.

<commit-ish>::
	Indicates a commit or tag object name.  A
	command that takes a <commit-ish> argument ultimately wants to
	operate on a <commit> object but automatically dereferences
	<tag> objects that point at a <commit>.

<type>::
	Indicates that an object type is required.
	Currently one of: `blob`, `tree`, `commit`, or `tag`.

<file>::
	Indicates a filename - almost always relative to the
	root of the tree structure `GIT_INDEX_FILE` describes.

Symbolic Identifiers
--------------------
Any git command accepting any <object> can also use the following
symbolic notation:

HEAD::
	indicates the head of the current branch.

<tag>::
	a valid tag 'name'
	(i.e. a `refs/tags/<tag>` reference).

<head>::
	a valid head 'name'
	(i.e. a `refs/heads/<head>` reference).

For a more complete list of ways to spell object names, see
"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].


File/Directory Structure
------------------------

Please see the linkgit:gitrepository-layout[5] document.

Read linkgit:githooks[5] for more details about each hook.

Higher level SCMs may provide and manage additional information in the
`$GIT_DIR`.


Terminology
-----------
Please see linkgit:gitglossary[7].


Environment Variables
---------------------
Various git commands use the following environment variables:

The git Repository
~~~~~~~~~~~~~~~~~~
These environment variables apply to 'all' core git commands. Nb: it
is worth noting that they may be used/overridden by SCMS sitting above
git so take care if using Cogito etc.

'GIT_INDEX_FILE'::
	This environment allows the specification of an alternate
	index file. If not specified, the default of `$GIT_DIR/index`
	is used.

'GIT_OBJECT_DIRECTORY'::
	If the object storage directory is specified via this
	environment variable then the sha1 directories are created
	underneath - otherwise the default `$GIT_DIR/objects`
	directory is used.

'GIT_ALTERNATE_OBJECT_DIRECTORIES'::
	Due to the immutable nature of git objects, old objects can be
	archived into shared, read-only directories. This variable
	specifies a ":" separated (on Windows ";" separated) list
	of git object directories which can be used to search for git
	objects. New objects will not be written to these directories.

'GIT_DIR'::
	If the 'GIT_DIR' environment variable is set then it
	specifies a path to use instead of the default `.git`
	for the base of the repository.

'GIT_WORK_TREE'::
	Set the path to the working tree.  The value will not be
	used in combination with repositories found automatically in
	a .git directory (i.e. $GIT_DIR is not set).
	This can also be controlled by the '--work-tree' command line
	option and the core.worktree configuration variable.

'GIT_CEILING_DIRECTORIES'::
	This should be a colon-separated list of absolute paths.
	If set, it is a list of directories that git should not chdir
	up into while looking for a repository directory.
	It will not exclude the current working directory or
	a GIT_DIR set on the command line or in the environment.
	(Useful for excluding slow-loading network directories.)

'GIT_DISCOVERY_ACROSS_FILESYSTEM'::
	When run in a directory that does not have ".git" repository
	directory, git tries to find such a directory in the parent
	directories to find the top of the working tree, but by default it
	does not cross filesystem boundaries.  This environment variable
	can be set to true to tell git not to stop at filesystem
	boundaries.  Like 'GIT_CEILING_DIRECTORIES', this will not affect
	an explicit repository directory set via 'GIT_DIR' or on the
	command line.

git Commits
~~~~~~~~~~~
'GIT_AUTHOR_NAME'::
'GIT_AUTHOR_EMAIL'::
'GIT_AUTHOR_DATE'::
'GIT_COMMITTER_NAME'::
'GIT_COMMITTER_EMAIL'::
'GIT_COMMITTER_DATE'::
'EMAIL'::
	see linkgit:git-commit-tree[1]

git Diffs
~~~~~~~~~
'GIT_DIFF_OPTS'::
	Only valid setting is "--unified=??" or "-u??" to set the
	number of context lines shown when a unified diff is created.
	This takes precedence over any "-U" or "--unified" option
	value passed on the git diff command line.

'GIT_EXTERNAL_DIFF'::
	When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
	program named by it is called, instead of the diff invocation
	described above.  For a path that is added, removed, or modified,
        'GIT_EXTERNAL_DIFF' is called with 7 parameters:

	path old-file old-hex old-mode new-file new-hex new-mode
+
where:

	<old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
                         contents of <old|new>,
	<old|new>-hex:: are the 40-hexdigit SHA1 hashes,
	<old|new>-mode:: are the octal representation of the file modes.
+
The file parameters can point at the user's working file
(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
when a new file is added), or a temporary file (e.g. `old-file` in the
index).  'GIT_EXTERNAL_DIFF' should not worry about unlinking the
temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
+
For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
parameter, <path>.

other
~~~~~
'GIT_MERGE_VERBOSITY'::
	A number controlling the amount of output shown by
	the recursive merge strategy.  Overrides merge.verbosity.
	See linkgit:git-merge[1]

'GIT_PAGER'::
	This environment variable overrides `$PAGER`. If it is set
	to an empty string or to the value "cat", git will not launch
	a pager.  See also the `core.pager` option in
	linkgit:git-config[1].

'GIT_SSH'::
	If this environment variable is set then 'git fetch'
	and 'git push' will use this command instead
	of 'ssh' when they need to connect to a remote system.
	The '$GIT_SSH' command will be given exactly two arguments:
	the 'username@host' (or just 'host') from the URL and the
	shell command to execute on that remote system.
+
To pass options to the program that you want to list in GIT_SSH
you will need to wrap the program and options into a shell script,
then set GIT_SSH to refer to the shell script.
+
Usually it is easier to configure any desired options through your
personal `.ssh/config` file.  Please consult your ssh documentation
for further details.

'GIT_ASKPASS'::
	If this environment variable is set, then git commands which need to
	acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
	will call this program with a suitable prompt as command line argument
	and read the password from its STDOUT. See also the 'core.askpass'
	option in linkgit:git-config[1].

'GIT_FLUSH'::
	If this environment variable is set to "1", then commands such
	as 'git blame' (in incremental mode), 'git rev-list', 'git log',
	and 'git whatchanged' will force a flush of the output stream
	after each commit-oriented record have been flushed.   If this
	variable is set to "0", the output of these commands will be done
	using completely buffered I/O.   If this environment variable is
	not set, git will choose buffered or record-oriented flushing
	based on whether stdout appears to be redirected to a file or not.

'GIT_TRACE'::
	If this variable is set to "1", "2" or "true" (comparison
	is case insensitive), git will print `trace:` messages on
	stderr telling about alias expansion, built-in command
	execution and external command execution.
	If this variable is set to an integer value greater than 1
	and lower than 10 (strictly) then git will interpret this
	value as an open file descriptor and will try to write the
	trace messages into this file descriptor.
	Alternatively, if this variable is set to an absolute path
	(starting with a '/' character), git will interpret this
	as a file path and will try to write the trace messages
	into it.

Discussion[[Discussion]]
------------------------

More detail on the following is available from the
link:user-manual.html#git-concepts[git concepts chapter of the
user-manual] and linkgit:gitcore-tutorial[7].

A git project normally consists of a working directory with a ".git"
subdirectory at the top level.  The .git directory contains, among other
things, a compressed object database representing the complete history
of the project, an "index" file which links that history to the current
contents of the working tree, and named pointers into that history such
as tags and branch heads.

The object database contains objects of three main types: blobs, which
hold file data; trees, which point to blobs and other trees to build up
directory hierarchies; and commits, which each reference a single tree
and some number of parent commits.

The commit, equivalent to what other systems call a "changeset" or
"version", represents a step in the project's history, and each parent
represents an immediately preceding step.  Commits with more than one
parent represent merges of independent lines of development.

All objects are named by the SHA1 hash of their contents, normally
written as a string of 40 hex digits.  Such names are globally unique.
The entire history leading up to a commit can be vouched for by signing
just that commit.  A fourth object type, the tag, is provided for this
purpose.

When first created, objects are stored in individual files, but for
efficiency may later be compressed together into "pack files".

Named pointers called refs mark interesting points in history.  A ref
may contain the SHA1 name of an object or the name of another ref.  Refs
with names beginning `ref/head/` contain the SHA1 name of the most
recent commit (or "head") of a branch under development.  SHA1 names of
tags of interest are stored under `ref/tags/`.  A special ref named
`HEAD` contains the name of the currently checked-out branch.

The index file is initialized with a list of all paths and, for each
path, a blob object and a set of attributes.  The blob object represents
the contents of the file as of the head of the current branch.  The
attributes (last modified time, size, etc.) are taken from the
corresponding file in the working tree.  Subsequent changes to the
working tree can be found by comparing these attributes.  The index may
be updated with new content, and new commits may be created from the
content stored in the index.

The index is also capable of storing multiple entries (called "stages")
for a given pathname.  These stages are used to hold the various
unmerged version of a file when a merge is in progress.

Authors
-------
Git was started by Linus Torvalds, and is currently maintained by Junio
C Hamano. Numerous contributions have come from the git mailing list
<git@vger.kernel.org>. For a more complete list of contributors, see
http://git-scm.com/about. If you have a clone of git.git itself, the
output of linkgit:git-shortlog[1] and linkgit:git-blame[1] can show you
the authors for specific parts of the project.

Reporting Bugs
--------------

Report bugs to the Git mailing list <git@vger.kernel.org> where the
development and maintenance is primarily done.  You do not have to be
subscribed to the list to send a message there.

SEE ALSO
--------
linkgit:gittutorial[7], linkgit:gittutorial-2[7],
link:everyday.html[Everyday Git], linkgit:gitcvs-migration[7],
linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
linkgit:gitcli[7], link:user-manual.html[The Git User's Manual],
linkgit:gitworkflows[7]

GIT
---
Part of the linkgit:git[1] suite
