programing

Git 하위 모듈 이름 바꾸기

stoneblock 2023. 6. 28. 21:17

Git 하위 모듈 이름 바꾸기

Git 하위 모듈 디렉토리를 삭제하고 새 대상 이름으로 다시 추가하는 전체 동작을 수행하는 것 외에 Git 하위 모듈 디렉토리의 이름을 쉽게 변경할 수 있는 방법이 있습니까?

이 작업을 수행하는 동안 상위 디렉토리에서 다음 작업을 수행할 수 없는 이유는 무엇입니까?git mv old-submodule-name new-submodule-name

Git 1.8.5(2013년 10월) 프로세스를 단순화해야 합니다.간단히 수행:

git mv A B

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


commit 0656781fadca1에서 자세히 보기:

현재 사용 중: "git mv하위 모듈에서 하위 모듈의 작업 트리를 수퍼 프로젝트의 작업 트리로 이동합니다.하지만 서브모듈의 경로 설정은.gitmodules이는 현재 작업 트리와 일치하지 않으며 적절한 명령에 의존하는 git 명령을 만듭니다.path -> name mapping(같은)status그리고.diff이상한 짓을 하다

let "git mv하위 모듈의 작업 트리를 이동할 뿐만 아니라 "을(를) 업데이트하여 여기에 도움이 됩니다.submodule.<submodule name>.path에서 설정.gitmodules파일과 스테이지 둘 다.
그렇지 않을 때는 이런 일이 일어나지 않습니다..gitmodules파일이 발견되었으며 이 하위 모듈에 대한 섹션이 없는 경우에만 경고가 발생합니다.이는 사용자가 다음을 제외하고 일반 gitlinks를 사용할 수 있기 때문입니다..gitmodules파일 또는 "git mv" 명령을 실행하기 전에 이미 손으로 경로 설정을 업데이트했습니다(이 경우 경고는 그에게 이를 상기시킵니다).mv그를 위해 그렇게 했을 것입니다).
그럴 때만.gitmodules검색되었으며 병합 충돌이 포함되어 있습니다.mv명령이 실패하고 사용자에게 다시 시도하기 전에 충돌을 해결하라는 메시지가 표시합니다.


git 2.9 (2016년 6월) 개선 예정git mv하위 모듈의 경우:

스테판 벨러()stefanbeller127331(2016년 4월 19일)을 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 9cb50a3, 2016년 4월 29일 커밋)

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

"git mv old new내부의 하위 디렉터리로 사는 하위 모듈에 대한 경로를 조정하지 않았습니다.old/디렉토리를 올바르게 지정합니다.

하지만 하위 모듈은 Git 디렉토리에 대한 링크와 업데이트가 필요합니다..gitmodules파일.

다음 워크플로우가 작동하고 있습니다.

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

참고: 이 접근 방식은 인덱스를 업데이트하지 않습니다..gitmodules2018년 버전의 GIT에서 제대로.

참고: 다음을 수행할 수 있습니다.git mv oldpath newpath이제, VonC의 답변에서 지적한 바와 같이. (최신 버전의 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 하위 모듈을 다시 추가할 수 있습니다.

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

MacOs: VonC 솔루션을 사용하여 하위 모듈 폴더를 변경하려는 경우Common소문자로:

git mv Common common

알겠습니다

fatal: 'Common'의 이름을 바꾸지 못했습니다.잘못된 인수

솔루션 - 일부 임시 폴더 이름을 사용하고 두 번 이동합니다.

git mv Common commontemp
git mv commontemp common

이상입니다 :)

.gitmodules 파일을 편집하여 하위 모듈의 이름을 바꾼 다음 하위 모듈 디렉터리의 이름을 변경합니다.

제 생각에 당신은 아마도 할 필요가 있을 것 같습니다.git submodule sync그 후에, 하지만 저는 지금 확인할 수 있는 위치에 있지 않습니다.

언급URL : https://stackoverflow.com/questions/4526910/rename-a-git-submodule