git 하위 모듈을 다른 저장소로 어떻게 바꾸나요? repo에 그 포인트git@github.com:userA/TestFramework.git 이제를

git 서브 모듈을 다른 git repo로 어떻게 바꾸나요?

특히, 하위 모듈이 있습니다.

  • 에있는 ./ExternalFrameworks/TestFramework자식의 repo에 그 포인트git@github.com:userA/TestFramework.git
  • 이제를 가리키고 싶습니다 git@github.com:userB/TestFramework.git.

문제는 여기 에 설명 된 방법으로 하위 모듈을 삭제 한 다음 명령을 사용하여 다시 추가한다는 것입니다.

git submodule add git@github.com:userB/TestFramework.git

이 오류가 발생합니다.

A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
  origin    git@github.com:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
  git@github.com:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.


답변

하위 모듈의 위치 (URL)가 변경된 경우 간단히 다음을 수행 할 수 있습니다.

  1. .gitmodule새 URL을 사용하도록 파일 수정
  2. 저장소에서 하위 모듈 폴더 삭제 rm -rf .git/modules/<submodule>
  3. 작업 디렉토리에서 하위 모듈 폴더 삭제 rm -rf <submodule>
  4. 운영 git submodule sync
  5. 운영 git submodule update

더 자세한 정보는 다른 곳에서 찾을 수 있습니다.


답변

먼저, 편의를 위해 여기에 이미 언급 한 방법으로 현재 하위 모듈을 삭제 합니다.

  • .gitmodules파일 에서 관련 섹션 삭제
  • 에서 관련 섹션 삭제 .git/config
  • 실행 git rm --cached path_to_submodule(후행 슬래시 없음)
  • 이제 추적되지 않은 하위 모듈 파일 커밋 및 삭제

이제 --name플래그가 있는 새 하위 모듈을 추가합니다 . 이렇게하면 git .git/config에 하위 모듈 에 대해 참조 할 대체 이름이 제공 되어 이전 기록에서 여전히 작업하고 싶은 하위 모듈과의 충돌을 해제 할 수 있습니다.

따라서 다음을 입력하십시오.

git submodule add --name UpdatedTestFramework git@github.com:userB/TestFramework.git

예상 한 경로에 하위 모듈이로드됩니다.


답변

이 명령은 로컬 저장소의 파일을 변경하지 않고 명령 프롬프트에서 작업을 수행합니다.

git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Dev
git submodule sync
git submodule update --init --recursive --remote

답변

나를 위해 이것을 고친 것은 하위 모듈이 아닌 git repo의 루트에 있었으며

rm -rf .git/modules/yourmodule

그러면 정상적으로 추가 할 수 있습니다.


답변

내가 찾은 가장 쉬운 방법은 다음과 같습니다.

git rm -rf [submodule_dir]
git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]

.gitmodules수동으로 수정하는 아이디어가 마음에 들지 않았습니다 . 나는 또한 그것에 대해 약간의 블로그 포스트 를 썼다 .


답변

이 복제본에 대해서만 원격 URL을 변경하려면 다음 을 수행하십시오 .

git config submodule."$submodule_name".url "$new_url"

이것은 .gitmodules상위 프로젝트 의 파일에 영향을주지 않으므로 다른 개발자에게 전파되지 않습니다.

여기서는 “사용자 별 레코드 변경 사항”으로 설명 됩니다 .

git submodule sync다시 기본 URL로 재설정되므로실행 하지 마십시오 .