blob: 242a2c485a04c5eba435bc78ca26801cf4a0abde [file]
uploadpack.hideRefs::
This variable is the same as `transfer.hideRefs`, but applies
only to `upload-pack` (and so affects only fetches, not pushes).
An attempt to fetch a hidden ref by `git fetch` will fail. See
also `uploadpack.allowTipSHA1InWant`.
uploadpack.allowTipSHA1InWant::
When `uploadpack.hideRefs` is in effect, allow `upload-pack`
to accept a fetch request that asks for an object at the tip
of a hidden ref (by default, such a request is rejected).
See also `uploadpack.hideRefs`. Even if this is false, a client
may be able to steal objects via the techniques described in the
"SECURITY" section of the linkgit:gitnamespaces[7] man page; it's
best to keep private data in a separate repository.
uploadpack.allowReachableSHA1InWant::
Allow `upload-pack` to accept a fetch request that asks for an
object that is reachable from any ref tip. However, note that
calculating object reachability is computationally expensive.
Defaults to `false`. Even if this is false, a client may be able
to steal objects via the techniques described in the "SECURITY"
section of the linkgit:gitnamespaces[7] man page; it's best to
keep private data in a separate repository.
uploadpack.allowAnySHA1InWant::
Allow `upload-pack` to accept a fetch request that asks for any
object at all.
It implies `uploadpack.allowTipSHA1InWant` and
`uploadpack.allowReachableSHA1InWant`. If set to `true` it will
enable both of them, it set to `false` it will disable both of
them.
By default not set.
uploadpack.keepAlive::
When `upload-pack` has started `pack-objects`, there may be a
quiet period while `pack-objects` prepares the pack. Normally
it would output progress information, but if `--quiet` was used
for the fetch, `pack-objects` will output nothing at all until
the pack data begins. Some clients and networks may consider
the server to be hung and give up. Setting this option instructs
`upload-pack` to send an empty keepalive packet every
`uploadpack.keepAlive` seconds. Setting this option to 0
disables keepalive packets entirely. The default is 5 seconds.
uploadpack.packObjectsHook::
If this option is set, when `upload-pack` would run
`git pack-objects` to create a packfile for a client, it will
run this shell command instead. The `pack-objects` command and
arguments it _would_ have run (including the `git pack-objects`
at the beginning) are appended to the shell command. The stdin
and stdout of the hook are treated as if `pack-objects` itself
was run. I.e., `upload-pack` will feed input intended for
`pack-objects` to the hook, and expects a completed packfile on
stdout.
+
Note that this configuration variable is only respected when it is specified
in protected configuration (see <<SCOPES>>). This is a safety measure
against fetching from untrusted repositories.
uploadpack.allowFilter::
If this option is set, `upload-pack` will support partial
clone and partial fetch object filtering.
uploadpackfilter.allow::
Provides a default value for unspecified object filters (see: the
below configuration variable). If set to `true`, this will also
enable all filters which get added in the future.
Defaults to `true`.
uploadpackfilter.<filter>.allow::
Explicitly allow or ban the object filter corresponding to
`<filter>`, where `<filter>` may be one of: `blob:none`,
`blob:limit`, `object:type`, `tree`, `sparse:oid`, or `combine`.
If using combined filters, both `combine` and all of the nested
filter kinds must be allowed. Defaults to `uploadpackfilter.allow`.
uploadpackfilter.tree.maxDepth::
Only allow `--filter=tree:<n>` when `<n>` is no more than the value of
`uploadpackfilter.tree.maxDepth`. If set, this also implies
`uploadpackfilter.tree.allow=true`, unless this configuration
variable had already been set. Has no effect if unset.
uploadpack.allowRefInWant::
If this option is set, `upload-pack` will support the `ref-in-want`
feature of the protocol version 2 `fetch` command. This feature
is intended for the benefit of load-balanced servers which may
not have the same view of what OIDs their refs point to due to
replication delay.
uploadpack.lazyFetchTrusted::
A multi-valued configuration variable, each value of which
specifies the absolute local path of a repository that
`upload-pack` is allowed to lazily fetch missing objects for.
+
A repository is identified by its git directory, after following any
`.git` file and resolving symbolic links. That is the repository
itself if it is bare, the `.git` directory of a repository that has a
worktree, or the directory that a `.git` file points to, for example
when the repository was created with `--separate-git-dir` or for a
linked worktree (see linkgit:git-worktree[1]). So a non-bare
repository served as `/srv/repo` usually has to be allowlisted as
`/srv/repo/.git`. Giving a path with `/*` appended to it will trust
all repositories under the named directory. To trust all served
repositories, set `uploadpack.lazyFetchTrusted` to the string `*`.
+
The value of this setting is interpolated, i.e., `~/<path>` expands to
a path relative to the home directory and `%(prefix)/<path>` expands
to a path relative to Git's (runtime) prefix.
+
By default, `upload-pack` refuses to lazily fetch (see the description
of the `GIT_NO_LAZY_FETCH` environment variable in
linkgit:git-upload-pack[1]), because doing so would run `git fetch`,
which may execute arbitrary commands specified in the configuration
and hooks of the served repository. Listing a repository here tells
`upload-pack` that it is trusted, so lazy fetching from the promisor
remotes configured in it is allowed. This is similar to setting
`GIT_NO_LAZY_FETCH` to `0`, but only for the matching repositories:
unlike that environment variable, the trust is not inherited by child
processes. So if a trusted repository lazily fetches from a promisor
remote that is itself served by `upload-pack` on the same machine,
for example through a local path or a `file://` URL, lazy fetching is
allowed there only if that promisor remote is also listed here. An
explicitly set `GIT_NO_LAZY_FETCH` takes precedence over this setting.
+
Note that this allows lazy fetching from any promisor remote
configured in the served repository, not only from the promisor
remotes that the client accepted using the "promisor-remote" protocol
v2 capability (see linkgit:gitprotocol-v2[5]). The served repository
is trusted as a whole, including its configuration, so the promisor
remotes it configures are trusted too. It is the server operator's
responsibility to make sure that the promisor remotes of a trusted
repository are also trustworthy. In particular, a trusted repository
should not be configured as its own promisor remote, as `upload-pack`
would then try to lazily fetch missing objects from the repository
itself, which is pointless.
+
As this is a multi-valued setting, you can add more than one
repository via `git config (--global|--system) --add`. To reset the
list of trusted repositories (e.g., to override any such repositories
specified in the system config), add an `uploadpack.lazyFetchTrusted`
entry with an empty value.
+
Note that this configuration variable is only respected when it is
specified in protected configuration (see <<SCOPES>>). This prevents
untrusted repositories from tampering with this value.