힘내 하위 모듈 추가 : "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 rm와 rm -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.