사내 GitLab URL 변경에 따라 Git Remote URL을 바꾼 방법
Issue
섹션 제목: “Issue”회사의 GitLab 플랜과 운영 방식이 바뀌면서 사내 GitLab URL도 함께 변경됐다.
기존에 사용하던 로컬 저장소들은 모두 예전 remote URL을 바라보고 있었기 때문에, 그대로는 fetch와 push가 정상적으로 동작하지 않았다.
이번 글에서는 이런 상황에서 로컬 저장소의 Git Remote URL을 어떻게 바꿨는지 정리한다.
Cause
섹션 제목: “Cause”문제 자체는 단순했다.
- Git 서버 주소가 바뀌었다.
- 로컬 저장소의
origin은 여전히 예전 URL을 가리키고 있었다.
즉 로컬 Git 설정과 실제 서버 주소가 어긋난 상태였다.
가장 먼저 할 일은 현재 어떤 remote URL이 등록되어 있는지 확인하는 것이다.
$ git remote -v
origin git@gitlab.com:projects/sample1/ABCDE-service.git (fetch)origin git@gitlab.com:projects/sample1/ABCDE-service.git (push)비슷한 명령어로 git config --get remote.origin.url도 사용할 수 있다.
이 명령어는 fetch/push를 나누지 않고 현재 origin에 설정된 URL만 보여준다.
Resolution
섹션 제목: “Resolution”가장 간단한 방법은 git remote set-url이다.
이 명령은 기존 remote 이름은 그대로 유지한 채 URL만 새 주소로 바꿀 때 가장 적합하다.
$ git remote set-url origin git@gitlab.com:projects/sample2/ABCDE-service.git$ git remote -v
origin git@gitlab.com:projects/sample2/ABCDE-service.git (fetch)origin git@gitlab.com:projects/sample2/ABCDE-service.git (push)내가 실제로 사용한 방법도 이 방식이다.
remote rename으로 별칭을 바꾸고 새 remote를 다시 추가하는 방법도 있지만, URL만 바꾸는 상황에서는 set-url이 가장 단순하다.
예를 들어 기존 origin을 잠깐 보존하면서 바꾸고 싶다면 아래처럼도 할 수 있다.
# 1) 기존 별칭 이름 변경$ git remote rename origin old_origin
# 2) 새 URL을 origin으로 다시 등록$ git remote add origin git@gitlab.com:projects/sample2/ABCDE-service.git
# 3) 확인$ git remote -vold_origin git@gitlab.com:projects/sample1/ABCDE-service.git (fetch)old_origin git@gitlab.com:projects/sample1/ABCDE-service.git (push)origin git@gitlab.com:projects/sample2/ABCDE-service.git (fetch)origin git@gitlab.com:projects/sample2/ABCDE-service.git (push)
# 4) 이전 remote 삭제$ git remote rm old_origin다만 URL을 바꾸는 상황에서 git remote rename에 URL 자체를 넣으면 아래처럼 실패할 수 있다.
$ git remote rename git@gitlab.com:projects/sample1/ABCDE-service.git git@gitlab.com:projects/sample2/ABCDE-service.git
fatal: No such remote: 'git@gitlab.com:projects/sample1/ABCDE-service.git'rename은 remote의 URL이 아니라 별칭(alias) 을 바꾸는 명령어이기 때문이다.
Notes
섹션 제목: “Notes”1) 가장 먼저 확인할 것
섹션 제목: “1) 가장 먼저 확인할 것”git remote -vgit config --get remote.origin.url
remote URL 문제는 먼저 현재 로컬 설정을 확인하는 게 가장 빠르다.
2) URL 변경만 필요하면 set-url이 가장 단순하다
섹션 제목: “2) URL 변경만 필요하면 set-url이 가장 단순하다”- remote 이름은 그대로 유지
- URL만 새 주소로 교체
운영 중 저장소 주소만 바뀌는 상황에서는 대부분 이 방법으로 충분하다.
3) rename은 URL 변경 명령이 아니다
섹션 제목: “3) rename은 URL 변경 명령이 아니다”git remote rename은 remote 별칭을 바꾸는 명령어다.
즉 origin 같은 이름을 바꾸는 용도이지, 서버 주소 자체를 교체하는 명령어는 아니다.