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)가 변경된 경우 간단히 다음을 수행 할 수 있습니다.
.gitmodule
새 URL을 사용하도록 파일 수정- 저장소에서 하위 모듈 폴더 삭제
rm -rf .git/modules/<submodule>
- 작업 디렉토리에서 하위 모듈 폴더 삭제
rm -rf <submodule>
- 운영
git submodule sync
- 운영
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
수동으로 수정하는 아이디어가 마음에 들지 않았습니다 . 나는 또한 그것에 대해 약간의 블로그 포스트 를 썼다 .