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

Possible bug: Git submodules can get into broken state

From
CWChris Wilson <chris+gitscm@aptivate.org>
Date
Apr 4, 2013, 17:10 UTC
Message-ID
<alpine.DEB.2.02.1304041758140.965@lap-x201.fen.aptivate.org>
Hi all,

If your git repo's .gitmodules contains a URL that you don't have access to (for example you download someone else's code and it references a submodule using their writable git@github.com URL) then:

* git submodule init will add them to .git/config, with the wrong URLs.
* git submodule update will fail to check out the repos, leaving an empty 
directory for the first one, and nothing for the others.

This state is broken (wrong URLs in .git/config), and AFAIK there's nothing you can do to check out these submodules without either:

(a) manually hacking them out of .git/config, or

(b) doing "git submodule rm" and then "git checkout .gitmodules" to undo the damage to that file.

The procedure I tried, which I expected to work, was:
* git submodule sync (doesn't sync them, because the directories don't 
exist or don't contain a valid git repo?)
* git submodule init (ignores them, because they're already in 
.git/config?)
* git submodule update (still fails because the URL in .git/config is 
wrong).

The new deinit command may help, but for the wrong reasons. I don't want to have to deinit my modules every time in the fabric deployment script, just so that if they get into this state, they will get unbroken automatically.

It seems wrong to me that neither "git submodule init" nor "git submodule sync" will modify the URL in .git/config, if the submodule is not already checked out. I think I'd expect "git submodule init" to be idempotent, so it would update the URLs in .git/config if they already exist, just like it adds the URLs if they don't.

Any advice? Is this a real bug?
Cheers, Chris.
-- 
Aptivate | http://www.aptivate.org | Phone: +44 1223 967 838
Future Business, Cam City FC, Milton Rd, Cambridge, CB4 1UY, UK

Aptivate is a not-for-profit company registered in England and Wales
with company number 04980791.
Next: Junio C Hamano
Message 1 of 7 in “Possible bug: Git submodules can get into broken state”
  1. Chris WilsonApr 4, 2013
  2. Junio C HamanoApr 4, 2013
  3. Chris WilsonApr 4, 2013
  4. Junio C HamanoApr 4, 2013
  5. Chris WilsonApr 4, 2013
  6. Junio C HamanoApr 5, 2013
  7. Jens LehmannApr 4, 2013

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.