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

Re: [BUG] Clones from local repositories do not work correctly under Windows

From
Johannes Sixt <j6t@kdbg.org>
Date
Apr 12, 2024, 16:16 UTC
Message-ID
<01cf64db-2ff5-4be5-8968-d280ab0ffc50@kdbg.org>
In-Reply-To
<e25bbce7-8338-430b-865f-690fe3c94fb6@amyspark.me>
Am 12.04.24 um 15:05 schrieb L. E. Segovia:
Show 14 quoted lines
> Under a MSYS2 shell, follow these steps (feel free to replace the choice
> of remote repo with any other supporting a Rust crate):
> 
> 1. `cd` to a directory of your choice (let's call it `dirA`).
> 2. `git clone https://gitlab.gnome.org/GNOME/librsvg.git .`
> 3. `git checkout -b cerbero_build`.
> 4. `cd ..`
> 5. `git clone <full path to dirA> -s -b cerbero_build dirB`
> 6. `cd dirB`
> 7. `git status`
> 
> Now switch to any other shell of your choice, such as Git Bash, CMD, or
> PowerShell, and try issuing commands such as `git status`. It will
> result in a wall of "error: unable to normalize..."

Thanks, that is much more helpful. Here are my assumption, my explanation of the symptoms, and the conclusion (which is basically "if it hurts, don't do it"):

I assume that you have two installations of Git. One installation is used when you use the git command from the MSYS2 shell; it is the MSYS2 version. The other installation is Git for Windows or equivalent that is used by all the other shells.

When you clone a repository with -s, a .git/objects/info/alternates file is initialized that contains the path to the original repository. You can see its contents with `git count-objects -v`. I tested the reproduction recipe with my own build (which is a MinGW build, much like Git for Windows), and it looks like this:

C:\Temp\repoclone>git count-objects -v count: 0 size: 0 in-pack: 0 packs: 0 size-pack: 0 prune-packable: 0 garbage: 0 size-garbage: 0 alternate: C:/Temp/repoorig/.git/objects

See the last line? It begins with a drive letter. When you call the command with the MSYS2 version, it will look more like this:

alternate: /c/Temp/repoorig/.git/objects

This is the MSYS2/Cygwin absolute path with a "drive letter". Unfortunately, this kind of path is unintelligible for Git for Windows. It expects absolute paths to begin with drive letter-colon or a double-slash or double-backslash. For this reason, it reports "unable to normalize alternate object path".

The conclusion is: Do not use two different flavors of Git on a repository that is set up with a link to an alternate repository.

BTW, I did not do the followup test with `git am`. (Actually, I did, but there were no errors.) So, I cannot tell why your MSYS2 version suddenly also reports the "unable to normalize" error.

-- Hannes
Previous: L. E. SegoviaNext: L. E. Segovia
Message 4 of 9 in “[BUG] Clones from local repositories do not work correctly under Windows”
  1. L. E. SegoviaApr 11, 2024
  2. Johannes SixtApr 12, 2024
  3. L. E. SegoviaApr 12, 2024
  4. Johannes SixtApr 12, 2024
  5. L. E. SegoviaApr 12, 2024
  6. Junio C HamanoApr 12, 2024
  7. rsbecker@nexbridge.comApr 12, 2024
  8. L. E. SegoviaApr 12, 2024
  9. Johannes SixtApr 12, 2024

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.