자식 서브 모듈 이름 바꾸기 ( 삭제 하고 새로운 대상 이름으로

자식 서브 모듈 디렉토리의 이름을 바꾸는 쉬운 방법이 있습니까? ( 삭제 하고 새로운 대상 이름으로 다시 추가 하는 전체 동작을 수행 하는 것 제외).

그리고 우리가있는 동안 부모 디렉토리에서 단순히 다음을 수행 할 수없는 이유는 무엇입니까? git mv old-submodule-name new-submodule-name



답변

다음 워크 플로가 작동하는 것을 발견했습니다.

  • .gitmodule 업데이트
  • mv oldpath newpath
  • git rm oldpath
  • git add newpath
  • git submodule sync

참고 :이 방법은 2018 버전의 GIT에서 인덱스 및 .gitmodule을 올바르게 업데이트하지 않습니다.

참고 : VonC답변git mv oldpath newpath 에서 지적했듯이 지금 바로 할 수 있습니다 . (최신 버전의 git을 사용하고 있는지 확인하십시오)


답변

Git1.8.5 (2013 년 10 월)는 프로세스를 단순화해야합니다 . 간단히 :

git mv A B

git mv A B“, 서브 모듈 A을 이동할 때 작업 트리.gitmodules재배치하고 파일 의 경로를 조정하는 방법을 배웠 습니다 .


커밋 0656781fadca1 에서 더 많은 것을보십시오 :

현재 git mv서브 모듈에서 ” “를 사용 하면 서브 프로젝트의 작업 트리가 슈퍼 프로젝트의 작업 트리로 이동합니다. 그러나 서브 모듈의 경로 설정 .gitmodules은 그대로 유지됩니다. 이는 현재 작업 트리와 일치하지 않으며 올바른 path -> name mapping(와 같은 statusdiff) 에 의존하는 git 명령이 이상하게 작동합니다.

“하자 git mv“단지 서브 모듈의 작업 트리를 이동뿐만 아니라 업데이트하지 않음으로써 여기에 도움 ” submodule.<submodule name>.path로부터”설정 .gitmodules파일 및 단계를 모두.
이것은 .gitmodules파일을 찾을 수 없을 때 발생 하지 않으며이 서브 모듈에 대한 섹션이 없을 때만 경고를 발행합니다. 이는 사용자가 .gitmodules파일 없이 일반 gitlink를 사용 하거나 “git mv”명령을 실행하기 전에 이미 경로 설정을 직접 업데이트 했기 때문입니다 (이 경우 경고 mv는 사용자 에게 해당 작업을 수행했음을 경고 합니다). 발견되고 병합 충돌이 포함 된
경우에만 명령이 실패하고 사용자에게 다시 시도하기 전에 충돌을 해결하도록 지시합니다..gitmodulesmv


자식 git mv모듈 git 2.9 (2016 년 6 월)가 개선 됩니다 :

Stefan Beller ( )의 commit a127331 (2016 년 4 월 19 일)을 참조하십시오 . ( 주니 오 C 하마노 합병) stefanbeller
gitster9cb50a3 커밋 2,016 29 사월)

mv: 중첩 하위 모듈 이동 허용

git mv old new“가 디렉토리 내의 서브 디렉토리로 존재하는 서브 모듈의 경로를 old/올바르게 조정하지 않았습니다 .

그러나 서브 모듈은 .gitmodules파일에 대한 업데이트뿐만 아니라 git 디렉토리에 대한 링크도 업데이트해야 합니다.


답변

올바른 해결책은 다음과 같습니다.

mv oldpath ~/another-location
git rm oldpath
git submodule add submodule-repository-URL newpath

출처 : 자식 서브 모듈 이름 바꾸기


답변

위의 제안 중 일부를 시도했습니다. 나는 뛰고있어:

$ git --version
git version 1.8.4

하위 모듈을 초기화 해제하고 디렉토리를 제거하고 새 하위 모듈을 만드는 것이 가장 좋습니다.

git submodule deinit <submodule name>

git rm <submodule folder name>

git submodule add <address to remote git repo> <new folder name>

적어도 그것이 저에게 가장 효과적이었습니다. YMMV!


답변

이름을 바꿀 수 없으므로 먼저 제거 deinit하고 다시 추가해야합니다.

따라서 제거한 후 :

git submodule deinit <path>
git rm --cached <path>

다음에서 참조를 다시 확인하고 제거 할 수도 있습니다.

  • .gitmodules
  • .git/config
  • .git/modules/<name>각 폴더에는 config참조를 유지하는 파일 이 있으므로 참조 폴더를 (백업하는 것이 가장 좋습니다) 에서 제거하십시오.worktree

그런 다음 리포지토리에 대한 변경 사항을 커밋하여 변경 사항을 준비하십시오.

git commit -am 'Removing submodule.'

다음을 통해 미해결 문제가 없는지 다시 확인하십시오.

git submodule update
git submodule sync
git submodule status

이제 자식 서브 모듈을 다시 추가 할 수 있습니다 :

git submodule add --name <custom_name> git@github.com:foo/bar.git <my/path>

답변

.gitmodules 파일을 편집하여 서브 모듈의 이름을 바꾸고 서브 모듈 디렉토리의 이름을 바꾸십시오.

git submodule sync나중에 해야 할 것 같지만 지금 확인해야 할 입장이 아닙니다.


답변

MacOs : VonC 솔루션 을 사용 하여 하위 모듈 폴더 Common를 소문자 로 변경하려면 다음을 수행하십시오.

git mv Common common

나는 얻다

치명적 : ‘공통’이름 바꾸기 실패 : 잘못된 인수

해결책-임시 폴더 이름을 사용하고 두 번 이동하십시오.

git mv Common commontemp
git mv commontemp common

그게 다야 🙂