자식 서브 모듈의 원격 저장소를 변경하는 방법은 무엇입니까? 원격 저장소 경로를 변경하는 방법을

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

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



답변

.gitmodulesURL을 업데이트하기 위해 파일 을 편집 한 다음 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

답변

Git 2.25 (Q1 2020)를 사용하여 수정할 수 있습니다.
Git submodule url changed “및 새로운 명령을 참조하십시오

git submodule set-url [--] <path> <newurl>

원래 답변 (2009 년 5 월, 10 년 전)

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

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

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

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


자식 서브 모듈 튜토리얼을 따르면, git submodule init서브 모듈 저장소 URL을 .git / config에 추가하려면 ” ” 이 필요합니다 .

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"


답변

나를 위해 일한 것 (Windows에서는 git 버전 1.8.3.msysgit.0 사용) :

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

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


답변

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

git config submodule.common.url /data/my_local_common

답변

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