git(7)
======

NAME
----
git - the stupid content tracker


SYNOPSIS
--------
'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [--help] COMMAND [ARGS]

DESCRIPTION
-----------
'git' is both a program and a directory content tracker system.
The program 'git' is just a wrapper to reach the core git programs
(or a potty if you like, as it's not exactly porcelain but still
brings your stuff to the plumbing).

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

--help::
	prints the synopsis and a list of available commands.
	If a git command is named this option will bring up the
	man-page for that command.

--exec-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.

CORE GIT COMMANDS
-----------------
Before reading this cover to cover, you may want to take a look
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 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.

After you get the general feel from the tutorial and this
overview page, you may want to take a look at the
link:howto-index.html[howto] documents.


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 index 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 ancillary 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
~~~~~~~~~~~~~~~~~~~~~
gitlink:git-apply[1]::
	Reads a "diff -up1" or git generated patch file and
	applies it to the working tree.

gitlink:git-checkout-index[1]::
	Copy files from the index to the working directory

gitlink:git-commit-tree[1]::
	Creates a new commit object

gitlink:git-hash-object[1]::
	Computes the object ID from a file.

gitlink:git-index-pack[1]::
	Build pack index file for an existing packed archive.

gitlink:git-init-db[1]::
	Creates an empty git object database

gitlink:git-merge-index[1]::
	Runs a merge for files needing merging

gitlink:git-mktag[1]::
	Creates a tag object

gitlink:git-pack-objects[1]::
	Creates a packed archive of objects.

gitlink:git-prune-packed[1]::
	Remove extra objects that are already in pack files.

gitlink:git-read-tree[1]::
	Reads tree information into the directory index

gitlink:git-unpack-objects[1]::
	Unpacks objects out of a packed archive.

gitlink:git-update-index[1]::
	Modifies the index or directory cache

gitlink:git-write-tree[1]::
	Creates a tree from the current index


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

gitlink:git-cat-file[1]::
	Provide content or type information for repository objects

gitlink:git-diff-index[1]::
	Compares content and mode of blobs between the index and repository

gitlink:git-diff-files[1]::
	Compares files in the working tree and the index

gitlink:git-diff-stages[1]::
	Compares two "merge stages" in the index file.

gitlink:git-diff-tree[1]::
	Compares the content and mode of blobs found via two tree objects

gitlink:git-fsck-objects[1]::
	Verifies the connectivity and validity of the objects in the database

gitlink:git-ls-files[1]::
	Information about files in the index/working directory

gitlink:git-ls-tree[1]::
	Displays a tree object in human readable form

gitlink:git-merge-base[1]::
	Finds as good a common ancestor as possible for a merge

gitlink:git-name-rev[1]::
	Find symbolic names for given revs

gitlink:git-rev-list[1]::
	Lists commit objects in reverse chronological order

gitlink:git-show-index[1]::
	Displays contents of a pack idx file.

gitlink:git-tar-tree[1]::
	Creates a tar archive of the files in the named tree

gitlink:git-unpack-file[1]::
	Creates a temporary file with a blob's contents

gitlink:git-var[1]::
	Displays a git logical variable

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


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

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

gitlink:git-fetch-pack[1]::
	Updates from a remote repository.

gitlink:git-http-fetch[1]::
	Downloads a remote git repository via HTTP

gitlink:git-local-fetch[1]::
	Duplicates another git repository on a local system

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

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

gitlink:git-send-pack[1]::
	Pushes to a remote repository, intelligently.

gitlink:git-shell[1]::
	Restricted shell for GIT-only SSH access.

gitlink:git-ssh-fetch[1]::
	Pulls from a remote repository over ssh connection

gitlink:git-ssh-upload[1]::
	Helper "server-side" program used by git-ssh-fetch

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

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


Porcelain-ish Commands
----------------------

gitlink:git-add[1]::
	Add paths to the index file.

gitlink:git-am[1]::
	Apply patches from a mailbox, but cooler.

gitlink:git-applymbox[1]::
	Apply patches from a mailbox.

gitlink:git-bisect[1]::
	Find the change that introduced a bug.

gitlink:git-branch[1]::
	Create and Show branches.

gitlink:git-checkout[1]::
	Checkout and switch to a branch.

gitlink:git-cherry-pick[1]::
	Cherry-pick the effect of an existing commit.

gitlink:git-clone[1]::
	Clones a repository into a new directory.

gitlink:git-commit[1]::
	Record changes to the repository.

gitlink:git-diff[1]::
	Show changes between commits, commit and working tree, etc.

gitlink:git-fetch[1]::
	Download from a remote repository via various protocols.

gitlink:git-format-patch[1]::
	Prepare patches for e-mail submission.

gitlink:git-grep[1]::
	Print lines matching a pattern

gitlink:git-log[1]::
	Shows commit logs.

gitlink:git-ls-remote[1]::
	Shows references in a remote or local repository.

gitlink:git-merge[1]::
	Grand unified merge driver.

gitlink:git-mv[1]::
	Move or rename a file, a directory, or a symlink.

gitlink:git-octopus[1]::
	Merge more than two commits.

gitlink:git-pull[1]::
	Fetch from and merge with a remote repository.

gitlink:git-push[1]::
	Update remote refs along with associated objects.

gitlink:git-rebase[1]::
	Rebase local commits to new upstream head.

gitlink:git-repack[1]::
	Pack unpacked objects in a repository.

gitlink:git-reset[1]::
	Reset current HEAD to the specified state.

gitlink:git-resolve[1]::
	Merge two commits.

gitlink:git-revert[1]::
	Revert an existing commit.

gitlink:git-shortlog[1]::
	Summarizes 'git log' output.

gitlink:git-show-branch[1]::
	Show branches and their commits.

gitlink:git-status[1]::
	Shows the working tree status.

gitlink:git-verify-tag[1]::
	Check the GPG signature of tag.

gitlink:git-whatchanged[1]::
	Shows commit logs and differences they introduce.


Ancillary Commands
------------------
Manipulators:

gitlink:git-applypatch[1]::
	Apply one patch extracted from an e-mail.

gitlink:git-archimport[1]::
	Import an arch repository into git.

gitlink:git-convert-objects[1]::
	Converts old-style git repository

gitlink:git-cvsimport[1]::
	Salvage your data out of another SCM people love to hate.

gitlink:git-lost-found[1]::
	Recover lost refs that luckily have not yet been pruned.

gitlink:git-merge-one-file[1]::
	The standard helper program to use with "git-merge-index"

gitlink:git-prune[1]::
	Prunes all unreachable objects from the object database

gitlink:git-relink[1]::
	Hardlink common objects in local repositories.

gitlink:git-svnimport[1]::
	Import a SVN repository into git.

gitlink:git-sh-setup[1]::
	Common git shell script setup code.

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

gitlink:git-update-ref[1]::
	Update the object name stored in a ref safely.


Interrogators:

gitlink:git-check-ref-format[1]::
	Make sure ref name is well formed.

gitlink:git-cherry[1]::
	Find commits not merged upstream.

gitlink:git-count-objects[1]::
	Count unpacked number of objects and their disk consumption.

gitlink:git-daemon[1]::
	A really simple server for git repositories.

gitlink:git-get-tar-commit-id[1]::
	Extract commit ID from an archive created using git-tar-tree.

gitlink:git-mailinfo[1]::
	Extracts patch from a single e-mail message.

gitlink:git-mailsplit[1]::
	git-mailsplit.

gitlink:git-patch-id[1]::
	Compute unique ID for a patch.

gitlink:git-parse-remote[1]::
	Routines to help parsing $GIT_DIR/remotes/

gitlink:git-request-pull[1]::
	git-request-pull.

gitlink:git-rev-parse[1]::
	Pick out and massage parameters.

gitlink:git-send-email[1]::
	Send patch e-mails out of "format-patch --mbox" output.

gitlink:git-symbolic-refs[1]::
	Read and modify symbolic refs.

gitlink:git-stripspace[1]::
	Filter out empty lines.


Commands not yet documented
---------------------------

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>::
	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 command 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
------------------------

Please see link:repository-layout.html[repository layout] document.

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


Terminology
-----------
Please see link:glossary.html[glossary] document.


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 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 gitlink:git-commit-tree[1]

git Diffs
~~~~~~~~~
'GIT_DIFF_OPTS'::
'GIT_EXTERNAL_DIFF'::
	see the "generating patches" section in :
	gitlink:git-diff-index[1];
	gitlink:git-diff-files[1];
	gitlink:git-diff-tree[1]

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

Authors
-------
	git's founding father is Linus Torvalds <torvalds@osdl.org>.
	The current git nurse is Junio C. Hamano <junkio@cox.net>.
	The git potty was written by Andres Ericsson <ae@op5.se>.
	General upbringing is handled by 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 gitlink:git[7] suite

