Merge branch 'db/send-email-omit-cc'
[gitweb.git] / Documentation / repository-layout.txt
index 275d18bb545f3b14ad1f7de50d4224f184a507f8..69391300944438576e11cff19b4ce1aa2215b97b 100644 (file)
@@ -18,6 +18,8 @@ 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
@@ -32,7 +34,7 @@ objects/[0-9a-f][0-9a-f]::
        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.
+       (or 'loose') objects.
 
 objects/pack::
        Packs (files that store many object in compressed form,
@@ -52,9 +54,20 @@ objects/info/packs::
        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.
+       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
@@ -69,13 +82,32 @@ 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 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
+       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 such a symlink here.  It is legal if the
-       named branch 'name' does not (yet) exist.
+       *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
@@ -87,7 +119,7 @@ branches::
 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
+       `git init` 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.
@@ -101,14 +133,14 @@ info::
        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.
+       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
@@ -123,8 +155,7 @@ info/exclude::
        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`.
+       at it.  See also: linkgit:gitignore[5].
 
 remotes::
        Stores shorthands to be used to give URL and default
@@ -141,3 +172,8 @@ logs/refs/heads/`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].