Hi Derrick, I'm a little bit late to the part, but I think that this is a really interesting feature with a lot of really interesting discussion so far. I hope you don't mind me throwing in my $.02 as well :-). On Mon, Jul 08, 2019 at 03:22:49PM -0400, Derrick Stolee wrote: > On 7/1/2019 10:29 AM, Derrick Stolee via GitGitGadget wrote: > > Here is a second run at this RFC, which aims to create a "meta" config > > setting that automatically turns on other settings according to a user's > > willingness to trade new Git behavior or new feature risk for performance > > benefits. The new name for the setting is "core.featureAdoptionRate" and is > > an integer scale from 0 to 10. There will be multiple "categories" of > > settings, and the intention is to allow more granular levels as necessary. > > (Adding people who contributed feedback to CC line.) > > It seems that this "Feature Adoption Rate" idea was too simplistic, and > had several issues. Time to take a different stab at this direction, but > with these clear goals in mind: > > 1. We want intermediate users to be able to take advantage of new config > options without watching every release for new config options. > > 2. The config name should match the general effect of the implied > settings. > > 3. There are orthogonal settings that may not apply beneficially to > all repos. I think that this is a clear representation of the initial reaction I had to the 'core.featureAdoptionRate' idea. I had drafted a response to advance these concerns before realizing that this subsequent RFC existed, which does a nice job highlighting the concerns that I had. > 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. I think that 'feature.*' configuration settings are a good idea. They address each of the above (3) concerns, since they are: 1. Can be easily adopted by even novice-level users. Perhaps novice-users will not be setting 'feature.manyFiles = 1', but they can easily opt-in to organization-level features that have been defined to handle organization-specific concerns. 2. This one is straightforward: I think that setting 'feature.manyFiles = 1' is clearer than 'feature.adoptionRate = 3'. 3. Right. Windows developers may have a different set of what features are interesting to adopt than, say, every-day users, and likewise for kernel developers, too. > 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 > index.threads = true > core.untrackedCache = true > > feature.manyCommits: > core.commitGraph = true > gc.writeCommitGraph = true > (future: fetch.writeSplitCommitGraph = true) I think that for this *feature* (pun mostly unintended) to really shine, we ought to adopt Junio's suggestion in [1] that we allow users to: * use pre-baked features that are defined within and shipped with Git itself. * define their own features and second-order features that can reference both pre-baked and user-defined feature groups. I think that this will let, say, folks at Microsoft to define a set of features that are interesting to Windows developers, that are separate from the features that core Git thinks will be interesting to every-day users. > > <snip> > > Thanks, > -Stolee Thanks, Taylor [1]: https://public-inbox.org/git/xmqqftonsr6a.fsf@xxxxxxxxxxxxxxxxxxxxxxxxx/