Git Submodules. Pulling into a new clone of the super

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 = git@github.com:interstar/BEACHhtml.git

Anyone got an idea what's missing?


I have the same problem as you. This is a bug in git: http://lists-archives.com/git/785138-git-submodule-update-is-not-fail-safe.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.


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 ie 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

Solved by deleting 2 directories and refetching submodule:

  • Go to external_libraries/BEACHhtml and look into .git file. It's content should be something like gitdir: ../../.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.

    链接地址: http://www.djcxy.com/p/16430.html

    上一篇: 对git子模块进行更改,并保留更改

    下一篇: Git子模块。 拉入超级的新克隆