git 서브모듈의 리모트 저장소를 변경하는 방법
서브모듈이 포함된 git 저장소를 만들었습니다.서브모듈 자체에 리모트저장소 경로를 변경하도록 지시할 수는 있지만 서브모듈의 리모트저장소 경로를 변경하는 방법을 부모저장소에 지시하는 방법을 알 수 없습니다.
서브모듈을 삭제하는 것도 쉽지 않기 때문에 운이 나빠서 수동으로 작업을 해야 한다고 해도 놀라지 않을 것입니다.
요..gitmodules
을 사용하여 을 실행합니다.git submodule sync --recursive
슈퍼 프로젝트와 작업 복사본에 대한 변경 사항을 반영합니다.
에 '다니다'로요..git/modules/path_to_submodule
및 path로 합니다.
repo 이력이 다른 경우 새 분기를 수동으로 체크아웃해야 합니다.
git submodule sync --recursive
cd <submodule_dir>
git fetch
git checkout origin/master
git branch master -f
git checkout master
Git 2.25(Q1 2020)로 수정할 수 있습니다.
"Git 하위 모듈 URL 변경됨" 및 새 명령을 참조하십시오.
git submodule set-url [--] <path> <newurl>
())))--
구분자, "옵션 해석을 중지하고 다음 인수를 문자 그대로 처리하는 신호로 이중 하이픈"을 참조하십시오.)
경고:Hi-Angel은 코멘트에서 다음과 같이 언급한다(Git 2.31.1에서도 테스트 완료).
할 필요가
git submodule set-url
버그가 있기 때문입니다.your약 your your your your your your your if
.gitmodules
이 은 이렇게 있어요.some-path
하고 나서, 「」를git submodule set-url some-path/ new-url
슬래시(「」)에 해 주세요./
이 경우 명령어는 기존 서브모듈을 변경하는 대신 다른 서브모듈을 추가합니다.
원래 답변(2009년 5월, 14년 전)
실제로 2009년 4월에 패치가 제출되었습니다.gitmodule
roledisplays..
따라서 gitmodule 문서에는 아직 다음이 포함되어 있지 않습니다.
.gitmodules
file은 git 워킹트리의 최상위 디렉토리에 있으며, linkgit의 요건과 일치하는 구문을 가진 텍스트파일입니다.
신규]:
이 파일은 Git에 의해 관리되므로 프로젝트 서브모듈의 +레코드를 추적합니다.
이 파일에 저장된 정보는 프로젝트 구성 파일에 저장된 레코드의 정식 버전을 준비하기 위한 힌트로 사용됩니다.
사용자 고유의 레코드 변경(네트워크 상황에 따른 서브모듈 URL의 차이를 설명하기 위해 등)은 컨피규레이션파일로 하고, 전파되는 레코드 변경(서브모듈 소스 재배치에 의한 + 등)은 이 파일로 해야 합니다.
이 git 서브모듈 튜토리얼을 따르면 "가 필요합니다.git submodule init
git/config에 저장소 URL을 합니다.
git submodule sync
"는 URL 변경 시(특히 서브모듈의 수가 중요한 경우) 작업을 쉽게 하기 위해 2008년8월에 정확하게 추가되었습니다.
는 매우 간단합니다. 이 명령어와의 관련 스크립트는 다음과 같습니다.
module_list "$@" |
while read mode sha1 stage path
do
name=$(module_name "$path")
url=$(git config -f .gitmodules --get submodule."$name".url)
if test -e "$path"/.git
then
(
unset GIT_DIR
cd "$path"
remote=$(get_default_remote)
say "Synchronizing submodule url for '$name'"
git config remote."$remote".url "$url"
)
fi
done
목표는 다음과 같습니다.
주의:
22023년에 의해 Git 2.40(2023년 1분기)이 git config remote.<remote>.url
:
Calvin Wan()CalvinWan0101
의 commit d390e08(2023년 2월 7일)을 참조하십시오.
(2023년 2월 15일, Junio C Hamano에 의해 합병 ----커밋 59397e9에서)
Documentation
: 여러 개 명확화pushurls
»urls
서명자: Calvin Wan
복수의 URL이 설정되어 있는 리모트에서는, 에, 취득이 사용하는 올바른 URL 이 표시됩니다.
단, 대신 마지막으로 정의된 URL을 반환합니다.
는 첫 에 정의된 으로 URL로 에 이와 같이 수 .
pushurl
.문서를 추가하여 fetch가 여러 URL과 어떻게 상호 작용하는지, push가 여러 pushurl 및 URL과 어떻게 상호 작용하는지 명확히 합니다.
urls-remotes
이제 man 페이지에 다음이 포함됩니다.
<pushurl>
푸시에만 사용됩니다.은 "Default" 입니다.
<URL>
.리모트에 푸시하면 정의된 모든 푸셔럴 또는 정의된 모든 URL에 영향을 줍니다(푸셔럴이 정의되지 않은 경우).
그러나 여러 URL이 정의되어 있는 경우 처음 정의된 URL에서만 가져오게 됩니다.
이러한 명령어는 로컬저장소의 파일을 변경하지 않고 명령 프롬프트에서 작업을 수행합니다.
git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Development
git submodule sync
git submodule update --init --recursive --remote
GIT 서브모듈 URL/브런치를 같은 저장소의 다른 URL/브런치로 변경하기 위한 스크린샷은 블로그를 참조하십시오.
간단히 말하면 .gitmodules 파일을 편집하고 다시 동기화하여 업데이트하면 됩니다.
git 명령 또는 직접 파일을 편집합니다.
git config --file=.gitmodules -e
또는 그냥:
vim .gitmodules
재동기화 및 업데이트:
git submodule sync
git submodule update --init --recursive --remote
나에게 효과가 있는 것(Windows에서는 git 버전 1.8.3.msysgit.0 사용):
- 새 저장소에 대한 URL을 사용하여 .gitmodules를 업데이트합니다.
- 대응하는 행을 ".git/config" 파일에서 삭제합니다.
- ".git/modules/external" 디렉토리(최근 git 버전의 경우 .git/modules)에서 대응하는 디렉토리를 삭제합니다.
- 체크아웃된 서브모듈 디렉토리 자체를 삭제합니다(필요한지는 불명).
- 실행합니다.
git submodule init
★★★★★★★★★★★★★★★★★」git submodule update
- 해시가 다를 수 있으므로 체크아웃된 서브모듈이 올바른 커밋인지 확인하고 커밋합니다.
그렇게 하고 나니 모든 것이 예상대로 되어 있다.저장소의 다른 사용자들도 업데이트를 할 때 비슷한 문제를 겪을 것으로 예상합니다. 이러한 단계를 커밋 메시지로 설명하는 것이 현명할 것입니다.
.git/config 파일을 편집하기만 하면 됩니다.예를 들어, "공통" 서브모듈이 있는 경우 슈퍼모듈에서 이를 수행할 수 있습니다.
git config submodule.common.url /data/my_local_common
git config --file=.gitmodules -e
에 의해 할 수 .
강력한 접근법:
- 갱신하다
.gitmodules
URL을 . - 및 커밋하다
supermodule/.gitmodules
, - 에 만듭니다( 변경 합니다).
.gitmodules
됩니다.) - 작업 디렉토리를 슈퍼모듈의 새 복제로 변경합니다.
- 려려를
git submodule update --init --remote path-to-submodule
에트 보이라!슈퍼모듈의 새로운 클론 서브모듈이 올바르게 설정되어 있습니다!
(여기와 인터넷 모두에서) 많은 사람들이 여러 파일을 수동으로 편집하거나 삭제해야 하는 솔루션을 제안합니다.하지만 그건 정말 필요 없어!
Git의 2.25
)git submodule set-url <path> <newurl>
수 없습니다.을 단순히 해제"한 후 입니다.)가장 간단한 해결책은 서브모듈을 단순히 "등록 해제"한 후 새 URL로 다시 추가하는 것입니다.
Git 버전과 서브 모듈 설정에 따라 수동으로 제거해야 할 수도 있습니다.<path>
시시시시른른른른!!!!!!!!!!!!!!
git submodule deinit <path>
rm -rf <path>
git submodule add <repository> [<path>]
후 ★★★★★★★★★★★★★★★★★..gitmodules
을른른른을을을을을을을을을 。구성, 워킹 트리
deinit
깃을 들다.
deinit [-f|--force] (--all|[--] <path>…)
을 해제합니다. 모든 서브모듈을 합니다.
submodule.$name
disc/config 섹션이 함께 됩니다.이후 콜 .
언급URL : https://stackoverflow.com/questions/913701/how-to-change-the-remote-repository-for-a-git-submodule
'programing' 카테고리의 다른 글
Xcode 6.x.x에 "부적격 디바이스" 섹션이 표시되었습니다. (0) | 2023.04.24 |
---|---|
ASP의 숨겨진 기능그물 (0) | 2023.04.24 |
도커 컨테이너에서 환경 변수 가져오기 (0) | 2023.04.24 |
Eclipse 기본 설정으로 되돌리기 (0) | 2023.04.24 |
모든 앱 창의 WPF 아이콘 (0) | 2023.04.24 |