Skip to content

Commit 5c11c0d

Browse files
derrickstoleegitster
authored andcommitted
Documentation: add extensions.worktreeConfig details
The extensions.worktreeConfig extension was added in 58b284a (worktree: add per-worktree config files, 2018-10-21) and was somewhat documented in Documentation/git-config.txt. However, the extensions.worktreeConfig value was not specified further in the list of possible config keys. The location of the config.worktree file is not specified, and there are some precautions that should be mentioned clearly, but are only mentioned in git-worktree.txt. Expand the documentation to help users discover the complexities of extensions.worktreeConfig by adding details and cross links in these locations (relative to Documentation/): - config/extensions.txt - git-config.txt - git-worktree.txt The updates focus on items such as * $GIT_DIR/config.worktree takes precedence over $GIT_COMMON_DIR/config. * The core.worktree and core.bare=true settings are incorrect to have in the common config file when extensions.worktreeConfig is enabled. * The sparse-checkout settings core.sparseCheckout[Cone] are recommended to be set in the worktree config. As documented in 1166419 ("Revert "check_repository_format_gently(): refuse extensions for old repositories"", 2020-07-15), this extension must be considered regardless of the repository format version for historical reasons. A future change will update references to extensions.worktreeConfig within git-sparse-checkout.txt, but a behavior change is needed before making those updates. Helped-by: Elijah Newren <[email protected]> Signed-off-by: Derrick Stolee <[email protected]> Reviewed-by: Elijah Newren <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 89bece5 commit 5c11c0d

File tree

3 files changed

+45
-5
lines changed

3 files changed

+45
-5
lines changed

Documentation/config/extensions.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,34 @@ extensions.objectFormat::
66
Note that this setting should only be set by linkgit:git-init[1] or
77
linkgit:git-clone[1]. Trying to change it after initialization will not
88
work and will produce hard-to-diagnose issues.
9+
10+
extensions.worktreeConfig::
11+
If enabled, then worktrees will load config settings from the
12+
`$GIT_DIR/config.worktree` file in addition to the
13+
`$GIT_COMMON_DIR/config` file. Note that `$GIT_COMMON_DIR` and
14+
`$GIT_DIR` are the same for the main working tree, while other
15+
working trees have `$GIT_DIR` equal to
16+
`$GIT_COMMON_DIR/worktrees/<id>/`. The settings in the
17+
`config.worktree` file will override settings from any other
18+
config files.
19+
+
20+
When enabling `extensions.worktreeConfig`, you must be careful to move
21+
certain values from the common config file to the main working tree's
22+
`config.worktree` file, if present:
23+
+
24+
* `core.worktree` must be moved from `$GIT_COMMON_DIR/config` to
25+
`$GIT_COMMON_DIR/config.worktree`.
26+
* If `core.bare` is true, then it must be moved from `$GIT_COMMON_DIR/config`
27+
to `$GIT_COMMON_DIR/config.worktree`.
28+
+
29+
It may also be beneficial to adjust the locations of `core.sparseCheckout`
30+
and `core.sparseCheckoutCone` depending on your desire for customizable
31+
sparse-checkout settings for each worktree. By default, the `git
32+
sparse-checkout` builtin enables `extensions.worktreeConfig`, assigns
33+
these config values on a per-worktree basis, and uses the
34+
`$GIT_DIR/info/sparse-checkout` file to specify the sparsity for each
35+
worktree independently. See linkgit:git-sparse-checkout[1] for more
36+
details.
37+
+
38+
For historical reasons, `extensions.worktreeConfig` is respected
39+
regardless of the `core.repositoryFormatVersion` setting.

Documentation/git-config.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,13 @@ from all available files.
141141
See also <<FILES>>.
142142

143143
--worktree::
144-
Similar to `--local` except that `.git/config.worktree` is
144+
Similar to `--local` except that `$GIT_DIR/config.worktree` is
145145
read from or written to if `extensions.worktreeConfig` is
146-
present. If not it's the same as `--local`.
146+
enabled. If not it's the same as `--local`. Note that `$GIT_DIR`
147+
is equal to `$GIT_COMMON_DIR` for the main working tree, but is of
148+
the form `$GIT_DIR/worktrees/<id>/` for other working trees. See
149+
linkgit:git-worktree[1] to learn how to enable
150+
`extensions.worktreeConfig`.
147151

148152
-f <config-file>::
149153
--file <config-file>::

Documentation/git-worktree.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ CONFIGURATION FILE
286286
------------------
287287
By default, the repository `config` file is shared across all working
288288
trees. If the config variables `core.bare` or `core.worktree` are
289-
already present in the config file, they will be applied to the main
290-
working trees only.
289+
present in the common config file and `extensions.worktreeConfig` is
290+
disabled, then they will be applied to the main working tree only.
291291

292292
In order to have configuration specific to working trees, you can turn
293293
on the `worktreeConfig` extension, e.g.:
@@ -307,11 +307,16 @@ them to the `config.worktree` of the main working tree. You may also
307307
take this opportunity to review and move other configuration that you
308308
do not want to share to all working trees:
309309

310-
- `core.worktree` and `core.bare` should never be shared
310+
- `core.worktree` should never be shared.
311+
312+
- `core.bare` should not be shared if the value is `core.bare=true`.
311313

312314
- `core.sparseCheckout` is recommended per working tree, unless you
313315
are sure you always use sparse checkout for all working trees.
314316

317+
See the documentation of `extensions.worktreeConfig` in
318+
linkgit:git-config[1] for more details.
319+
315320
DETAILS
316321
-------
317322
Each linked working tree has a private sub-directory in the repository's

0 commit comments

Comments
 (0)