IT story

자식 서브 모듈 이름 바꾸기

hot-time 2020. 6. 25. 07:54
반응형

자식 서브 모듈 이름 바꾸기


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

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


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

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

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


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 일)을 참조하십시오 . (의해 병합 - Junio C 하마노 -9cb50a3 커밋 2,016 29 사월)stefanbeller
gitster

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

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

그러나 하위 모듈은 git 디렉토리에 대한 링크와 .gitmodules파일 업데이트를 업데이트해야 합니다.


$ mv submodule-oldpath submodule-newpath
$ git rm submodule-oldpath
$ git add submodule-newpath
$ git submodule sync

이 솔루션은 git add 명령을 사용할 때 하위 모듈이 아닌 간단한 디렉토리로 하위 모듈이 프로젝트에 포함 되었기 때문에 작동하지 않습니다.

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

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

출처 : http://bcachet.github.io/development/2012/05/25/rename-git-submodule/


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

$ 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 서브 모듈을 다시 추가 할 수 있습니다 :

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

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

I think you might need to do a git submodule sync afterwards, but I'm not in a position to check right now.


MacOs: When I wanna use VonC solution to change submodule folder Common to lowercase:

git mv Common common

I get

fatal: renaming 'Common' failed: Invalid argument

Solution - use some temporary folder name and move twice:

git mv Common commontemp
git mv commontemp common

That's all :)

참고URL : https://stackoverflow.com/questions/4526910/rename-a-git-submodule

반응형