git(7)
======
May 2005

NAME
----
git - the stupid content tracker


SYNOPSIS
--------
'git-<command>' <args>

DESCRIPTION
-----------

This is reference information for the core git commands.

The Discussion section below contains much useful definition and
clarification info - read that first.  And of the commands, I suggest
reading link:git-update-cache.html[git-update-cache] and
link:git-read-tree.html[git-read-tree] first - I wish I had!

David Greaves <david@dgreaves.com>
08/05/05

Updated by Junio C Hamano <junkio@cox.net> on 2005-05-05 to
reflect recent changes.

Commands Overview
-----------------
The git commands can helpfully be split into those that manipulate
the repository, the cache and the working fileset, those that
interrogate and compare them, and those that moves objects and
references between repositories.

In addition, git itself comes with a spartan set of porcelain
commands.  They are usable but are not meant to compete with real
Porcelains.

There are also some ancilliary programs that can be viewed as useful
aids for using the core commands but which are unlikely to be used by
SCMs layered over git.

Manipulation commands
~~~~~~~~~~~~~~~~~~~~~
link:git-checkout-cache.html[git-checkout-cache]::
	Copy files from the cache to the working directory

link:git-commit-tree.html[git-commit-tree]::
	Creates a new commit object

link:git-init-db.html[git-init-db]::
	Creates an empty git object database

link:git-merge-base.html[git-merge-base]::
	Finds as good a common ancestor as possible for a merge

link:git-mktag.html[git-mktag]::
	Creates a tag object

link:git-read-tree.html[git-read-tree]::
	Reads tree information into the directory cache

link:git-update-cache.html[git-update-cache]::
	Modifies the index or directory cache

link:git-hash-object.html[git-hash-object]::
	Computes the object ID from a file.

link:git-write-tree.html[git-write-tree]::
	Creates a tree from the current cache

Interrogation commands
~~~~~~~~~~~~~~~~~~~~~~
link:git-cat-file.html[git-cat-file]::
	Provide content or type information for repository objects

link:git-diff-cache.html[git-diff-cache]::
	Compares content and mode of blobs between the cache and repository

link:git-diff-files.html[git-diff-files]::
	Compares files in the working tree and the cache

link:git-diff-tree.html[git-diff-tree]::
	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-cache.html[git-fsck-cache]::
	Verifies the connectivity and validity of the objects in the database

link:git-ls-files.html[git-ls-files]::
	Information about files in the cache/working directory

link:git-ls-tree.html[git-ls-tree]::
	Displays a tree object in human readable form

link:git-merge-cache.html[git-merge-cache]::
	Runs a merge for files needing merging

link:git-rev-list.html[git-rev-list]::
	Lists commit objects in reverse chronological order

link:git-rev-tree.html[git-rev-tree]::
	Provides the revision tree for one or more commits

link:git-tar-tree.html[git-tar-tree]::
	Creates a tar archive of the files in the named tree

link:git-unpack-file.html[git-unpack-file]::
	Creates a temporary file with a blob's contents

link:git-var.html[git-var]::
	Displays a git logical variable

link:git-verify-pack.html[git-verify-pack]::
	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


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

link:git-clone-script.html[git-clone-script]::
	Clones a repository into the current repository (user interface)

link:git-clone-pack.html[git-clone-pack]::
	Clones a repository into the current repository (engine
	for ssh and local transport)

link:git-http-pull.html[git-http-pull]::
	Downloads a remote GIT repository via HTTP

link:git-local-pull.html[git-local-pull]::
	Duplicates another GIT repository on a local system

link:git-ssh-pull.html[git-ssh-pull]::
	Pulls from a remote repository over ssh connection

link:git-send-pack.html[git-send-pack]::
	Pushes to a remote repository, intelligently.

link:git-receive-pack.html[git-receive-pack]::
	Invoked by 'git-send-pack' to receive what is pushed to it.

link:git-clone-pack.html[git-clone-pack]::
	Clones from a remote repository.

link:git-fetch-pack.html[git-fetch-pack]::
	Updates from a remote repository.

link:git-peek-remote.html[git-peek-remote]::
	Lists references on a remote repository using upload-pack protocol.

link:git-upload-pack.html[git-upload-pack]::
	Invoked by 'git-clone-pack' and 'git-fetch-pack' to push
	what are asked for.

link:git-update-server-info.html[git-update-server-info]::
	Updates auxiliary information on a dumb server to help
	clients discover references and packs on it.


Porcelainish Commands
---------------------
link:git-fetch-script.html[git-fetch-script]::
	Download from a remote repository via various protocols.

link:git-pull-script.html[git-pull-script]::
	Fetch from and merge with a remote repository.

link:git-commit-script.html[git-commit-script]::
	Record changes to the repository.


Ancilliary Commands
-------------------
Manipulators:

link:git-apply-patch-script.html[git-apply-patch-script]::
	Sample script to apply the diffs from git-diff-*

link:git-convert-cache.html[git-convert-cache]::
	Converts old-style GIT repository

link:git-merge-one-file-script.html[git-merge-one-file-script]::
	The standard helper program to use with "git-merge-cache"

link:git-prune-script.html[git-prune-script]::
	Prunes all unreachable objects from the object database

link:git-resolve-script.html[git-resolve-script]::
	Script used to merge two trees

link:git-tag-script.html[git-tag-script]::
	An example script to create a tag object signed with GPG


Interogators:

link:git-diff-helper.html[git-diff-helper]::
	Generates patch format output for git-diff-*

link:git-ssh-push.html[git-ssh-push]::
	Helper "server-side" program used by git-ssh-pull



Identifier Terminology
----------------------
<object>::
	Indicates the sha1 identifier for any type of object

<blob>::
	Indicates a blob object sha1 identifier

<tree>::
	Indicates a tree object sha1 identifier

<commit>::
	Indicates a commit object sha1 identifier

<tree-ish>::
	Indicates a tree, commit or tag object sha1 identifier.  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>.

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

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

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

HEAD::
	indicates the head of the repository (ie the contents of
	`$GIT_DIR/HEAD`)
<tag>::
	a valid tag 'name'+
	(ie the contents of `$GIT_DIR/refs/tags/<tag>`)
<head>::
	a valid head 'name'+
	(ie the contents of `$GIT_DIR/refs/heads/<head>`)
<snap>::
	a valid snapshot 'name'+
	(ie the contents of `$GIT_DIR/refs/snap/<snap>`)


File/Directory Structure
------------------------
The git-core manipulates the following areas in the directory:

 .git/	       The base (overridden with $GIT_DIR)
   objects/    The object base (overridden with $GIT_OBJECT_DIRECTORY)
     ??/       'First 2 chars of object' directories.
     pack/     Packed archives.

   refs/       Directories containing symbolic names for objects
	       (each file contains the hex SHA1 + newline)
     heads/    Commits which are heads of various sorts
     tags/     Tags, by the tag name (or some local renaming of it)
     */        Any other subdirectory of refs/ can be used to store
	       files similar to what are under refs/heads/.
   HEAD        Symlink to refs/heads/<current-branch-name>

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

Terminology
-----------
Each line contains terms which you may see used interchangeably

 object database, .git directory
 directory cache, index
 id, sha1, sha1-id, sha1 hash
 type, tag


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
	cache/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 ":" seperated 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 `./.git` for the base of the
	repository.

git Commits
~~~~~~~~~~~
'GIT_AUTHOR_NAME'::
'GIT_AUTHOR_EMAIL'::
'GIT_AUTHOR_DATE'::
'GIT_COMMITTER_NAME'::
'GIT_COMMITTER_EMAIL'::
	see link:git-commit-tree.html[git-commit-tree]

git Diffs
~~~~~~~~~
'GIT_DIFF_OPTS'::
'GIT_EXTERNAL_DIFF'::
	see the "generating patches" section in :
	link:git-diff-cache.html[git-diff-cache];
	link:git-diff-files.html[git-diff-files];
	link:git-diff-tree.html[git-diff-tree]

Discussion
----------
include::../README[]

Author
------
Written by Linus Torvalds <torvalds@osdl.org> and the git-list <git@vger.kernel.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

