Remote and Local 은
Git 에서 로컬 저장소와 원격 저장소가 무엇이고
둘이 어떻게 연결되어 동작하는지 설명하는 문서이다.
Git 을 처음 배우면
commit 했는데 GitHub 에 안 보이는 이유,
push 와 pull 이 왜 필요한지 여기서 이해할 수 있다.
핵심은
로컬과 원격은 연결되어 있지만 서로 다른 저장소라는 점이다.
Local 은
내 컴퓨터 안에 있는 Git 저장소를 말한다.
즉, 내가 지금 작업하고 있는 프로젝트 폴더에서
git init 하거나 clone 해서 받은 저장소가
내 로컬 저장소이다.
여기서는 인터넷이 없어도
기본적인 Git 작업이 가능하다.
예를 들어 아래는 전부 로컬에서 가능하다.
- 파일 수정
git statusgit addgit commit- branch 생성
즉, Git 은 원래 로컬 중심 도구이다.
Remote 는
인터넷이나 네트워크 상에 있는 Git 저장소이다.
보통 GitHub, GitLab, Bitbucket 같은 곳의 저장소가 여기에 해당한다.
원격 저장소는 주로 아래 목적에 사용한다.
- 백업
- 협업
- 공유
- 중앙 기준 저장소 역할
즉, remote 는
여러 사람이 같이 쓰는 저장소라고 생각하면 편하다.
Git 은
내 컴퓨터에서 작업하는 공간과
공유용 저장소를 분리해서 사용한다.
이렇게 나누면 장점이 있다.
- 인터넷 없어도 commit 가능
- 로컬에서 충분히 정리 후 공유 가능
- 실험 작업을 바로 공개하지 않아도 됨
- 협업 시 공유 시점을 직접 조절 가능
즉, 로컬은 작업 공간이고
원격은 공유 공간이다.
많이 헷갈리는 부분인데
git commit 은 로컬 저장소에만 기록한다.
즉, commit 했다고 해서
자동으로 GitHub 에 올라가는 것은 아니다.
GitHub 에 반영하려면
별도로 git push 를 해야 한다.
git push 는
내 로컬 저장소의 commit 을
원격 저장소로 올리는 명령어이다.
즉, 로컬에서 만든 기록을
GitHub 같은 원격 저장소에 반영하는 단계이다.
example:
git push origin main
git pull 은
원격 저장소의 최신 내용을
로컬 저장소로 가져오는 명령어이다.
즉, 다른 사람이 올린 변경 내용이나
원격에서 바뀐 내용을
내 컴퓨터로 반영하는 것이다.
example:
git pull origin main
git clone 은
원격 저장소를 통째로 내 컴퓨터로 복사해 오는 것이다.
단순 파일만 복사하는 것이 아니라
Git 이력까지 포함해서 받아온다.
example:
git clone <repository-url>
즉, clone 은
원격 저장소를 처음 로컬에 가져오는 시작 작업이다.
origin 은
보통 원격 저장소의 기본 이름이다.
예를 들어 GitHub 저장소를 연결하면
대부분 origin 이라는 이름으로 등록된다.
그래서 아래 명령이 자주 나온다.
git push origin maingit pull origin main
여기서 origin 은
원격 저장소 별명이라고 보면 된다.
로컬과 원격은
서로 자동으로 완전히 똑같아지는 것이 아니다.
즉, 아래가 각각 필요하다.
- 로컬 → 원격 :
push - 원격 → 로컬 :
pull
그래서 둘은 연결되어 있어도
항상 같은 상태라는 보장은 없다.
협업에서는
다른 사람이 원격 저장소에 push 한 내용을
내 로컬에 가져와야 하고,
내 작업도 원격에 올려야 한다.
즉, 협업은
로컬과 원격 사이를 계속 오가는 흐름이다.
기본적으로 아래가 반복된다.
- 원격 최신 내용 pull
- 로컬에서 작업
- commit
- 원격에 push
예를 들어
- 나는 로컬에서 commit 만 했고 push 안 함
- 팀원은 원격 저장소에 이미 새 commit push 함
이 경우
내 로컬과 원격은 서로 다른 상태이다.
그래서 상황에 따라
- 먼저 pull 해야 할 수도 있고
- 먼저 push 가 막힐 수도 있고
- 충돌이 날 수도 있다
즉, 로컬과 원격은
서로 별개 상태로 존재할 수 있다.
git remote -v
git remote add origin <repository-url>
git push origin main
git pull origin main
git clone <repository-url>
아래처럼 생각해도 된다.
- 로컬 저장소 : 내 작업실
- 원격 저장소 : 팀 공용 창고
내 작업실에서 정리한 뒤
필요한 것만 공용 창고에 올리고,
공용 창고에 새로 들어온 것도 다시 가져오는 구조이다.
로컬 저장소는
내 컴퓨터에서 작업하고 commit 하는 공간이고,
원격 저장소는
그 기록을 공유하고 협업하기 위한 별도 저장소이다.