问题
I have a repo with several submodules. I want to add some others, and the fastest way for me is to use the .gitmodules
(which in my opinion should clearly allow any kind of submodule management).
However, when editing this file and adding submodules, after a git submodule init
nothing is added (except the submodules that were already present before the modification).
Is there any solution to add a submodule without going through git submodule add
(ie, just by editing the .gitmodules
file and then git submodule update --init
) ?
That is, the following workflow should automatically add the submodule "foo/bar":
Add the following to .gitmodules:
[submodule "foo/bar"]
path = foo/bar
url = https://example.com/foo.git
Run the following command after saving:
git submodule init
git submodule update
Expected result:
submodule 'foo/bar' automatically gets added
it is also updated (the update command)
回答1:
When you add a Git submodule, Git creates .submodule
file and for a submodule named git-submodule
will add something like this:
[submodule "git-submodule"]
path = git-submodule
url = https://github.com/TomasHubelbauer/git-submodule
The same is added to .git/config
after the existing content in that file.
A folder for the submodule named after the submodule is created in .git/modules
.
This folder is nearly identical to the the .git
directory of the actual submodule repository, but it doesn't contain the actual objects
(instead the submodule data is checked out to its directory and its metadata are here).
This means that theoretically, you might be able to add a submodule by hand without using git submodule add
, but you would have to recreate all these config files.
But one can still imagine cloning the submodule repository to a separate directory and copying its .git
over to this one. That might work.
However, adding a submodule also changes the index, .git/index
, so you would have to manually update this hash as well, and at this point, you're reimplementing Git, but manually.
As a result, I don't believe it is anywhere near practical to add a Git submodule by hand.
回答2:
Yep, as you described once you add submodule its being added to your .gitsubmodule
file.
But unless you know exactly what you do its much better to use the CLI command since there might be something that you not familiar with like:
Once you done editing your submodule file you will need to run:
git submodule init
git submodule update
Adding it manually will not work.
Run the add submodule and watch the .git
folder changes. You will see a new folder named module
with your submodule name.
This is why you should not do it manually.
来源:https://stackoverflow.com/questions/24777973/adding-git-submodules-automatically-gitmodules