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

Integrating submodules with no side effects

From
RDRobert Dailey <rcdailey.lists@gmail.com>
Date
Oct 18, 2016, 19:35 UTC
Message-ID
<CAHd499AN2VHL66c6JWxHqS-1bQ6y4PrGjZJiR_ad6HJsCGpeDQ@mail.gmail.com>
Hello git experts,

I have in the past attempted to integrate submodules into my primary repository using the same directory name. However, this has always caused headache when going to and from branches that take you between when this integration occurred and when it didn't. It's a bit hard to explain. Basically, if I have a submodule "foo", and I delete that submodule and physically add its files under the same directory "foo", when I do a pull to get this change from another clone, it fails saying:

error: The following untracked working tree files would be overwritten
by checkout:
        foo/somefile.txt
Please move or remove them before you switch branches.
Aborting
could not detach HEAD

Obviously, git can't delete the submodule because the files have also been added directly. I don't think it is built to handle this scenario. Here is the series of commands I ran to "integrate" the submodule (replace the submodule with a directory containing the exact contents of the submodule itself):

#!/usr/bin/env bash mv "$1" "${1}_" git submodule deinit "$1" git rm "$1" mv "${1}_" "$1" git add "$1/**"

The above script is named git-integrate-submodule, I run it like so:
$ git integrate-submodule foo
Then I do:
$ git commit -m 'Integrated foo submodule'

Is there any way to make this work nicely? The only solution I've found is to obviously rename the directory before adding the physical files, for example name it foo1. Because they're different, they never "clash".

Next: Stefan Beller
Message 1 of 8 in “Integrating submodules with no side effects”
  1. Robert DaileyOct 18, 2016
  2. Stefan BellerOct 18, 2016
  3. Robert DaileyOct 19, 2016
  4. Stefan BellerOct 19, 2016
  5. Robert DaileyOct 19, 2016
  6. Stefan BellerOct 19, 2016
  7. Robert DaileyOct 19, 2016
  8. Robert DaileyOct 25, 2016

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.