Integrating submodules with no side effects
- From
- Robert 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 HEADObviously, 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".