자식 서브 모듈 디렉토리의 이름을 바꾸는 쉬운 방법이 있습니까? ( 삭제 하고 새로운 대상 이름으로 다시 추가 하는 전체 동작을 수행 하는 것 제외).
그리고 우리가있는 동안 부모 디렉토리에서 단순히 다음을 수행 할 수없는 이유는 무엇입니까? git mv old-submodule-name new-submodule-name
npm
간단한 작동 방식을 보여줍니다. 언젠가 ... 어쩌면 ... 누군가 ... 재 작성할 것입니다 ...
자식 서브 모듈 디렉토리의 이름을 바꾸는 쉬운 방법이 있습니까? ( 삭제 하고 새로운 대상 이름으로 다시 추가 하는 전체 동작을 수행 하는 것 제외).
그리고 우리가있는 동안 부모 디렉토리에서 단순히 다음을 수행 할 수없는 이유는 무엇입니까? git mv old-submodule-name new-submodule-name
npm
간단한 작동 방식을 보여줍니다. 언젠가 ... 어쩌면 ... 누군가 ... 재 작성할 것입니다 ...
답변:
다음 워크 플로가 작동하는 것을 발견했습니다.
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
참고 :이 방법은 2018 버전의 GIT에서 인덱스 및 .gitmodule을 올바르게 업데이트하지 않습니다.
참고 : VonC 의 답변git mv oldpath newpath
에서 지적했듯이 지금 바로 할 수 있습니다 . (최신 버전의 git을 사용하고 있는지 확인하십시오)
git add newpath
슬래시를 사용하지 마십시오
.git/modules/SUBMODULE/config
worktree
있는 경우 올바른 디렉토리를 다시 가리 키도록 파일을 .
2.13.1
. 그러나 단순히 git mv old new
매력처럼 작동합니다. 변경 사항을 완료하기 위해 git commit 만하면됩니다.
Git1.8.5 (2013 년 10 월)는 프로세스를 단순화해야합니다 . 간단히 :
git mv A B
"
git mv A B
", 서브 모듈A
을 이동할 때 작업 트리.gitmodules
를 재배치하고 파일 의 경로를 조정하는 방법을 배웠 습니다 .
커밋 0656781fadca1 에서 더 많은 것을보십시오 :
현재
git mv
서브 모듈에서 " "를 사용 하면 서브 프로젝트의 작업 트리가 슈퍼 프로젝트의 작업 트리로 이동합니다. 그러나 서브 모듈의 경로 설정.gitmodules
은 그대로 유지됩니다. 이는 현재 작업 트리와 일치하지 않으며 올바른path -> name mapping
(와 같은status
및diff
) 에 의존하는 git 명령이 이상하게 작동합니다."하자
git mv
"단지 서브 모듈의 작업 트리를 이동뿐만 아니라 업데이트하지 않음으로써 여기에 도움 "submodule.<submodule name>.path
로부터"설정.gitmodules
파일 및 단계를 모두.
이것은.gitmodules
파일을 찾을 수 없을 때 발생 하지 않으며이 서브 모듈에 대한 섹션이 없을 때만 경고를 발행합니다. 이는 사용자가.gitmodules
파일 없이 일반 gitlink를 사용 하거나 "git mv"명령을 실행하기 전에 이미 경로 설정을 직접 업데이트 했기 때문입니다 (이 경우 경고mv
는 사용자 에게 해당 작업을 수행했음을 경고 합니다). 발견되고 병합 충돌이 포함 된
경우에만 명령이 실패하고 사용자에게 다시 시도하기 전에 충돌을 해결하도록 지시합니다..gitmodules
mv
자식 git mv
모듈 git 2.9 (2016 년 6 월)가 개선 됩니다 :
Stefan Beller ( )의 commit a127331 (2016 년 4 월 19 일)을 참조하십시오 . ( 주니 오 C 하마노 합병) --stefanbeller
gitster
에 9cb50a3 커밋 2,016 29 사월)
mv
: 중첩 하위 모듈 이동 허용"
git mv old new
"가 디렉토리 내의 서브 디렉토리로 존재하는 서브 모듈의 경로를old/
올바르게 조정하지 않았습니다 .그러나 서브 모듈은
.gitmodules
파일에 대한 업데이트뿐만 아니라 git 디렉토리에 대한 링크도 업데이트해야 합니다.
fatal: source directory is empty, source=my_source, destination=my_destination
. 1.8.5에 안정적인 릴리스가 있으면 다시 시도하십시오.
올바른 해결책은 다음과 같습니다.
mv oldpath ~/another-location
git rm oldpath
git submodule add submodule-repository-URL newpath
출처 : 자식 서브 모듈 이름 바꾸기
이름을 바꿀 수 없으므로 먼저 제거 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
그게 다야 :)
.gitmodules
하위 모듈을 이동할 때 더 이상 수동으로 업데이트 할 필요가 없습니다 . 아래 내 답변을