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 gitlink: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
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,
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
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
+ gitlink: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 gitlink:git-checkout[1] for
+details.
branches::
A slightly deprecated way to store shorthands to be used
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.
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
info/exclude::
This file, by convention among Porcelains, stores the
- exclude pattern list. `git status` looks at it, but
- otherwise it is not looked at by any of the core git
- commands.
+ 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`.
remotes::
Stores shorthands to be used to give URL and default
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 gitlink:git-clone[1] and gitlink:git-fetch[1].
+