Re: how exactly can git config section names contain periods?
- Date: Fri, 1 Jun 2018 17:07:31 -0400
- From: Jeff King <peff@xxxxxxxx>
- Subject: Re: how exactly can git config section names contain periods?
On Fri, Jun 01, 2018 at 04:14:12PM -0400, Robert P. J. Day wrote:
> more oddities in my travels, this from Doc.../config.txt:
> "The file consists of sections and variables. A section begins with
> the name of the section in square brackets and continues until the
> next section begins. Section names are case-insensitive. Only
> alphanumeric characters, `-` and `.` are allowed in section names.
> ^ ?????
> what? how can section names contain periods? reading further,
I agree that seems like nonsense. Once we get to the first period, we
consider parts after that to be a subsection name, due to the
"flattened" form we use in various places (i.e., "section.key" or
Syntactically we do allow:
key = true
in the config file, which should equivalent to:
key = true
This is mentioned later:
There is also a deprecated [section.subsection] syntax. With this
syntax, the subsection name is converted to lower-case and is also
compared case sensitively. These subsection names follow the same
restrictions as section names.
This has been deprecated since 2011. Maybe it's time to finally get rid
> "Sections can be further divided into subsections. To begin a
> subsection put its name in double quotes, separated by space from the
> section name, in the section header, like in the example below:
> [section "subsection"]
> ok, so how on earth would i use "git config" at the command line to
> set a config variable with some arbitrary level of subsections? let's
> try this:
You don't. There are only three levels: section, (optional) subsection,
and key. If there is a subsection, it consists of _everything_ between
the two outer periods.
> $ git config --global a.b.c.d.e rday
> huh ... seemed to work fine, and added this to my ~/.gitconfig:
> [a "b.c.d"]
> e = rday
> as i see it, the first component is intgerpreted as the section name,
> the last component is the variable/key(?) name, and everything in
> between is treated as subsection(s), which is not at all obvious from
> that Doc file, or from "man git-config".
Yep, your understanding is correct.
> and if a section name can contain periods, how would you specify
> that at the command line?
You can't, because section names cannot contain periods. ;)
I agree that the docs you quoted are somewhere between misleading and
outright wrong. At the very least, we should remove the part about ".
allowed in section names". But I also think we could stand to make the
3-level mental model more explicit.