mirror of
https://github.com/git/git.git
synced 2026-03-05 14:59:04 +01:00
* ar/parallel-hooks: hook: allow runtime enabling extensions.hookStdoutToStderr hook: introduce extensions.hookStdoutToStderr hook: add per-event jobs config hook: add -j/--jobs option to git hook run hook: mark non-parallelizable hooks hook: allow parallel hook execution hook: parse the hook.jobs config hook: refactor hook_config_cache from strmap to named struct config: add a repo_config_get_uint() helper repository: fix repo_init() memleak due to missing _clear()
166 lines
6.9 KiB
Plaintext
166 lines
6.9 KiB
Plaintext
extensions.*::
|
|
Unless otherwise stated, is an error to specify an extension if
|
|
`core.repositoryFormatVersion` is not `1`. See
|
|
linkgit:gitrepository-layout[5].
|
|
+
|
|
compatObjectFormat:::
|
|
Specify a compatibility hash algorithm to use. The acceptable values
|
|
are `sha1` and `sha256`. The value specified must be different from the
|
|
value of `extensions.objectFormat`. This allows client level
|
|
interoperability between git repositories whose objectFormat matches
|
|
this compatObjectFormat. In particular when fully implemented the
|
|
pushes and pulls from a repository in whose objectFormat matches
|
|
compatObjectFormat. As well as being able to use oids encoded in
|
|
compatObjectFormat in addition to oids encoded with objectFormat to
|
|
locally specify objects.
|
|
+
|
|
Note that the functionality enabled by this extension is incomplete and subject
|
|
to change. It currently exists only to allow development and testing of
|
|
the underlying feature and is not designed to be enabled by end users.
|
|
|
|
noop:::
|
|
This extension does not change git's behavior at all. It is useful only
|
|
for testing format-1 compatibility.
|
|
+
|
|
For historical reasons, this extension is respected regardless of the
|
|
`core.repositoryFormatVersion` setting.
|
|
|
|
noop-v1:::
|
|
This extension does not change git's behavior at all. It is useful only
|
|
for testing format-1 compatibility.
|
|
|
|
objectFormat:::
|
|
Specify the hash algorithm to use. The acceptable values are `sha1` and
|
|
`sha256`. If not specified, `sha1` is assumed.
|
|
+
|
|
Note that this setting should only be set by linkgit:git-init[1] or
|
|
linkgit:git-clone[1]. Trying to change it after initialization will not
|
|
work and will produce hard-to-diagnose issues.
|
|
|
|
partialClone:::
|
|
When enabled, indicates that the repo was created with a partial clone
|
|
(or later performed a partial fetch) and that the remote may have
|
|
omitted sending certain unwanted objects. Such a remote is called a
|
|
"promisor remote" and it promises that all such omitted objects can
|
|
be fetched from it in the future.
|
|
+
|
|
The value of this key is the name of the promisor remote.
|
|
+
|
|
For historical reasons, this extension is respected regardless of the
|
|
`core.repositoryFormatVersion` setting.
|
|
|
|
preciousObjects:::
|
|
If enabled, indicates that objects in the repository MUST NOT be deleted
|
|
(e.g., by `git-prune` or `git repack -d`).
|
|
+
|
|
For historical reasons, this extension is respected regardless of the
|
|
`core.repositoryFormatVersion` setting.
|
|
|
|
refStorage:::
|
|
Specify the ref storage format and a corresponding payload. The value
|
|
can be either a format name or a URI:
|
|
+
|
|
--
|
|
* A format name alone (e.g., `reftable` or `files`).
|
|
|
|
* A URI format `<format>://<payload>` explicitly specifies both the
|
|
format and payload (e.g., `reftable:///foo/bar`).
|
|
|
|
Supported format names are:
|
|
|
|
include::../ref-storage-format.adoc[]
|
|
|
|
The payload is passed directly to the reference backend. For the files and
|
|
reftable backends, this must be a filesystem path where the references will
|
|
be stored. Defaulting to the commondir when no payload is provided. Relative
|
|
paths are resolved relative to the `$GIT_DIR`. Future backends may support
|
|
other payload schemes, e.g., postgres://127.0.0.1:5432?database=myrepo.
|
|
--
|
|
+
|
|
Note that this setting should only be set by linkgit:git-init[1] or
|
|
linkgit:git-clone[1]. Trying to change it after initialization will not
|
|
work and will produce hard-to-diagnose issues.
|
|
|
|
relativeWorktrees:::
|
|
If enabled, indicates at least one worktree has been linked with
|
|
relative paths. Automatically set if a worktree has been created or
|
|
repaired with either the `--relative-paths` option or with the
|
|
`worktree.useRelativePaths` config set to `true`.
|
|
|
|
submodulePathConfig:::
|
|
This extension is for the minority of users who:
|
|
+
|
|
--
|
|
* Encounter errors like `refusing to create ... in another submodule's git dir`
|
|
due to a number of reasons, like case-insensitive filesystem conflicts when
|
|
creating modules named `foo` and `Foo`.
|
|
* Require more flexible submodule layouts, for example due to nested names like
|
|
`foo`, `foo/bar` and `foo/baz` not supported by the default gitdir mechanism
|
|
which uses `.git/modules/<plain-name>` locations, causing further conflicts.
|
|
--
|
|
+
|
|
When `extensions.submodulePathConfig` is enabled, the `submodule.<name>.gitdir`
|
|
config becomes the single source of truth for all submodule gitdir paths and is
|
|
automatically set for all new submodules both during clone and init operations.
|
|
+
|
|
Git will error out if a module does not have a corresponding
|
|
`submodule.<name>.gitdir` set.
|
|
+
|
|
Existing (pre-extension) submodules need to be migrated by adding the missing
|
|
config entries. This can be done manually, e.g. for each submodule:
|
|
`git config submodule.<name>.gitdir .git/modules/<name>`, or via the
|
|
`git submodule--helper migrate-gitdir-configs` command which iterates over all
|
|
submodules and attempts to migrate them.
|
|
+
|
|
The extension can be enabled automatically for new repositories by setting
|
|
`init.defaultSubmodulePathConfig` to `true`, for example by running
|
|
`git config --global init.defaultSubmodulePathConfig true`.
|
|
|
|
hookStdoutToStderr:::
|
|
If enabled, the stdout of all hooks is redirected to stderr. This
|
|
enforces consistency, since by default most hooks already behave
|
|
this way, with pre-push being the only known exception.
|
|
+
|
|
This is useful for parallel hook execution (see the `hook.jobs` config in
|
|
linkgit:git-config[1]), as it allows the output of multiple hooks running
|
|
in parallel to be grouped (de-interleaved) correctly.
|
|
+
|
|
Defaults to disabled. When disabled, `hook.jobs` has no effect for pre-push
|
|
hooks, which will always be run sequentially.
|
|
+
|
|
The extension can also be enabled by setting `hook.forceStdoutToStderr`
|
|
to `true` in the global configuration.
|
|
|
|
worktreeConfig:::
|
|
If enabled, then worktrees will load config settings from the
|
|
`$GIT_DIR/config.worktree` file in addition to the
|
|
`$GIT_COMMON_DIR/config` file. Note that `$GIT_COMMON_DIR` and
|
|
`$GIT_DIR` are the same for the main working tree, while other
|
|
working trees have `$GIT_DIR` equal to
|
|
`$GIT_COMMON_DIR/worktrees/<id>/`. The settings in the
|
|
`config.worktree` file will override settings from any other
|
|
config files.
|
|
+
|
|
When enabling this extension, you must be careful to move
|
|
certain values from the common config file to the main working tree's
|
|
`config.worktree` file, if present:
|
|
+
|
|
--
|
|
* `core.worktree` must be moved from `$GIT_COMMON_DIR/config` to
|
|
`$GIT_COMMON_DIR/config.worktree`.
|
|
* If `core.bare` is true, then it must be moved from `$GIT_COMMON_DIR/config`
|
|
to `$GIT_COMMON_DIR/config.worktree`.
|
|
--
|
|
+
|
|
It may also be beneficial to adjust the locations of `core.sparseCheckout`
|
|
and `core.sparseCheckoutCone` depending on your desire for customizable
|
|
sparse-checkout settings for each worktree. By default, the `git
|
|
sparse-checkout` builtin enables this extension, assigns
|
|
these config values on a per-worktree basis, and uses the
|
|
`$GIT_DIR/info/sparse-checkout` file to specify the sparsity for each
|
|
worktree independently. See linkgit:git-sparse-checkout[1] for more
|
|
details.
|
|
+
|
|
For historical reasons, this extension is respected regardless of the
|
|
`core.repositoryFormatVersion` setting.
|