git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: how exactly can git config section names contain periods?

From
Jeff King <peff@peff.net>
Date
Jun 1, 2018, 21:07 UTC
Message-ID
<20180601210731.GA20974@sigill.intra.peff.net>
In-Reply-To
<alpine.LFD.2.21.1806011606490.11215@localhost.localdomain>
On Fri, Jun 01, 2018 at 04:14:12PM -0400, Robert P. J. Day wrote:
Show 9 quoted lines
>   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 "section.subsection.key").

Syntactically we do allow:
  [foo.bar]
  key = true
in the config file, which should equivalent to:
  [foo "bar"]
  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 of it.

Show 11 quoted lines
> "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.

Show 11 quoted lines
>   $ 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.

-Peff
Previous: Randall S. BeckerNext: Robert P. J. Day
Message 3 of 13 in “how exactly can git config section names contain periods?”
  1. Robert P. J. DayJun 1, 2018
  2. Randall S. BeckerJun 1, 2018
  3. Jeff KingJun 1, 2018
  4. Robert P. J. DayJun 1, 2018
  5. Junio C HamanoJun 1, 2018
  6. Jeff KingJun 2, 2018
  7. Robert P. J. DayJun 2, 2018
  8. Jeff KingJun 2, 2018
  9. Robert P. J. DayJun 3, 2018
  10. SZEDER GáborJun 3, 2018
  11. Robert P. J. DayJun 3, 2018
  12. Jeff KingJun 4, 2018
  13. Johannes SixtJun 3, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.