| gitrepository-layout(5) | 
 | ======================= | 
 |  | 
 | NAME | 
 | ---- | 
 | gitrepository-layout - Git Repository Layout | 
 |  | 
 | SYNOPSIS | 
 | -------- | 
 | $GIT_DIR/* | 
 |  | 
 | DESCRIPTION | 
 | ----------- | 
 |  | 
 | A Git repository comes in two different flavours: | 
 |  | 
 |  * a `.git` directory at the root of the working tree; | 
 |  | 
 |  * a `<project>.git` directory that is a 'bare' repository | 
 |    (i.e. without its own working tree), that is typically used for | 
 |    exchanging histories with others by pushing into it and fetching | 
 |    from it. | 
 |  | 
 | *Note*: Also you can have a plain text file `.git` at the root of | 
 | your working tree, containing `gitdir: <path>` to point at the real | 
 | directory that has the repository. | 
 | This mechanism is called a 'gitfile' and is usually managed via the | 
 | `git submodule` and `git worktree` commands. It is often used for | 
 | a working tree of a submodule checkout, to allow you in the | 
 | containing superproject to `git checkout` a branch that does not | 
 | have the submodule.  The `checkout` has to remove the entire | 
 | submodule working tree, without losing the submodule repository. | 
 |  | 
 | These things may exist in a 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 a few ways to violate it. | 
 | + | 
 | . You could have an incomplete but locally usable repository | 
 | by creating a shallow clone.  See linkgit:git-clone[1]. | 
 | . You could be using the `objects/info/alternates` or | 
 | `$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanisms 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 object stores it | 
 | borrows from. | 
 | + | 
 | This directory is ignored if $GIT_COMMON_DIR is set and | 
 | "$GIT_COMMON_DIR/objects" will be used instead. | 
 |  | 
 | objects/[0-9a-f][0-9a-f]:: | 
 | 	A newly created object is stored in its own file. | 
 | 	The objects are splayed over 256 subdirectories using | 
 | 	the first two characters of the sha1 object name to | 
 | 	keep the number of directory entries in `objects` | 
 | 	itself to a manageable number. Objects found | 
 | 	here are often called 'unpacked' (or 'loose') objects. | 
 |  | 
 | objects/pack:: | 
 | 	Packs (files that store many objects 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 preserve | 
 | 	objects reachable from refs found in this directory and | 
 | 	its subdirectories. | 
 | 	This directory is ignored (except refs/bisect, | 
 | 	refs/rewritten and refs/worktree) if $GIT_COMMON_DIR is | 
 | 	set and "$GIT_COMMON_DIR/refs" will be used instead. | 
 |  | 
 | 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. | 
 |  | 
 | refs/replace/`<obj-sha1>`:: | 
 | 	records the SHA-1 of the object that replaces `<obj-sha1>`. | 
 | 	This is similar to info/grafts and is internally used and | 
 | 	maintained by linkgit:git-replace[1]. Such refs can be exchanged | 
 | 	between repositories while grafts are not. | 
 |  | 
 | 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]. This file is ignored if $GIT_COMMON_DIR | 
 | 	is set and "$GIT_COMMON_DIR/packed-refs" will be used instead. | 
 |  | 
 | 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.'  See linkgit:git-checkout[1] | 
 | for details. | 
 |  | 
 | config:: | 
 | 	Repository specific configuration file. This file is ignored | 
 | 	if $GIT_COMMON_DIR is set and "$GIT_COMMON_DIR/config" will be | 
 | 	used instead. | 
 |  | 
 | config.worktree:: | 
 | 	Working directory specific configuration file for the main | 
 | 	working directory in multiple working directory setup (see | 
 | 	linkgit:git-worktree[1]). | 
 |  | 
 | branches:: | 
 | 	A slightly deprecated way to store shorthands to be used | 
 | 	to specify a URL to 'git fetch', 'git pull' and 'git push'. | 
 | 	A file can be stored as `branches/<name>` and then | 
 | 	'name' can be given to these commands in place of | 
 | 	'repository' argument.  See the REMOTES section in | 
 | 	linkgit:git-fetch[1] for details.  This mechanism is legacy | 
 | 	and not likely to be found in modern repositories. This | 
 | 	directory is ignored if $GIT_COMMON_DIR is set and | 
 | 	"$GIT_COMMON_DIR/branches" will be used instead. | 
 |  | 
 |  | 
 | 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. This directory is ignored if $GIT_COMMON_DIR is set | 
 | 	and "$GIT_COMMON_DIR/hooks" will be used instead. | 
 |  | 
 | common:: | 
 | 	When multiple working trees are used, most of files in | 
 | 	$GIT_DIR are per-worktree with a few known exceptions. All | 
 | 	files under 'common' however will be shared between all | 
 | 	working trees. | 
 |  | 
 | index:: | 
 | 	The current index file for the repository.  It is | 
 | 	usually not found in a bare repository. | 
 |  | 
 | sharedindex.<SHA-1>:: | 
 | 	The shared index part, to be referenced by $GIT_DIR/index and | 
 | 	other temporary index files. Only valid in split index mode. | 
 |  | 
 | info:: | 
 | 	Additional information about the repository is recorded | 
 | 	in this directory. This directory is ignored if $GIT_COMMON_DIR | 
 | 	is set and "$GIT_COMMON_DIR/info" will be used instead. | 
 |  | 
 | 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. | 
 | + | 
 | Note that the grafts mechanism is outdated and can lead to problems | 
 | transferring objects between repositories; see linkgit:git-replace[1] | 
 | for a more flexible and robust system to do the same thing. | 
 |  | 
 | 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]. | 
 |  | 
 | info/attributes:: | 
 | 	Defines which attributes to assign to a path, similar to per-directory | 
 | 	`.gitattributes` files.   See also: linkgit:gitattributes[5]. | 
 |  | 
 | info/sparse-checkout:: | 
 | 	This file stores sparse checkout patterns. | 
 | 	See also: linkgit:git-read-tree[1]. | 
 |  | 
 | remotes:: | 
 | 	Stores shorthands for URL and default refnames for use | 
 | 	when interacting with remote repositories via 'git fetch', | 
 | 	'git pull' and 'git push' commands.  See the REMOTES section | 
 | 	in linkgit:git-fetch[1] for details.  This mechanism is legacy | 
 | 	and not likely to be found in modern repositories. This | 
 | 	directory is ignored if $GIT_COMMON_DIR is set and | 
 | 	"$GIT_COMMON_DIR/remotes" will be used instead. | 
 |  | 
 | logs:: | 
 | 	Records of changes made to refs are stored in this directory. | 
 | 	See linkgit:git-update-ref[1] for more information. This | 
 | 	directory is ignored (except logs/HEAD) if $GIT_COMMON_DIR is | 
 | 	set and "$GIT_COMMON_DIR/logs" will be used instead. | 
 |  | 
 | 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]. This | 
 | 	file is ignored if $GIT_COMMON_DIR is set and | 
 | 	"$GIT_COMMON_DIR/shallow" will be used instead. | 
 |  | 
 | commondir:: | 
 | 	If this file exists, $GIT_COMMON_DIR (see linkgit:git[1]) will | 
 | 	be set to the path specified in this file if it is not | 
 | 	explicitly set. If the specified path is relative, it is | 
 | 	relative to $GIT_DIR. The repository with commondir is | 
 | 	incomplete without the repository pointed by "commondir". | 
 |  | 
 | modules:: | 
 | 	Contains the git-repositories of the submodules. | 
 |  | 
 | worktrees:: | 
 | 	Contains administrative data for linked | 
 | 	working trees. Each subdirectory contains the working tree-related | 
 | 	part of a linked working tree. This directory is ignored if | 
 | 	$GIT_COMMON_DIR is set, in which case | 
 | 	"$GIT_COMMON_DIR/worktrees" will be used instead. | 
 |  | 
 | worktrees/<id>/gitdir:: | 
 | 	A text file containing the absolute path back to the .git file | 
 | 	that points to here. This is used to check if the linked | 
 | 	repository has been manually removed and there is no need to | 
 | 	keep this directory any more. The mtime of this file should be | 
 | 	updated every time the linked repository is accessed. | 
 |  | 
 | worktrees/<id>/locked:: | 
 | 	If this file exists, the linked working tree may be on a | 
 | 	portable device and not available. The presence of this file | 
 | 	prevents `worktrees/<id>` from being pruned either automatically | 
 | 	or manually by `git worktree prune`. The file may contain a string | 
 | 	explaining why the repository is locked. | 
 |  | 
 | worktrees/<id>/config.worktree:: | 
 | 	Working directory specific configuration file. | 
 |  | 
 | include::technical/repository-version.txt[] | 
 |  | 
 | 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 |