Programing

git 하위 모듈의 원격 저장소를 변경하는 방법은 무엇입니까?

lottogame 2020. 10. 2. 21:26
반응형

git 하위 모듈의 원격 저장소를 변경하는 방법은 무엇입니까?


하위 모듈이있는 git 저장소를 만들었습니다. 하위 모듈 자체에 원격 저장소 경로를 변경하도록 말할 수 있지만 상위 저장소에 하위 모듈의 원격 저장소 경로를 변경하는 방법을 알려주는 방법을 모르겠습니다.

운이 좋지 않아서 하위 모듈을 삭제하는 것조차 쉽지 않기 때문에 수동으로 작업을해야한다면 놀라지 않을 것입니다.


.gitmodules파일 을 편집하여 URL을 업데이트 한 다음 실행 git submodule sync하여 해당 변경 사항을 수퍼 프로젝트 및 작업 복사본에 반영 할 수 있어야합니다.


이 명령은 로컬 저장소의 파일을 변경하지 않고 명령 프롬프트에서 작업을 수행합니다.

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 사용) :

  • 새 저장소 경로로 .gitmodules 업데이트
  • ".git / config"파일에서 해당 줄을 제거합니다.
  • ".git / modules / external"디렉토리에서 해당 디렉토리를 삭제하십시오.
  • 체크 아웃 된 하위 모듈 디렉토리 자체를 삭제합니다 (필요한지 확실하지 않음).
  • 실행 git submodule init하고git submodule update
  • 체크 아웃 된 서브 모듈이 올바른 커밋에 있는지 확인하고 해시가 다를 가능성이 있으므로 커밋하십시오.

그 모든 것을 한 후에 모든 것이 내가 기대하는 상태에 있습니다. 저장소의 다른 사용자가 업데이트 할 때 유사한 고통을 겪을 것이라고 생각합니다. 커밋 메시지에서 이러한 단계를 설명하는 것이 현명 할 것입니다!


사실, 역할 을 명확히하기 위해 2009 년 4 월 패치 가 제출되었습니다gitmodule .

이제 gitmodule 문서 에는 아직 다음이 포함되어 있지 않습니다.

.gitmodules자식-설정 : 자식 작업 트리의 최상위 디렉토리에있는 파일, 요구 사항의 클로 linkgit 일치하는 구문으로 텍스트 파일입니다 1 .
[신규] :
이 파일은 Git에서 관리하므로 프로젝트 하위 모듈의 + 레코드를 추적합니다.
이 파일에 저장된 정보는 프로젝트 구성 파일에 저장된 레코드의 신뢰할 수있는 버전을 준비하기위한 힌트로 사용됩니다.
사용자 별 레코드 변경 (예 : 네트워킹 상황으로 인한 하위 모듈 URL의 차이 고려)은 구성 파일에 적용해야하며 , 레코드 변경은 전파해야합니다 (예 : + 서브 모듈 소스의 재배치로 인한). .

그것은 Jim의 대답을 거의 확인시켜 줍니다.


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

목표는 다음과 같습니다. git config remote."$remote".url "$url"


.git / config 파일을 편집하십시오 . 예를 들면 다음과 같습니다. 당신이있는 경우 "일반" 서브 모듈을 당신은 슈퍼 모듈에서이 작업을 수행 할 수 있습니다 :

git config submodule.common.url /data/my_local_common

git config --file=.gitmodules -e 경로를 업데이트 할 수있는 기본 편집기를 엽니 다.

참고 URL : https://stackoverflow.com/questions/913701/how-to-change-the-remote-repository-for-a-git-submodule

반응형