Documentation / gitrepository-layout.txton commit Merge branch 'jc/epochtime-wo-tz' into maint-2.3 (13ec221)
   1gitrepository-layout(5)
   2=======================
   3
   4NAME
   5----
   6gitrepository-layout - Git Repository Layout
   7
   8SYNOPSIS
   9--------
  10$GIT_DIR/*
  11
  12DESCRIPTION
  13-----------
  14
  15A Git repository comes in two different flavours:
  16
  17 * a `.git` directory at the root of the working tree;
  18
  19 * a `<project>.git` directory that is a 'bare' repository
  20   (i.e. without its own working tree), that is typically used for
  21   exchanging histories with others by pushing into it and fetching
  22   from it.
  23
  24*Note*: Also you can have a plain text file `.git` at the root of
  25your working tree, containing `gitdir: <path>` to point at the real
  26directory that has the repository.  This mechanism is often used for
  27a working tree of a submodule checkout, to allow you in the
  28containing superproject to `git checkout` a branch that does not
  29have the submodule.  The `checkout` has to remove the entire
  30submodule working tree, without losing the submodule repository.
  31
  32These things may exist in a Git repository.
  33
  34objects::
  35        Object store associated with this repository.  Usually
  36        an object store is self sufficient (i.e. all the objects
  37        that are referred to by an object found in it are also
  38        found in it), but there are a few ways to violate it.
  39+
  40. You could have an incomplete but locally usable repository
  41by creating a shallow clone.  See linkgit:git-clone[1].
  42. You could be using the `objects/info/alternates` or
  43`$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanisms to 'borrow'
  44objects from other object stores.  A repository with this kind
  45of incomplete object store is not suitable to be published for
  46use with dumb transports but otherwise is OK as long as
  47`objects/info/alternates` points at the object stores it
  48borrows from.
  49
  50objects/[0-9a-f][0-9a-f]::
  51        A newly created object is stored in its own file.
  52        The objects are splayed over 256 subdirectories using
  53        the first two characters of the sha1 object name to
  54        keep the number of directory entries in `objects`
  55        itself to a manageable number. Objects found
  56        here are often called 'unpacked' (or 'loose') objects.
  57
  58objects/pack::
  59        Packs (files that store many object in compressed form,
  60        along with index files to allow them to be randomly
  61        accessed) are found in this directory.
  62
  63objects/info::
  64        Additional information about the object store is
  65        recorded in this directory.
  66
  67objects/info/packs::
  68        This file is to help dumb transports discover what packs
  69        are available in this object store.  Whenever a pack is
  70        added or removed, `git update-server-info` should be run
  71        to keep this file up-to-date if the repository is
  72        published for dumb transports.  'git repack' does this
  73        by default.
  74
  75objects/info/alternates::
  76        This file records paths to alternate object stores that
  77        this object store borrows objects from, one pathname per
  78        line. Note that not only native Git tools use it locally,
  79        but the HTTP fetcher also tries to use it remotely; this
  80        will usually work if you have relative paths (relative
  81        to the object database, not to the repository!) in your
  82        alternates file, but it will not work if you use absolute
  83        paths unless the absolute path in filesystem and web URL
  84        is the same. See also 'objects/info/http-alternates'.
  85
  86objects/info/http-alternates::
  87        This file records URLs to alternate object stores that
  88        this object store borrows objects from, to be used when
  89        the repository is fetched over HTTP.
  90
  91refs::
  92        References are stored in subdirectories of this
  93        directory.  The 'git prune' command knows to preserve
  94        objects reachable from refs found in this directory and
  95        its subdirectories.
  96
  97refs/heads/`name`::
  98        records tip-of-the-tree commit objects of branch `name`
  99
 100refs/tags/`name`::
 101        records any object name (not necessarily a commit
 102        object, or a tag object that points at a commit object).
 103
 104refs/remotes/`name`::
 105        records tip-of-the-tree commit objects of branches copied
 106        from a remote repository.
 107
 108refs/replace/`<obj-sha1>`::
 109        records the SHA-1 of the object that replaces `<obj-sha1>`.
 110        This is similar to info/grafts and is internally used and
 111        maintained by linkgit:git-replace[1]. Such refs can be exchanged
 112        between repositories while grafts are not.
 113
 114packed-refs::
 115        records the same information as refs/heads/, refs/tags/,
 116        and friends record in a more efficient way.  See
 117        linkgit:git-pack-refs[1].
 118
 119HEAD::
 120        A symref (see glossary) to the `refs/heads/` namespace
 121        describing the currently active branch.  It does not mean
 122        much if the repository is not associated with any working tree
 123        (i.e. a 'bare' repository), but a valid Git repository
 124        *must* have the HEAD file; some porcelains may use it to
 125        guess the designated "default" branch of the repository
 126        (usually 'master').  It is legal if the named branch
 127        'name' does not (yet) exist.  In some legacy setups, it is
 128        a symbolic link instead of a symref that points at the current
 129        branch.
 130+
 131HEAD can also record a specific commit directly, instead of
 132being a symref to point at the current branch.  Such a state
 133is often called 'detached HEAD.'  See linkgit:git-checkout[1]
 134for details.
 135
 136branches::
 137        A slightly deprecated way to store shorthands to be used
 138        to specify a URL to 'git fetch', 'git pull' and 'git push'.
 139        A file can be stored as `branches/<name>` and then
 140        'name' can be given to these commands in place of
 141        'repository' argument.  See the REMOTES section in
 142        linkgit:git-fetch[1] for details.  This mechanism is legacy
 143        and not likely to be found in modern repositories.
 144
 145hooks::
 146        Hooks are customization scripts used by various Git
 147        commands.  A handful of sample hooks are installed when
 148        'git init' is run, but all of them are disabled by
 149        default.  To enable, the `.sample` suffix has to be
 150        removed from the filename by renaming.
 151        Read linkgit:githooks[5] for more details about
 152        each hook.
 153
 154index::
 155        The current index file for the repository.  It is
 156        usually not found in a bare repository.
 157
 158sharedindex.<SHA-1>::
 159        The shared index part, to be referenced by $GIT_DIR/index and
 160        other temporary index files. Only valid in split index mode.
 161
 162info::
 163        Additional information about the repository is recorded
 164        in this directory.
 165
 166info/refs::
 167        This file helps dumb transports discover what refs are
 168        available in this repository.  If the repository is
 169        published for dumb transports, this file should be
 170        regenerated by 'git update-server-info' every time a tag
 171        or branch is created or modified.  This is normally done
 172        from the `hooks/update` hook, which is run by the
 173        'git-receive-pack' command when you 'git push' into the
 174        repository.
 175
 176info/grafts::
 177        This file records fake commit ancestry information, to
 178        pretend the set of parents a commit has is different
 179        from how the commit was actually created.  One record
 180        per line describes a commit and its fake parents by
 181        listing their 40-byte hexadecimal object names separated
 182        by a space and terminated by a newline.
 183+
 184Note that the grafts mechanism is outdated and can lead to problems
 185transferring objects between repositories; see linkgit:git-replace[1]
 186for a more flexible and robust system to do the same thing.
 187
 188info/exclude::
 189        This file, by convention among Porcelains, stores the
 190        exclude pattern list. `.gitignore` is the per-directory
 191        ignore file.  'git status', 'git add', 'git rm' and
 192        'git clean' look at it but the core Git commands do not look
 193        at it.  See also: linkgit:gitignore[5].
 194
 195info/sparse-checkout::
 196        This file stores sparse checkout patterns.
 197        See also: linkgit:git-read-tree[1].
 198
 199remotes::
 200        Stores shorthands for URL and default refnames for use
 201        when interacting with remote repositories via 'git fetch',
 202        'git pull' and 'git push' commands.  See the REMOTES section
 203        in linkgit:git-fetch[1] for details.  This mechanism is legacy
 204        and not likely to be found in modern repositories.
 205
 206logs::
 207        Records of changes made to refs are stored in this
 208        directory.  See linkgit:git-update-ref[1]
 209        for more information.
 210
 211logs/refs/heads/`name`::
 212        Records all changes made to the branch tip named `name`.
 213
 214logs/refs/tags/`name`::
 215        Records all changes made to the tag named `name`.
 216
 217shallow::
 218        This is similar to `info/grafts` but is internally used
 219        and maintained by shallow clone mechanism.  See `--depth`
 220        option to linkgit:git-clone[1] and linkgit:git-fetch[1].
 221
 222modules::
 223        Contains the git-repositories of the submodules.
 224
 225SEE ALSO
 226--------
 227linkgit:git-init[1],
 228linkgit:git-clone[1],
 229linkgit:git-fetch[1],
 230linkgit:git-pack-refs[1],
 231linkgit:git-gc[1],
 232linkgit:git-checkout[1],
 233linkgit:gitglossary[7],
 234link:user-manual.html[The Git User's Manual]
 235
 236GIT
 237---
 238Part of the linkgit:git[1] suite.