들어가며
Github에 새로운 레포지토리를 만들면 항상 만나게 되는 화면이 있다.
바로 리모트 레포지토리와 로컬 레포지토리를 연결하기 위해 사용하는 명령어들이다.
이 명령어들에 대해 간략히 설명해보자면,
- git init
> git repo 초기화 - git add README.md
> README.md 파일을 변경 내용에 추가 - git branch -M main
> branch 이름을 main으로 설정 - git remote add origin [리모트 저장소 주소]
> origin이라는 별칭으로 리모트 저장소 추가 - git push -u origin main
> origin의 main branch로 push
와 같다.
오늘은 이 중 5번에 나와있는 "git push -u" 옵션에 대해 알아보려고 한다.
git push -u?
이 옵션은 공식문서에 다음과 같이 설명되어있다.
-u (--set-upstream)
: For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull[1] and other commands. For more information, see branch.<name>.merge in git-config[1].
: 최신 또는 성공적으로 push된 모든 branch에 대해 unstream 참조를 추가하며, argument(전달인자)가 없는 git-pull 과 같은 명령어 등에 의해 사용됩니다. (?)
여기서 "upstream reference"라는 단어를 볼 수 있다. 그럼 여기서 의미하는 upstream 이란 무엇일까?
Upstream & Downstream
위의 두 용어는 다양한 분야에서, 비슷하지만 조금씩 다른 의미로 사용된다. 이에 대해서는 나중에 좀 더 자세하게 다루어 보겠지만, 위와 같은 경우에서는 upstream은 우리가 push 하는 기본 원격 저장소를 의미하고, downstream은 로컬 저장소를 의미한다고 생각하면 된다.
따라서 우리는 git pull 명령어로 upstream(remote)의 내용을 downstream(local)로 내려받아 작업하고, 작업한 내용을 git push 명령어로 downstream(local)에서 upstream(remote)으로 push해준다고 볼 수 있다.
그래서 -u 옵션은 어떤 동작을 수행하는가
"git push -u" 명령을 좀 더 풀어서 설명하면, 해당 브랜치의 upstream을 설정하는 명령이라고 생각할 수 있다.
upstream을 설정한다는 것은, 여러 개의 원격 저장소 중 기본으로 push/pull 명령을 수행할 원격저장소를 지정한다는 의미이다.
이게 무슨 말인지는 우리가 remote 저장소에 push하는 과정을 예시로 들어 설명하겠다.
1. push 명령어를 사용하기에 앞서, 아래의 명령어를 통해 원격 저장소를 추가한다.
$ git remote add [원격저장소 이름] [원격저장소의 https/ssh 주소]
또한, 이 명령어는 아래와 같이 사용해 여러 개의 원격 저장소를 추가 할 수도 있다.
$ git remote add origin [origin의 https/ssh 주소]
$ git remote add repo_1 [repo_1의 https/ssh 주소]
$ git remote add repo_2 [repo_2의 https/ssh 주소]
즉, "git remote add" 명령을 통해서 origin / repo_1 / repo_2 이라는 이름의 원격 저장소를 추가하는 것이다.
2. 원격 저장소를 추가한 후에는, git push 명령어를 통해 원격 저장소에 로컬 저장소의 내용을 push 하게 된다.
예를 들어, 현재 local의 master 브랜치에서,
$ git push origin main
라는 명령을 실행했다면(commit은 이미 되어있는 상태라 가정), 우리는 로컬 저장소의 commit 내역을 remote 저장소 중 "origin"이라는 별칭을 가진 저장소의 "main" 브랜치로 push하게 된다.
위의 과정이 이해가 되었다면, 아래의 명령어도 쉽게 이해할 수 있을 것이다.
$ git push -u origin main
이 명령어의 의미는, 여러 개의 원격 저장소 중 기본으로 push/pull 명령을 수행할 원격저장소를 origin/main로 지정한다는 의미이다.
즉, 아까의 예시처럼 origin/repo_1/repo_2 등 여러 개의 원격 저장소를 등록해 놓았더라도 위의 명령어를 한 번 입력하고 나면
$ git push
기존에 -u 옵션을 사용했던 origin repository로 push 가 가능하게 되는 것이다.
정리
요즘 항상 느끼는거지만, 명령어 하나를 쓰더라도 알고 쓰는 것이 중요한 것 같다.
그리고 오류나 모르는 문제에 직면했을 때, 구글링으로 해결법만 찾는 것이 아닌 공식문서를 직접 찾아보고 원리를 이해하는 습관을 들여야겠다.
'Study' 카테고리의 다른 글
[HTTP 완벽가이드] 1장. HTTP 개관 (0) | 2023.11.18 |
---|---|
트랜잭션의 격리 수준(Transaction Isolation Level) (0) | 2023.11.18 |
SQLD 개념 정리 (0) | 2023.11.18 |
JWT 구조 (0) | 2023.07.05 |
[컴퓨터구조] Parallel Processors 정리 (0) | 2023.03.21 |