Git Submodules. Pulling into a new clone of the super-project
GitGit SubmodulesGit Problem Overview
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 = git@github.com: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?
Git Solutions
Solution 1 - Git
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 - Git
Solved by deleting 2 directories and refetching submodule:
- Go to
external_libraries/BEACHhtml
and look into.git
file. It's content should be something likegitdir: ../../.git/modules/external_libraries/BEACHhtml
- Delete both
external_libraries/BEACHhtml
and.git/modules/external_libraries/BEACHhtml
directories.
From now on git submodule update
runs without errors.
Solution 3 - Git
I had this problem (flaky network so I got dropped submodule checkout like this) and I solved it by making this script (named it git-submodule-fix
so I could run it as git submodule-fix
)
#!/bin/bash
for arg
do
echo $arg
find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done
If you get this i.e. from a git submodule update
fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'
do
git submodule-fix some/submodule/path
git submodule update
Solution 4 - Git
If you are reading in 2019 or later, just update the git client. Worked for me.
Solution 5 - Git
use a diff tool to compare the original clone that's working and this one. Also, what does git submodule
output. Ensure you are pointing to the same branch in each repo before you do.
I'm suspecting that you've switched to a branch or older revision where the submodule was not defined.
hope this helps
Solution 6 - Git
I had the same issue with a submodule on a project. When I tried to clone the submodule separately it worked well.
I've tried all of the answers above, but without success (git submodule update, ..., removing the submodule folders, ...).
The issue disappeared after update of git (from Git-1.7.11-preview20120710) to latest version (to Git-1.8.1.2-preview20130201) at the time. Strangely my colleagues had even older version, worked without any issues, but they were on Mac. I'm on Win7 64bit.
Solution 7 - Git
I ran into this in 2021 when I got into a detached HEAD state between commits from the sub-module repo's source and it's version in the 'calling' main repo.
this answer helped --> https://stackoverflow.com/questions/10228760/how-do-i-fix-a-git-detached-head
And I verified this strategy with new changes to the sub-module repo
- $ cd
- $ git pull --> the sub-module repo brings in any changes from it's source
- $ cd
- $ git status --> should show new changes to be committed for the sub-module repo