You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.4 KiB
64 lines
2.4 KiB
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[]
|
|
|