Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
64
Documentation/gitnamespaces.txt
Normal file
64
Documentation/gitnamespaces.txt
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
gitnamespaces(7)
|
||||
================
|
||||
|
||||
NAME
|
||||
----
|
||||
gitnamespaces - Git namespaces
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
GIT_NAMESPACE=<namespace> 'git upload-pack'
|
||||
GIT_NAMESPACE=<namespace> 'git receive-pack'
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
||||
Git supports dividing the refs of a single repository into multiple
|
||||
namespaces, each of which has its own branches, tags, and HEAD. Git can
|
||||
expose each namespace as an independent repository to pull from and push
|
||||
to, while sharing the object store, and exposing all the refs to
|
||||
operations such as linkgit:git-gc[1].
|
||||
|
||||
Storing multiple repositories as namespaces of a single repository
|
||||
avoids storing duplicate copies of the same objects, such as when
|
||||
storing multiple branches of the same source. The alternates mechanism
|
||||
provides similar support for avoiding duplicates, but alternates do not
|
||||
prevent duplication between new objects added to the repositories
|
||||
without ongoing maintenance, while namespaces do.
|
||||
|
||||
To specify a namespace, set the `GIT_NAMESPACE` environment variable to
|
||||
the namespace. For each ref namespace, Git stores the corresponding
|
||||
refs in a directory under `refs/namespaces/`. For example,
|
||||
`GIT_NAMESPACE=foo` will store refs under `refs/namespaces/foo/`. You
|
||||
can also specify namespaces via the `--namespace` option to
|
||||
linkgit:git[1].
|
||||
|
||||
Note that namespaces which include a `/` will expand to a hierarchy of
|
||||
namespaces; for example, `GIT_NAMESPACE=foo/bar` will store refs under
|
||||
`refs/namespaces/foo/refs/namespaces/bar/`. This makes paths in
|
||||
`GIT_NAMESPACE` behave hierarchically, so that cloning with
|
||||
`GIT_NAMESPACE=foo/bar` produces the same result as cloning with
|
||||
`GIT_NAMESPACE=foo` and cloning from that repo with `GIT_NAMESPACE=bar`. It
|
||||
also avoids ambiguity with strange namespace paths such as `foo/refs/heads/`,
|
||||
which could otherwise generate directory/file conflicts within the `refs`
|
||||
directory.
|
||||
|
||||
linkgit:git-upload-pack[1] and linkgit:git-receive-pack[1] rewrite the
|
||||
names of refs as specified by `GIT_NAMESPACE`. git-upload-pack and
|
||||
git-receive-pack will ignore all references outside the specified
|
||||
namespace.
|
||||
|
||||
The smart HTTP server, linkgit:git-http-backend[1], will pass
|
||||
GIT_NAMESPACE through to the backend programs; see
|
||||
linkgit:git-http-backend[1] for sample configuration to expose
|
||||
repository namespaces as repositories.
|
||||
|
||||
For a simple local test, you can use linkgit:git-remote-ext[1]:
|
||||
|
||||
----------
|
||||
git clone ext::'git --namespace=foo %s /tmp/prefixed.git'
|
||||
----------
|
||||
|
||||
include::transfer-data-leaks.txt[]
|
||||
Loading…
Add table
Add a link
Reference in a new issue