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 'bare' 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. a 'bare' 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.
	Read link:hooks.html[hooks] for more details about
	each hook.

index::
	The current index file for the repository.  It is
	usually not found in a bare 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. `.gitignore` is the per-directory
	ignore file.  `git status`, `git add`, `git rm` and `git
	clean` look at it but the core git commands do not look
	at it.  See also: gitlink:git-ls-files[1] `--exclude-from`
	and `--exclude-per-directory`.

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.

logs::
	Records of changes made to refs are stored in this
	directory.  See the documentation on git-update-ref
	for more information.

logs/refs/heads/`name`::
	Records all changes made to the branch tip named `name`.

logs/refs/tags/`name`::
	Records all changes made to the tag named `name`.
