git repository layout
=====================

You may find these things in your git repository (`.git`
directory for a repository associated with your working tree, or
`'project'.git` directory for a public 'naked' repository).

objects::
	Object store associated with this repository.  Usually
	an object store is self sufficient (i.e. all the objects
	that are referred to by an object found in it are also
	found in it), but there are couple of ways to violate
	it.
+
. You could populate the repository by running a commit walker
without `-a` option.  Depending on which options are given, you
could have only commit objects without associated blobs and
trees this way, for example.  A repository with this kind of
incomplete object store is not suitable to be published to the
outside world but sometimes useful for private repository.
. You can be using `objects/info/alternates` mechanism, or
`$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanism to 'borrow'
objects from other object stores.  A repository with this kind
of incomplete object store is not suitable to be published for
use with dumb transports but otherwise is OK as long as
`objects/info/alternates` points at the right object stores
it borrows from.

objects/[0-9a-f][0-9a-f]::
	Traditionally, each object is stored in its own file.
	They are split into 256 subdirectories using the first
	two letters from its object name to keep the number of
	directory entries `objects` directory itself needs to
	hold.  Objects found here are often called 'unpacked'
	objects.

objects/pack::
	Packs (files that store many object in compressed form,
	along with index files to allow them to be randomly
	accessed) are found in this directory.

objects/info::
	Additional information about the object store is
	recorded in this directory.

objects/info/packs::
	This file is to help dumb transports discover what packs
	are available in this object store.  Whenever a pack is
	added or removed, `git update-server-info` should be run
	to keep this file up-to-date if the repository is
	published for dumb transports.  `git repack` does this
	by default.

objects/info/alternates::
	This file records absolute filesystem paths of alternate
	object stores that this object store borrows objects
	from, one pathname per line.

refs::
	References are stored in subdirectories of this
	directory.  The `git prune` command knows to keep
	objects reachable from refs found in this directory and
	its subdirectories.

refs/heads/`name`::
	records tip-of-the-tree commit objects of branch `name`

refs/tags/`name`::
	records any object name (not necessarily a commit
	object, or a tag object that points at a commit object).

HEAD::
	A symlink of the form `refs/heads/'name'` to point at
	the current branch, if exists.  It does not mean much if
	the repository is not associated with any working tree
	(i.e. 'naked' repository), but a valid git repository
	*must* have such a symlink here.  It is legal if the
	named branch 'name' does not (yet) exist.

branches::
	A slightly deprecated way to store shorthands to be used
	to specify URL to `git fetch`, `git pull` and `git push`
	commands is to store a file in `branches/'name'` and
	give 'name' to these commands in place of 'repository'
	argument.

hooks::
	Hooks are customization scripts used by various git
	commands.  A handful of sample hooks are installed when
	`git init-db` is run, but all of them are disabled by
	default.  To enable, they need to be made executable.

index::
	The current index file for the repository.  It is
	usually not found in a naked repository.

info::
	Additional information about the repository is recorded
	in this directory.

info/refs::
	This file is to help dumb transports to discover what
	refs are available in this repository.  Whenever you
	create/delete a new branch or a new tag, `git
	update-server-info` should be run to keep this file
	up-to-date if the repository is published for dumb
	transports.  The `git-receive-pack` command, which is
	run on a remote repository when you `git push` into it,
	runs `hooks/update` hook to help you achieve this.

info/grafts::
	This file records fake commit ancestry information, to
	pretend the set of parents a commit has is different
	from how the commit was actually created.  One record
	per line describes a commit and its fake parents by
	listing their 40-byte hexadecimal object names separated
	by a space and terminated by a newline.

info/exclude::
	This file, by convention among Porcelains, stores the
	exclude pattern list.  `git status` looks at it, but
	otherwise it is not looked at by any of the core git
	commands.

remotes::
	Stores shorthands to be used to give URL and default
	refnames to interact with remote repository to `git
	fetch`, `git pull` and `git push` commands.
