|  | 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. |