.gitmodule에서 하위 모듈이 아닌 경로에 대한 하위 모듈 매핑이 없습니다.


335

서브 모듈이있는 프로젝트가 있습니다. lib/three20

.gitmodule파일은 다음과 같습니다

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

나는 (오류없이 과거에이를 복제 한 git submodule init다음 git submodule update) 그리고 잠시 동안 일하고 있어요.

이것을 새로운 컴퓨터에 복제하려고 시도했지만 이제이 오류가 발생합니다 git submodule init.

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

그 경로는 다른 디렉토리에서 프로젝트를 저장하는 데 사용하는 Xcode의 빈 폴더입니다. 파일의 일부 .gitmodules가 아니므 로이 경로를 어디에서 가져 오는지 알 수 없습니다.

어떤 아이디어?


1
그 경로를 gitlink로 추가 할 수있는 것처럼 들립니다. 하위 모듈은 gitlink와 .gitmoddules 및 .git / config 파일의 항목의 조합입니다. 이에 대한 최근의 질문이있었습니다. 그것을 찾으려고 노력하고 있습니다
Cascabel


@Jefromi- .git폴더의 어느 곳에서나 해당 경로에 대한 언급을 찾을 수 없습니다 . 이렇게하면 grep -r "Classes/Support/Three20" *.*중 어떤 결과를 얻을하지 않습니다
벤 Scheirman

2
@Ben : 왜 .git 폴더에서 해당 텍스트 를 검색하고 있습니까? git이 콘텐츠를 저장하는 방식은 아닙니다. git이 생각하는 것을 실제로 확인하려면을 시도 git ls-tree HEAD Classes/Support하고 Three20이 커밋이라고 표시되면 거기에 gitlink가 있습니다. 있는 경우 위에 링크 된 VonC 질문의 해당 지침에 따라 적절한 하위 모듈로 전환하거나 정기적으로 추적되는 콘텐츠로 전환하십시오.
Cascabel

2
미래 방문자, 경우에 문제가 제거 된 서브 모듈에 연결되며, Heroku가 오류를 던지고에서-REPO Heroku가 설치 github.com/heroku/heroku-repo 와 Heroku가이 REPO : 리셋 -a의 APPNAME
fadomire

답변:


310

다음 rajibchowdhury대답 (upvoted)를 사용git rm 좋습니다 명령은 제거하기위한 특별 항목 서브 모듈을 나타내는 지수 (특수 모드와 폴더 'A'를 160000).

해당 특수 항목 경로.gitmodule( Classes/Support/Three20원래 질문의 ' ' 와 같이) 참조되지 않으면 " 경로 에 하위 모듈 매핑이 없습니다.gitmodules "오류 메시지가 표시 되지 않도록 해당 경로 를 제거해야 합니다.

서브 모듈을 참조하는 색인의 모든 항목을 확인할 수 있습니다.

git ls-files --stage | grep 160000

이전 답변 (2010 년 11 월)

(에 설명 된대로, 마지막에 '/', 즉 어떤 꼬리없이 제대로 초기 서브 모듈을 선언하지 않은 가능성이 예전 대답 당신은 비록 .gitmodule그것에서 확인 보이는 경로가).

이 스레드 는 다음을 언급합니다.

새로운 클론에서 'git submodule init'을 실행할 때 동일한 오류가 발생합니까?
그렇다면 잘못된 것이 있습니다.

하위 모듈이 없으면 .gitmodules.git / config의 하위 모듈에 대한 참조 및 삭제 를 수행하고 Pikimal 디렉토리에 디렉토리가 없는지 확인하십시오 .git.
그래도 문제가 해결되면 크루즈 작업 복사본에서 체크인하고 동일한 작업을 수행하십시오.

기본 .gitmodules파일을 삭제하지 말고 .gitmodules작업 트리에서 다른 추가 파일을 살펴보십시오 .


여전히 "부정확 한 서브 모듈 초기화"주제에서 Jefromi 는 실제로 gitlink 인 서브 모듈을 언급합니다.

추적되지 않은 콘텐츠를 추적하는 방법을 참조하십시오 . 그러한 디렉토리를 실제 서브 모듈로 변환하기 위해.


5
.gitmodules 파일이 없으며 모든 체크 아웃 / 풀 마다이 메시지가 계속 표시됩니다. 어떻게해야합니까?
aaronbauman

2
내 대답을 여기에서 찾았습니다 : stackoverflow.com/questions/14720034/…
aaronbauman

4
@aaronbauman 예, gitlink를 제거해야합니다. 따라서 git rm xxx(후행 슬래시없이) git rm --cached인덱스에서 디스크를 제거하면서 디스크에 유지할 수 있습니다.
VonC

git ls-files --stage | grep 16000, 일부 항목을 찾았습니다. 이것들을 어떻게 제거합니까?
John Mike

1
@JohnMike .gitmodule해당 항목을 참조하는 경우 stackoverflow.com/a/16162000/6309 . 그렇지 않은 경우 단순 git rm afolder(후행 / 슬래시 없음)
VonC

412

경로 'OtherLibrary / MKStore'에 대한 .gitmodules에서 하위 모듈 매핑을 찾을 수 없습니다.

$ git submodule update --init

왜 오류가 발생했는지 몰랐습니다. 1 분을 보낸 후 stackoverflow에서 답을 찾았습니다.

$ git rm --cached OtherLibrary/MKStore

그런 다음 서브 모듈을 다시 업데이트하십시오. 잘 작동합니다.

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules


2
git : // 링크로 https : // 링크를 변경하기 위해 .gitmodules 파일을 편집 한 후 나를 위해 일했습니다.
Diwann

1
이것은 나에게도 효과가 있었지만 서브 모듈 경로 끝에 슬래시가 없는지 확인해야했습니다.
피터

나는 init 옵션을 잊었다는 것을 믿을 수 없다. 프로젝트를 복제하는 경우 업데이트하기 전에 하위 모듈을 시작해야합니다.
alex

repo의 루트 디렉토리에서 이것을 실행해야 모든 것이 잘 작동했습니다. 감사!
Pwdr

rm 명령 을 주셔서 대단히 감사합니다 . 나는 전화 git submodule sync | grep "mapping found"git rm다시 git submodule sync. 문제가 사라졌습니다!.
nine9five

24

SourceTree를 사용하여 작업을 수행하면이 메시지가 나옵니다.
내가 만난 메시지 :

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject'
Completed with errors, see above

내 시나리오는 프로젝트 디렉토리에 .git 폴더 가 잘못 적용된 것 입니다.
SourceTree는이 폴더를 git 서브 모듈로 간주했지만 실제로는 그렇지 않습니다.

내 해결책은 명령 줄을 사용하여 제거하는 것입니다.

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"

git에서 쓰레기를 제거하고 깨끗하게 유지하십시오.


17

나는이 문제를 해결했다. 처음에 나는 이것을 시도했다.

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

마스터 브랜치를 복제하려면 --branch 옵션의 스펙을 사용하지 않아야합니다 . 이 오류가 발생합니다.

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

당신이 시도 할 때마다

git submodule sync

이 오류가 발생합니다.

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

그리고 .gitmodules에 필요한 줄은 추가되지 않습니다.

그래서 나를위한 해결책은 다음과 같습니다.

git submodule add [URL] [PATH_TO_SUBMODULE]

9

내 repo의 새로운 체크 아웃시 "git submodule init"을 시도한 후에이 오류가 발생했습니다. 처음에 잘못된 경우로 모듈 하위 폴더를 지정했습니다. 대소 문자를 구분하는 파일 시스템 (hurr)이있는 Mac을 사용하고 있기 때문에 실패했습니다. 예를 들면 다음과 같습니다.

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

성공하지만 문제는 디스크에서 경로가

Myapp/Resources/Project

내가 이해하지 못하는 것은 git이 모듈을 잘못된 폴더에 초기화하고 (내 명령에서 잘못된 경우를 무시한 후) 후속 명령으로 올바르게 작동하지 않는 이유입니다.


왜 그런지는 모르겠지만 여기 (Windows)에서도 마찬가지입니다. 체크 아웃을 위해 다른 케이싱을 가진 폴더를 자유롭게 지정할 수 있으며 모듈 이름을 변경해서는 안됩니다.
Xavier Poinas

6

그냥 git rm subdir 확인 될 것입니다. 하위 디렉토리를 인덱스로 제거합니다.


5

이 문제가 발생했습니다. 잠시 동안 경로 제거, git 경로 제거, .gitmodules 제거, .git / config에서 항목 제거, 하위 모듈 다시 추가, 변경 커밋 및 푸시에 대한 조언을 시도했습니다. "git commit -a"를 수행했을 때 아무런 변화가 없었기 때문에 수수께끼였습니다. 그래서 나는 제거를 밀고 나서 readdition을 밀어서 변화처럼 보이도록 시도했습니다.

잠시 후 모든 것을 제거한 후 "git submodule update --init"를 실행하면 git이 더 이상 참조하지 않아야하는 특정 이름에 대한 메시지가 표시됩니다. 경로 이름이 아닌 연결되었습니다. Grepping은이 참조가 .git / index에 있음을 공개했습니다. 그래서 "git rm --cached repo-name"을 실행 한 다음 모듈을 읽었습니다. 이번에 커밋했을 때 커밋 메시지에 예기치 않은 개체가 삭제되었다는 변경 내용이 포함되었습니다. 그 후에는 잘 작동합니다.

무슨 일이 있었는지 모르겠지만 누군가 누군가 git submodule 명령을 잘못 사용하여 인수를 되돌릴 수 있습니다. 나도 될 수 있었을 것입니다 ... 이것이 누군가를 돕기를 바랍니다!


5

.gitmodules 파일에서 문자열을 바꿨습니다 .

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

그리고 해결되었습니다! --


고마워 내 문제를 해결했다. 아마도 창문에서 발생하는 문제 일 것입니다. 제 경우에는 경로는 "path = something \\ folder"였습니다
Roozbeh G

이것은 Windows에서 git 대신 git-lfs를 사용할 때 오류가 발생했을 때 효과적이었습니다. (표준 git을 사용할 때 오류가 발생하지 않았습니다)
frage

5

폴더 매핑은 폴더에서 찾을 수 있으므로 .git/modules(각 폴더는 config파일을 참조하는 파일이 있음 worktree) 이러한 폴더가 .gitmodules및 의 구성에 해당하는지 확인하십시오 .git/config.

그래서 .gitmodules올바른 경로가 있습니다 :

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

과에 .git/modules/<path>/config[core]섹션 당신은 당신에 대한 권리 경로를했습니다 <path>, 예를 들어,

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

올바른 폴더 .git/modules가 없으면 하위 모듈 디렉토리로 이동하여 git reset HEAD --hard또는을 시도해야합니다 git checkout master -f. 이것이 도움이되지 않는다면, 깨진 서브 모듈에 대한 모든 참조를 제거하고 다시 추가하는 것이 좋습니다 : git submodule 이름 바꾸기 를 참조하십시오 .


3

시나리오 : 서브 디렉토리를 디렉토리 dirA-xxx에서 다른 디렉토리 dirB-xxx로 변경

  1. dirA-xxx를 dirB-xxx로 이동
  2. dirB-xxx를 사용하도록 .gitmodules의 항목 수정
  3. dirB-xxx를 사용하도록 .git / config의 항목 수정
  4. 올바른 디렉토리를 반영하도록 .git / modules / dirA-xxx / config를 수정하십시오.
  5. 올바른 디렉토리를 반영하도록 dirA-xxx / .git을 수정하십시오.
  6. 운영 git submodule status

    반환 오류 인 경우 : dirA-xxx 경로에 대한 .gitmodules에 하위 모듈 매핑이 없습니다. 이것은 dirA-xxx가 존재하지 않기 때문에 발생하지만 여전히 git에 의해 추적됩니다. git 인덱스를 다음과 같이 업데이트하십시오 :git rm --cached dirA-xxx

    로 시도하십시오 git submodule foreach git pull. git 서브 모듈 구조에 대한 실제 연구를 거치지 않았으므로 위의 단계로 인해 문제가 발생할 수 있습니다. 그럼에도 불구하고 위의 단계를 거치면 상황이 좋아 보입니다. 작업을 수행하는 데 필요한 통찰력이나 적절한 단계가 있으면 여기에서 공유하십시오. :)


1

일반적으로 git은 프로젝트의 루트 디렉토리 (.git /)에 숨겨진 디렉토리를 만듭니다.

CMS에서 작업 할 때 특정 모듈 / 플러그인에 대한 git의 메타 데이터가있는 .git / 디렉토리를 포함하는 모듈 / 플러그인을 설치할 수 있습니다.

가장 빠른 해결책은 모든 .git 디렉토리를 찾고 루트 git 메타 데이터 디렉토리 만 유지하는 것입니다. 그렇게하면 git은 해당 모듈을 프로젝트 서브 모듈로 간주하지 않습니다.


1

내을 살펴본 후 .gitmodules대문자를 사용하지 않아야합니다. 따라서 .gitmodules디렉토리는 대소 문자를 구분합니다


1
당신은 .gitmodules대신 의미하지 않았 습니까?
Serhii Kheilyk

0

내 경우에는 오류가 다른 하위 모듈 구성을 가진 두 가지의 .gitmodules가 잘못 병합되어 발생했을 수 있습니다. 이 포럼에서 제안을받은 후 .gitmodules 파일을 수동으로 편집하는 문제를 해결했습니다. 누락 된 하위 모듈 항목을 추가하는 것은 매우 쉽습니다. 그 후 git submodule update --init --recursive 명령은 아무런 문제없이 작동했습니다.


0

우리에게 문제는 중복 서브 모듈 항목이 .gitmodules (아마 병합에서)에 추가되었다는 것입니다. 우리는 git이 .gitmodules에서 불평하는 경로를 검색하고 두 개의 동일한 섹션을 발견했습니다. 섹션 중 하나를 삭제하면 문제가 해결되었습니다.

가치있는 것은 git 1.7.1에서 "no submodule mapping"오류가 발생했지만 git 2.13.0은 신경 쓰지 않는 것 같습니다.

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