Git 하위 모듈. 슈퍼 프로젝트의 새 복제본 가져 오기


87

확인. 그래서 나는 이것을 핥았다고 생각했지만 ... 이제 ....

GitHub의 작은 라이브러리 하나를 하위 모듈로 포함하는 프로젝트가 있습니다. 해당 수퍼 프로젝트의 원래 버전에서 하위 모듈이 예상대로 작동합니다.

그러나, 나는 방금 슈퍼 프로젝트를 복제했고, 내가해야한다고 생각했던 것을했다 : "git submodule init", 나타나도록 서브 모듈의 디렉토리를 얻었지만 그것은 비어있다.

내가 지금 시도한다면

git submodule update

나는 얻다

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

내가 시도하면

git submodule foreach git pull

나는 얻다

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

내 .git / config에 다음이 있습니다.

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

내 .gitmodules에는 다음이 있습니다.

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

누구든지 무엇이 빠졌는지 알고 있습니까?

답변:


189

현재 (2019 년) 최신 GIT 클라이언트를 설치 하면 아래 의견에 따라 문제를 해결할 수 있는 것으로 보입니다 . 현재로서는 이것이 최상의 솔루션이 될 것입니다.


당신과 같은 문제가 있습니다. 이것은 git의 버그입니다 : http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

요컨대, 문제에 대해 다음을 시도하십시오.

# rm -rf external_libraries/BEACHhtml
# git submodule update

이전 체크 아웃 폴더에 문제가있는 것 같습니다. 제거하고 다시 업데이트하면 문제가 해결됩니다.


1
나를 위해 그것은 교수형 자식 페치가 유지 된 폴더가 잠겨 있었다
미하이 Timar에게

32
나는 서브 모듈 worktree (모두 제거했다 ext/blah)과 아래에 일치하는 폴더를 GIT_DIR( .git/modules/ext/blah).
Tobu

2
내 특별한 경우에는 git submodule update누군가가 RSA 키를 수락하기를 원했기 때문에 CI 서버에서 계속 실패했습니다 (ci 서버는 일반적으로 https 연결을 사용하고 서브 모듈이 ssh 연결을 가져온 것은 이번이 처음이었습니다). 누군가가 머리를 긁는 데 한 시간을 절약하기를 바랍니다!
Maverik

8
2016 년
Paulo Neves

6
2017 체크인, 아직 존재합니다.
william.taylor.09

4

이 문제가 발생했습니다 (네트워크가 불안정하여 이와 같이 하위 모듈 체크 아웃을 삭제 git-submodule-fix했습니다 git submodule-fix).

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

이 즉, a에서 얻는 경우 git submodule update

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

하다

git submodule-fix some/submodule/path
git submodule update

3

2 개의 디렉토리를 삭제하고 하위 모듈을 다시 가져 와서 해결되었습니다.

  1. 파일 external_libraries/BEACHhtml로 이동하여 살펴보십시오 .git. 내용은 다음과 같아야합니다.gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. external_libraries/BEACHhtml.git/modules/external_libraries/BEACHhtml디렉토리를 모두 삭제하십시오 .

이제부터는 git submodule update오류없이 실행됩니다.


서브 모듈이 다시 초기화 되도록 git submodule init이전 에 실행해야 할 수도 git submodule update있습니다. 그러면 작동합니다.
Pellet

1

2019 년 이후에 읽는다면 git 클라이언트를 업데이트하십시오. 나를 위해 일했습니다.


0

diff 도구를 사용하여 작동중인 원본 복제본과이 복제본을 비교합니다. 또한 무엇을 git submodule출력합니다. 수행하기 전에 각 저장소에서 동일한 분기를 가리키고 있는지 확인하십시오.

하위 모듈이 정의되지 않은 분기 또는 이전 버전으로 전환 한 것 같습니다.

도움이 되었기를 바랍니다


0

프로젝트의 하위 모듈과 동일한 문제가 발생했습니다. 하위 모듈을 별도로 복제하려고 시도했을 때 잘 작동했습니다.

위의 모든 답변을 시도했지만 성공하지 못했습니다 (git submodule update, ..., remove the submodule folders, ...).

이 문제는 git (Git-1.7.11-preview20120710에서)을 최신 버전 (Git-1.8.1.2-preview20130201으로)으로 업데이트 한 후 사라졌습니다. 이상하게도 제 동료들은 이전 버전도 가지고 있었고 문제없이 작업했지만 Mac에있었습니다. 저는 Win7 64 비트를 사용하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.