1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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[]
|