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.

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-check-files.html[git-check-files]::
	Verify a list of files are up-to-date

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-fetch-script.html[git-fetch-script]::
	Download from a remote repository via various protocols
	(user interface).

link:git-pull-script.html[git-pull-script]::
	Fetch from and merge with a remote repository via
	various protocols (user interface).

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.


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

