This is a brand-new thread to replace ds/early-access. The discussion on
that thread was very helpful [1].
With this in mind, I propose instead a set of "feature.*" config settings
that form groups of "community recommended" settings (with some caveats). In
the space below, I'll list a set of possible feature names and the implied
config options.
First, the main two categories we've discussed so far: many commits and many
files. These two feature sets are for when your repo is large in one of
these dimensions. Perhaps there are other settings to include in these?
feature.manyFiles:
index.version = 4
core.untrackedCache = true
feature.manyCommits:
core.commitGraph = true
gc.writeCommitGraph = true
(future: fetch.writeSplitCommitGraph = true)
Note: the fetch.writeSplitCommitGraph does not exist yet, but could be
introduced in a later release to write a new commit-graph (with --split) on
fetch.
The other category that has been discussed already is that of "experimental
features that we generally think are helpful but change behavior slightly in
some cases".
feature.experimental:
pack.useSparse = true
merge.directoryRenames = true
fetch.negotiationAlgorithm = skipping
Specifically, this setting is for config values we are not sure will ever be
on by default, but additional testing is needed to be sure. This is
different than a possible 'feature.preview' setting that would include
config settings that we are committed to updating the defaults in a future
release. There are many ways we can take this idea in the future (including
more additions to these categories).
Thanks, -Stolee
[1] https://public-inbox.org/git/[email protected]/
Derrick Stolee (5):
repo-settings: consolidate some config settings
repo-settings: add feature.manyCommits setting
repo-settings: parse core.untrackedCache
repo-settings: create feature.manyFiles setting
repo-settings: create feature.experimental setting
Documentation/config.txt | 2 +
Documentation/config/core.txt | 7 +-
Documentation/config/feature.txt | 42 +++++++++++
Documentation/config/fetch.txt | 3 +-
Documentation/config/gc.txt | 4 +-
Documentation/config/index.txt | 1 +
Documentation/config/merge.txt | 3 +-
Documentation/config/pack.txt | 3 +-
Makefile | 1 +
builtin/am.c | 4 +-
builtin/gc.c | 13 ++--
builtin/pack-objects.c | 9 ++-
builtin/update-index.c | 7 +-
commit-graph.c | 7 +-
config.c | 24 ------
fetch-negotiator.c | 26 ++++---
fetch-negotiator.h | 5 +-
fetch-pack.c | 11 ++-
merge-recursive.c | 32 ++++----
merge-recursive.h | 1 -
read-cache.c | 31 ++++----
repo-settings.c | 108 +++++++++++++++++++++++++++
repo-settings.h | 29 +++++++
repository.h | 3 +
t/t1600-index.sh | 31 ++++++--
t/t5552-skipping-fetch-negotiator.sh | 23 ------
26 files changed, 303 insertions(+), 127 deletions(-)
create mode 100644 Documentation/config/feature.txt
create mode 100644 repo-settings.c
create mode 100644 repo-settings.h
base-commit: 9c9b961d7eb15fb583a2a812088713a68a85f1c0
Published-As:
https://github.com/gitgitgadget/git/releases/tag/pr-292%2Fderrickstolee%2Frepo-settings%2Fhead-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git
pr-292/derrickstolee/repo-settings/head-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/292
--
gitgitgadget