본문 바로가기

Git

Git 서버 IP를 변경하였을 때 Submodule을 받아올 IP가 변경이 안되어 Pull 받을 때 에러 발생할 경우 해결한 방법

 서브모듈을 사용하면 .gitmodules 파일이 만들어지고 이 프로젝트를 Clone 하는 사람은 이 파일을 보고 어떤 서브모듈 프로젝트가 있는지 알 수 있다.

 

.gitmodules 파일

- 서브 디렉토리와 하위 프로젝트 URL의 매핑 정보를 담는 설정 파일

[submodule "SubmoduleExample"]
    path = SubmoduleExample
    url = http://192.168.0.131:8080/myoungmin/SubmoduleExample

 

 

 

아래와 같이 Clone을 받을 IP를 변경해서 명령을 해도

.gitmodules URL을 갱신하지 않아서

git clone --progress -v "http://192.168.0.114:8080/myoungmin/GitExample.git" "C:\Example"

 

서브모듈 업데이트를 할 때 경로 에러가 발생했었다.

git submodule update --progress --recursive --force --remote --merge

 

 

Git 서버 IP가 변경되면 .gitmodules 파일의 url을 변경해 줘야 한다.

 

 

 

 

 

이미 pull받은 git의 IP 주소가 변경되었다면 .gitmodules 파일을 변경하고

git submodule sync

 

위와 같은 명령어로 .gitmodules url을 .git/config에 반영해야한다.

 

 

 

 

Pull을 받는데 문제가 생겼던 우리회사 Git은 서브모듈을 2중으로 사용하고 있어서 아래와 같은 명령어로 문제를 해결했었다.

git pull

//Main 저장소의 서브모듈 모두를 순회하면서 원하는 브랜치로 체크아웃
git submodule foreach git checkout [체크아웃 받을 브랜치]

//Main 저장소의 서브모듈 모두를 순회하면서 브랜치 pull 받기
git submodule foreach git pull

//서브모듈 정보를 기반으로 로컬 환경설정 파일 준비 (.gitmodules 파일에 있는 정보를 .git/config에 등록)
git submodule init

//.gitmodules 파일 정보를 .git/config 와 재귀적으로 맞춰준다.
git submodule sync --recursive

//서브모듈 안으로 순회하면서 init을 해주고 sync를 맞춰준다.
git submodule foreach git submodule init
git submodule foreach git submodule sync --recursive

//Main 저장소에서 재귀적으로 서브모듈 업데이트를 해준다.
//--remote : remote repo의 최신 정보를 가져다 update
//--merge : sub project detached head 상태 방지
git submodule update --progress --recursive --force --remote --merge

//다시 Main 저장소의 서브모듈 모두를 순회하면서 develop 브랜치로 체크아웃
git submodule foreach git checkout [체크아웃 받을 브랜치]