GIT repository layout
=====================
v0.99.5, Sep 2005

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 incompete 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 achive 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/rev-cache::
	No higher-level tool currently takes advantage of this
	file, but it is generated when `git update-server-info`
	is run.  It records the commit ancestry information of
	the commits in this repository in a concise binary
	format, and can be read with `git-show-rev-cache`.

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::
	Stoers shorthands to be used to give URL and default
	refnames to interact with remote repository to `git
	fetch`, `git pull` and `git push` commands.
