Git Submodules. Pulling into a new clone of the super-project

OK. So I thought I had this licked ... but now ....

I have a project which includes one small library from GitHub as a submodule. In the original version of that super-project the submodule is working as expected.

However, I just cloned the superproject, did what I thought I should : "git submodule init", got the directory of the submodule to appear, but it's empty.

If I now try to do

git submodule update

I get

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

If I try

git submodule foreach git pull

I get

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

In my .git/config, I have this :

[submodule "external_libraries/BEACHhtml"]
    url = [email protected]:interstar/BEACHhtml.git

In my .gitmodules I have this :

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = [email protected]:interstar/BEACHhtml.git

Anyone got an idea what's missing?


Solution 1:

It seems that now (in 2019) installing latest GIT client could solve the problem according to comments below. This should be the best solution for now.


I have the same problem as you. This is a bug in git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

In short, for your problem, try:

# rm -rf external_libraries/BEACHhtml
# git submodule update

It seems there is something wrong with the previous checkout folder, remove it, and update again solves the problem.

Solution 2:

Solved by deleting 2 directories and refetching submodule:

  1. Go to external_libraries/BEACHhtml and look into .git file. It's content should be something like gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Delete both external_libraries/BEACHhtml and .git/modules/external_libraries/BEACHhtml directories.

From now on git submodule update runs without errors.