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

Re: Git client bug with branch containing "."

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Apr 1, 2025, 15:55 UTC
Message-ID
<4dad78d0-efe2-e01f-cd5f-097259bf961f@gmx.de>
In-Reply-To
<VI1PR04MB695864E125F3381932332BDC91AC2@VI1PR04MB6958.eurprd04.prod.outlook.com>
Hi Milan,
On Tue, 1 Apr 2025, Milan AJDINOVIC wrote:
Show 12 quoted lines
> What did you do before the bug happened? (Steps to reproduce your issue)
> On GitHub Enterprise server I have created a branch named: features/team1/feature./1.0/main in my repo.
> I tried to fetch the branch and switch to it.
>
> What did you expect to happen? (Expected behavior)
> I expected for branch to be switched to:features/team1/feature./1.0/main
> What happened instead? (Actual behavior)
> I got an error: fatal: cannot lock ref 'refs/heads/features/team1/feature./1.0/main': unable to create directory for .git/refs/heads/features/team1/feature./1.0/main
> What's different between what you expected and what actually happened?
> The branch did no switch.
> Anything else you want to add:
> From my analisys the problem is because my branch have "feature." in it and Windows can not create directory with "." at the end.

That analysis and conclusion is correct, as per https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file:

	Do not end a file or directory name with a space or a period.
	Although the underlying file system may support such names, the
	Windows shell and user interface does not.

The problem here is the directory name `feature.`. You cannot even track this locally, at least not with the way Git implemented its default refs backend because it wants to map the ref name to a path in the filesystem.

Note: It _might_ pretend to work when you clone, but any subsequent fetch
that updates that ref will fail.

Your only chance to track the ref locally is to map it to a different name in your Git config, like so (`git config edit`):

	[remote "origin"]
		url = [...]
		fetch = +refs/heads/*:refs/remotes/origin/*
		fetch = ^refs/heads/features/team1/feature./1.0/main
		fetch = refs/heads/features/team1/feature./1.0/main:refs/heads/features/team1/feature/1.0/main

After that, you should be able to fetch and then check out that branch under the name on the right-hand side, i.e. without that `.` after `feature`.

Ciao, Johannes

Show 30 quoted lines
> Please review the rest of the bug report below.
> You can delete any lines you don't wish to share.
>
>
> [System Info]
> git version:
> git version 2.42.0.windows.2
> cpu: x86_64
> built from commit: 2f819d1670fff9a1818f63b6722e9959405378e3
> sizeof-long: 4
> sizeof-size_t: 8
> shell-path: /bin/sh
> feature: fsmonitor--daemon
> uname: Windows 10.0 19045
> compiler info: gnuc: 13.2
> libc info: no libc information available
> $SHELL (typically, interactive shell): <unset>
>
>
>
>
>
>
>
>
>
> General
>
>
>
Previous: Milan AJDINOVICNext: brian m. carlson
Message 2 of 3 in “Git client bug with branch containing "."”
  1. Milan AJDINOVICApr 1, 2025
  2. Johannes SchindelinApr 1, 2025
  3. brian m. carlsonApr 1, 2025

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.