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

Re: Why does adding an existing repo as a submodule modify .git/config?

From
Christopher Wilson <cwilson@cdwilson.us>
Date
May 25, 2011, 03:11 UTC
Message-ID
<BANLkTingA2oRY4i6OnYSz8PGdTRDqXVdFw@mail.gmail.com>
In-Reply-To
<4DDC562C.2000204@gmail.com>
On Tue, May 24, 2011 at 6:06 PM, Mark Levedahl <mlevedahl@gmail.com> wrote:
> However, while you could then change submodule-add to not register the
> submodule, you would now have the condition of having a submodule that is
> checked out in the current tree but *not* registered in .git/config.

Isn't this exactly what "git submodule add" currently does for submodules that are NOT added in place?

For example:
$ mkdir testing
$ cd testing
$ git init
...
$ ls
# nothing in the working tree
$ git submodule add git@git.server:submodule.git
Cloning into submodule...
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 13 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (13/13), done.
Resolving deltas: 100% (2/2), done.
$ ls
submodule
$ cat .git/config
[core]
   repositoryformatversion = 0
   filemode = true
   bare = false
   logallrefupdates = true
   ignorecase = true
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   .gitmodules
#	new file:   submodule
#

As you can see, if I create a new repo and check out a remote submodule, that submodule IS actually checked out in my current tree and no entry is created in .git/config. Although the remote submodule has been added to .gitmodules, it takes "git submodule init" to actually register it into .git/config:

$ git submodule init
Submodule 'submodule' (git@git.server:submodule.git) registered for
path 'submodule'
$ cat .git/config
[core]
   repositoryformatversion = 0
   filemode = true
   bare = false
   logallrefupdates = true
   ignorecase = true
[submodule "submodule"]
   url = git@git.server:submodule.git
Show 5 quoted lines
> This is the key: .git/config is modified to include all submodules that are checked
> out in your current tree. If you add a remote submodule, that submodule is
> not checked out in your current tree so no entry is created in .git/config,
> while adding one that is already checked out in place does modify
> .git/config. I see no inconsistency here.

The inconsistency is that when adding a submodule in place, the registration into .git/config takes place, but when adding a remote submodule that is not in the working tree, the registration does not happen. In the second case, don't you end up with exactly what you said we're trying to avoid, which is "the condition of having a submodule that is checked out in the current tree but *not* registered in .git/config"?

Chris
Previous: Mark LevedahlNext: Jens Lehmann
Message 6 of 7 in “Why does adding an existing repo as a submodule modify .git/config?”
  1. Christopher WilsonMay 22, 2011
  2. Jens LehmannMay 23, 2011
  3. Mark LevedahlMay 24, 2011
  4. Christopher WilsonMay 24, 2011
  5. Mark LevedahlMay 25, 2011
  6. Christopher WilsonMay 25, 2011
  7. Jens LehmannMay 26, 2011

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.