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/pull.254.git.gitgitgadget@xxxxxxxxx/ 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