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

Bug Report: git submodule overwrites submodules of same name but different path

From
Mmlell08@gmail.com <mlell08@gmail.com>
Date
May 5, 2025, 13:41 UTC
Message-ID
<5b8e60ba-b05b-4389-8c06-88c143ceee10@gmail.com>
Dear list,

I have encountered a problem with git submodule add that leads to info of a submodule being lost if another submodule of the same name is added. This can happen if a submodule has existed on the path in an earlier commit but has been moved (git mv edits path= in .gitmodules but not the submodule name, probably to avoid moving the corresponding folder in .git/modules)

Find below the summary from "git bugreport" (Answers in English).

Best wishes, Moritz

# What did you do to reproduce the error

git init parent cd parent git commit --allow-empty -m "initial commit" git init child git -C child commit --allow-empty -m "initial commit" git submodule add https://example.com/child.git child git commit -m "Add submodule child"

git mv child child_old git commit -m "Move child to child_old"

git init child git -C child commit --allow-empty -m "initial commit" git submodule add https://example.com/child2.git child git commit -m "Add an new submodule at child/"

cat .gitmodules
# What did you expect to happen

I expect that both submodules have entries in the .gitmodules file. Git submodule names are given by the path, so I expected some way of resolving ambiguity, for example, git appends ".path" in other cases to disambiguate. So the expected .gitmodules content would be

[submodule "child"]
	path = child_old
	url = https://example.com/child.git
[submodule "child.path"]
	path = child
	url = https://example.com/child2.git
# What happened instead

I see that there is only one entry in .gitmodules listing the new submodule, under the name "child":

[submodule "child"]
	path = child
	url = https://example.com/child2.git
# How is this different from the expected result

The old submodule (path = child_old) is not listed, the information about the origin of the old subrepo is lost.

[System Info]
git Version:
git version 2.49.0
cpu: x86_64
built from commit: 683c54c999c301c2cd6f715c411407c413b1d84e
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
libcurl: 8.12.1
OpenSSL: OpenSSL 3.4.1 11 Feb 2025
zlib: 1.3.1
uname: Linux 6.14.3-arch1-1 #1 SMP PREEMPT_DYNAMIC Sun, 20 Apr 2025 
12:38:52 +0000 x86_64
Compiler Info: gnuc: 14.2
libc Info: glibc: 2.41
$SHELL (typically, interactive shell): /bin/bash
[Active Hooks]
Next: K Jayatheerth
Message 1 of 2 in “Bug Report: git submodule overwrites submodules of same name but different path”
  1. mlell08@gmail.comMay 5, 2025
  2. Re "Bug Report: git submodule overwrites submodules of same name but different path"K Jayatheerth, May 6, 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.