힘내 하위 모듈 추가 : "git 디렉토리가 로컬에서 발견되었습니다"문제


193

실제로 git submodule하위 명령을 포함하여 git 사용 방법을 배우려고합니다 . SSH를 사용하여 git 저장소를 호스팅, 푸시 및 풀 할 수있는 서버를 이미 설정했습니다. 이 서버에서 모든 프로젝트를 하위 모듈로 저장하려는 기본 git 저장소 "Travail"을 만들었습니다.

내 Travail 저장소에서 이미 하위 프로젝트로 내 프로젝트를 추가했습니다 tools/libft.이 하위 모듈을 개발하여 푸시 및 풀 수 있습니다.

그러나 다른 하위 모듈 (서버의 fdf.git에서 fdf라는 이름)을 추가하려고하면 다음과 같은 문제가 발생합니다.

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

'projets / fdf'의 git 디렉토리는 remote (s)를 사용하여 로컬에서 찾을 수 있습니다. origin ssh : //git@XXX.XXX.XXX.XXX : XXXXX / opt / git / fdf.git이 로컬 git을 재사용하려면 ssh : //XXX.XXX.XXX.XXX : XXXXX / opt / git / fdf.git에서 다시 복제하는 대신 '--force'옵션을 사용하십시오. 로컬 git 디렉토리가 올바른 저장소가 아니거나 이것이 '--name'옵션으로 다른 이름을 선택한다는 의미가 확실하지 않은 경우.

실제로 하위 디렉토리가 없습니다 projets/

git submodule sync하위 모듈의 원본 리포지토리에 대한 URL이 변경되었을 수있는 .gitmodules 파일을 사용 하거나 편집 해야하는 다른 스레드를 읽었 습니다.

그러나 내 .gitmodules 파일에는 projets / fdf가 아닌 내 첫 번째 하위 모듈 (tools / libft)에 대한 정보 만 포함되어 있습니다.

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git

프랑스 학생으로서 나는 가지고있는 영어 문서에서 무언가를 놓칠 수 있었지만 검색했는데 왜이 문제가 발생하는지 이해할 수 없습니다.

해결책을 얻을 수 있다면 기쁠 것입니다.하지만 설명 만 있으면 도움이 될 것입니다.


작은 수정 : '저장소'가 아니라 '저장소'입니다. 실제로 대답은 아니지만 프로젝트가 서로 독립적이라면 각 프로젝트가 하위 모듈 대신 자체 저장소를 갖는 것이 좋습니다.
jcm

고마워요 나는 알고 있지만 모든 리포지토리에서 동일한 프로젝트로 별도의 프로젝트로 수집하고 싶습니다. (그리고 이러한 도구를 사용하는 방법에 대한 자세한 내용은, 내가 궁금) 내가 반대 내 학교와 그 집에서 갈 때 내 모든 작품은 업데이트 유지하기 위해 선택)
vmonteco

호기심은 항상 좋은 이유입니다! :) 이상하다. 서브 모듈을 추가하지 않았습니까?
jcm

Travail /에는없고 ~ /에 fdf.git를 복제 할 가능성이 없습니다. Travail /에서 fdf의 흔적을 찾지 못했습니다. 그냥 libft : /
vmonteco

5
아 잠깐만, 나는 디렉토리를 /Travail/.git/modules/projets/찾았다 fdf. 이것은 작업 트리가 아닌 이전 커밋에있는 것 같습니다. 문제가 발생할 수 있습니까?
vmonteco

답변:


443

최근에 삭제 한 서브 모듈과 동일한 경로로 서브 모듈을 추가하려고하는이 SO 게시물에 왔습니다.

이것이 궁극적으로 나를 위해 일한 것입니다 ( 이 기사는 많은 도움이되었습니다 ).

아직 실행 git rm --cached path_to_submodule하지 않았 rm -rf path_to_submodule거나 (후행 슬래시 없음) 그렇게하면됩니다!

그때:

  1. .gitmodules파일 에서 관련 줄을 삭제 하십시오. 예를 들어 다음을 삭제하십시오.

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. .git / config에서 관련 섹션을 삭제하십시오. 예를 들어 다음을 삭제하십시오.

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

그런 다음 마침내 다음을 수행 할 수 있습니다.

git submodule add https://github.com/path_to_submodule


47
효과가있는 다른 것을 찾을 수 없으므로 이것은 정말 도움이되었습니다. 다른 제안과의 주요 차이점은 3 단계입니다. 감사!
AndroidDev

8
2 단계와 3 단계가 필요했습니다.
U007D

8
3 단계가 필요했지만 왜 서브 모듈도 존재합니까?
Crt

1
나를 위해 1 단계와 2 단계 (이미 올바른 설정이 있음)를 건너 뛰고 3 단계는 나를 위해 수정했습니다. (나는 이미 초기 단계 git rmrm -rf단계를 수행했습니다.)
Rock Lee

2
3 단계조차도 나를 위해 작동하지 않았습니다. 하나의 하위 모듈 만 있었으므로 전체를 삭제하고 .git/modules결국 작동했습니다.
ach

47

나는 jbmilgrom의 솔루션을 시도했다. 특히 나는 시도 git rm --cache했다. 디렉토리 / 서브 모듈이 없었기 때문에 나에게는 효과가 없었다. 나를 위해 일한 것은 다음과 같습니다.

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

나는 명령과 다른 모든 디렉토리 --force내에서 시도한 후에 이것을 마스터 등으로 푸시했습니다 ... 디렉토리가 존재하지 않았으며 캐시에 대한 이유가 없었습니다. 이 오류가 있었던 곳 에서 밝혀 졌습니다 .git submodulerm.git/modules


15

'projets/fdf'디스크에서 디스크를 삭제했을 수 있지만 Git 리포지토리에는 여전히 디스크가 있습니다. git rm -rf projets/fdf힘내에서 그것을 제거하고 변경 사항을 커밋하는 데 사용하십시오 . 그런 다음이 폴더를 하위 모듈로 추가 할 수 있습니다.


그것은 효과가 있었다 :) 감사합니다. 나는 실제로이 실수를했다고 생각합니다.
vmonteco

21
내가 할 때 디렉토리가 존재하지 않는다고 들었습니다. 둘 다 존재하고 존재하지 않는 것 같습니다 : /
Nathan Hornby

41
@ tom-mcfarlin 결국, Imanually는 .gitmodule에서 줄을 제거하고 .git / modules에서 폴더를 제거한 다음 새 하위 모듈을 추가 할 수있었습니다. 어쩌면 더 좋은 방법이 있지만 시간이 부족했습니다. 이런 식으로 가려면, 백업을 잘하도록 권장하고 잘못되었다고 탓하지 마십시오. 행운을 빕니다.
sparklos

5
고맙습니다. 다른 게시물에서 .git / modules에서 폴더를 제거하고 저에게 효과적이라는 것을 알았습니다. 그것이 오류라고 말한 것이 이해가되는 것 같습니다. 나는 그 폴더를 알지 못했습니다.
Tom McFarlin 15.10의

10
@NathanHornby @Sparklos @TomMcFarlin-최신 버전의 git에서는 git-submodule이 .git 폴더에 디렉토리를 추가한다는 것을 알 수 있습니다. 예를 들어, 디렉토리에 /tmp/repo있고를 실행 git submodule add ../otherrepo.git하면 /tmp/repo/.git/modules/otherrepo폴더가 존재 함 을 알 수 있습니다. 그것이 문제였습니다. .git에서 해당 폴더를 수동으로 삭제했으며 모든 것이 작동했습니다.
Alexander Bird

13

하위 모듈 디렉토리를 이미 삭제 한 경우 나머지 jbmilgrom의 지시 사항을 따르십시오. 핵심은 rm -rf .git/modules/path_to_submodule그러나 먼저 전체 부모 repo 디렉토리를 백업하십시오 .

하나의 하위 모듈 만 있다면 삭제하십시오. .gitmodules


2

이 두 명령은 저에게 효과적입니다.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

이. 하위 모듈을 만드는 방법에는 두 가지가 있습니다. 그중 하나에서 하위 폴더에는으로 시작하는 슈퍼 프로젝트의 디렉토리를 가리키는 단일 .git 파일 만 있습니다 .git/modules/. 하위 모듈의 저장소를 저장하는 폴더가 있습니다. 해당 저장소를 삭제하면 문제가 해결되었지만 허용 된 답변은 그렇지 않았습니다.
William Randokun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.