| gitrepository-layout(5) | 
 | ======================= | 
 |  | 
 | NAME | 
 | ---- | 
 | gitrepository-layout - Git Repository Layout | 
 |  | 
 | SYNOPSIS | 
 | -------- | 
 | $GIT_DIR/* | 
 |  | 
 | DESCRIPTION | 
 | ----------- | 
 |  | 
 | 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. It is | 
 | also possible to have a working tree where `.git` is a plain | 
 | ascii file containing `gitdir: <path>`, i.e. the path to the | 
 | real git 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 also could have an incomplete but locally usable repository | 
 | by cloning shallowly.  See linkgit:git-clone[1]. | 
 | . 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' | 
 | 	(or 'loose') 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 paths to alternate object stores that | 
 | 	this object store borrows objects from, one pathname per | 
 | 	line. Note that not only native Git tools use it locally, | 
 | 	but the HTTP fetcher also tries to use it remotely; this | 
 | 	will usually work if you have relative paths (relative | 
 | 	to the object database, not to the repository!) in your | 
 | 	alternates file, but it will not work if you use absolute | 
 | 	paths unless the absolute path in filesystem and web URL | 
 | 	is the same. See also 'objects/info/http-alternates'. | 
 |  | 
 | objects/info/http-alternates:: | 
 | 	This file records URLs to alternate object stores that | 
 | 	this object store borrows objects from, to be used when | 
 | 	the repository is fetched over HTTP. | 
 |  | 
 | 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). | 
 |  | 
 | refs/remotes/`name`:: | 
 | 	records tip-of-the-tree commit objects of branches copied | 
 | 	from a remote repository. | 
 |  | 
 | packed-refs:: | 
 | 	records the same information as refs/heads/, refs/tags/, | 
 | 	and friends record in a more efficient way.  See | 
 | 	linkgit:git-pack-refs[1]. | 
 |  | 
 | HEAD:: | 
 | 	A symref (see glossary) to the `refs/heads/` namespace | 
 | 	describing the currently active branch.  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 the HEAD file; some porcelains may use it to | 
 | 	guess the designated "default" branch of the repository | 
 | 	(usually 'master').  It is legal if the named branch | 
 | 	'name' does not (yet) exist.  In some legacy setups, it is | 
 | 	a symbolic link instead of a symref that points at the current | 
 | 	branch. | 
 | + | 
 | HEAD can also record a specific commit directly, instead of | 
 | being a symref to point at the current branch.  Such a state | 
 | is often called 'detached HEAD', and almost all commands work | 
 | identically as normal.  See linkgit:git-checkout[1] for | 
 | details. | 
 |  | 
 | 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' is run, but all of them are disabled by | 
 | 	default.  To enable, the `.sample` suffix has to be | 
 | 	removed from the filename by renaming. | 
 | 	Read linkgit:githooks[5] 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 helps dumb transports discover what refs are | 
 | 	available in this repository.  If the repository is | 
 | 	published for dumb transports, this file should be | 
 | 	regenerated by 'git update-server-info' every time a tag | 
 | 	or branch is created or modified.  This is normally done | 
 | 	from the `hooks/update` hook, which is run by the | 
 | 	'git-receive-pack' command when you 'git push' into the | 
 | 	repository. | 
 |  | 
 | 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: linkgit:gitignore[5]. | 
 |  | 
 | 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 linkgit:git-update-ref[1] | 
 | 	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`. | 
 |  | 
 | shallow:: | 
 | 	This is similar to `info/grafts` but is internally used | 
 | 	and maintained by shallow clone mechanism.  See `--depth` | 
 | 	option to linkgit:git-clone[1] and linkgit:git-fetch[1]. | 
 |  | 
 | SEE ALSO | 
 | -------- | 
 | linkgit:git-init[1], | 
 | linkgit:git-clone[1], | 
 | linkgit:git-fetch[1], | 
 | linkgit:git-pack-refs[1], | 
 | linkgit:git-gc[1], | 
 | linkgit:git-checkout[1], | 
 | linkgit:gitglossary[7], | 
 | link:user-manual.html[The Git User's Manual] | 
 |  | 
 | GIT | 
 | --- | 
 | Part of the linkgit:git[1] suite. |