2023. 4. 14. 01:41ㆍ공부/Git
Upstream 기능은 무엇이며 왜 사용하는지를 알기 위해서 Remote Repository와 Local Repository의 개념에 대해서 알아야한다. 부끄럽지만 나는 얼마전까지만해도 이 개념들에 대해서 생각해본적이 없다. 그냥 남들이 하니까 따라 사용했다. Git과 Github이 같은건줄 알았으니까 -0-;;
Remote Repository는 Github, Gitlab, Bitbucket과 같은 코드 호스팅 플랫폼의 네트워크 서버에 있는 저장소를 말한다. 그리고 이런 RemoteRepository에 있는 저장소를 git clone 하거나, git init으로 내 컴퓨터 (Local)에 생성한 Repository를 Local Repository라고 한다.
원격 서버에 있는 모든 Repository는 Remote Repository지만, 로컬 환경에 존재하는 Repository도 Remote Repository가 될 수 있다.
Upstream & Downstream
운이 좋게도 이전에 진행했던 ACO프로젝트의 경우 팀장을 맡아주신분이 실력이 좋고 Git을 많이 사용해보셨는지 개발환경을 모두 셋팅해주셨다. 당시에는 왜 이런 방식을 사용하는지 물어보지 못했던것이 너무 아쉽다. 하여튼 나도 모르게 사용했는데 다시 살펴볼수라도 있어서 좋다.
기본적인 순서는 아래와 같았는데, 팀장이 만들어둔 ACO 라는 Organization이 존재하고, 그 ACO에는 aco-front와 aco-back 이라는 Repository가 존재한다.
나는 해당 Repo를 내 계정으로 Fork한다. 이것이 Origin이 될것이고 ACO는 Upstream이 될것이다.
이렇게 Fork 된 Repo를 git clone 과 같은 명령어로 내 컴퓨터(Local)에 Local Repository를 만든다.
ex) git clone https://github.com/PorkbellyBigfan/aco-back.git
이제 이 local repo의 업스트림을 설정해주는 명령어를 입력
git remote add upstream https://github.com/TEAM-ACO/aco-back.git
위에서 설명한 순서들을 그림 하나로 표현하자면 다음과 같다.
.
이제 내가 로컬에서 작업한것들이 어떤 방식으로 PR 까지 이어지는지 보면
1. 개발할 기능의 브랜치를 생성 ex) git checkout -b ACO_login
2. 작업후 먼저 Origin(local branch)에 커밋을 수행 git push origin ACO_login
3. 그리고 내가 fork했던 Origin인 https://github.com/PorkbellyBigfan/aco-back.git 에 가서 Upstream인 ACO에 PR 요청!
이런 구조를 이용하는 이유를 빡대가리인 내가 이해한 방식대로 다시 풀어서 설명해 보겠다. 틀린점이 있으면 댓글 부탁드린다.
내가 비빔밥을 만드는 프로젝트에 참여했다고 가정하자. 나는 비빔밥을 혼자 만들지 못하기 때문에, B모씨와 L모씨와 함께 협업을 진행한다. 나는 나물무침 파트(특정 기능 개발)를 맡아서 요리를 시작했는데, 나는 내가 만든 숙주 나물을 비빔밥 그릇에 올리기에 앞서서 다른 팀원인 B모씨와 L모씨에게 내가 만든 나물이 괜찮은지 확인받는 작업이 필요하다.
왜냐하면 내가 만든 나물이 개똥맛이 날 수도 있을수도 있고, 고객이 요청한 비빔밥에 필요한 나물의 종류가 다를수도 있다. 그러기 위해서 비빔밥 그릇(Upstream)에 바로 올려버리는 방식이아닌, 내가 먼저 확인해보고(Local Repository에 commit) 그다음 같이 요리하는 팀원들에게(Pull Request)를 날려서 내가 만든 나물이 괜찮은지 확인을 부탁하는것이다. 내가 만든 나물에 맞춰서 팀원들도 각자 맡은 부분의 간을 조정한다던지, 각자의 작업에 충돌이 생길 부분을 확인할 수 있을 것이다. 만약 문제가 없다면 내가 만든 나물은 비빔밥 그릇에 온전히 올라갈 것이다.
'공부 > Git' 카테고리의 다른 글
[Git] 이력관리를 위한 Rebase Merging (0) | 2023.04.14 |
---|---|
[Git] 2-Way Merge & 3-Way Merge (0) | 2023.04.13 |
[Git] CherryPick (1) | 2023.04.13 |
[Git] Stash? (0) | 2023.04.12 |
[Git] 브랜치 전략 (0) | 2023.04.12 |