단의 개발 블로그

Github 협업 방식 (Upstream/Downstream & Remote repository) 본문

ETC

Github 협업 방식 (Upstream/Downstream & Remote repository)

danso 2024. 8. 26. 20:25

Git은 분산 버전 관리 시스템이다. 분산 관리란 사용자가 원격에 있는 서버를 사용하지 않고 버전을 관리하는 것을 일컫는다. 중앙집중 방식인 SVN과 비교했을 때 갖는 큰 특징이다. 지금까진 Local에서 Github로 올려서 사용하는 방식만 알고 그렇게 사용했다. Github는 호스팅 플랫폼 중 하나로 GitLab, Bitbucket 등 네트워크에 있는 서버 저장소를 Remote Repository (=원격 저장소)라 불린다. 보통 우리가 사용하는 git init 이나 git clone 해서 받아오면 원격 저장소를 로컬 저장소로 가져오는 것이다.

 

로컬에 저장소를 만드는 방법은 크게 두 가지가 있다.

1. 로컬에서 git init으로 생성

2. 깃허브에 저장소 생성 후 clone

이후에 개발자는 어떤 작업을 하고 commit과 push, pull 등을 하게 된다.

- commit : 작업자가 작업 내용을 작성하고 git에 반영하는 행위

- push : 작업자가 로컬 저장소의 commit을 원격 저장소에 반영하는 행위

- pull : 작업자가 원격 저장소의 commit을 로컬 저장소에 반영하는 행위 

 

깃허브에서 저장소를 생성하면 origin이라는 단어가 나오는데, 흔히 보이는 git remote add origin 명령어가 그것이다. clone을 해서 받아올 경우 자동으로 등록되어 있다. 즉 origin = 원격저장소이다. 그럼 여기서 말하고자 하는 Upstream/Downstream은 origin과 local를 기준으로 이해하면 쉽다. origin=upstream, local=downstream이다. 우리가 원격 저장소에 반영할 때 사용하는 git push -u ... 명령어에서 -u 옵션이 --set-upstream옵션의 줄임말이다. 한번 설정하면 다음부터는 git push or git pull 명령어만 입력하면 자동으로 해당 브랜치에서 commit을 받아온다. 즉, 해당 옵션으로 upstream/downstream 설정이 된 것이다.

 

오픈소스 프로젝트나 협업을 진행할 때 fork를 이용한다. fork란 다른 사용자의 저장소를 내가 소유한 저장소로 복사하는 것을 말한다. fork를 할 경우 원래 소유하고 있던 사람과 fork를 진행한 사람 사이에 upstream/downstream 관계가 설정된다. 그래서 보통 깃허브로 협업을 하게 되면 아래 프로세스 대로 진행된다.

1. 작업을 진행할 원격 저장소(깃허브)에서 fork

2. fork한 원격 저장소를 로컬에 clone

3. 작업을 진행

    3-1. 로컬 저장소에 작업 내용 commit

    3-2. 로컬 저장소에서 내 원격 저장소로 push

4. upstream에 반영한다. 이때는 두가지 상황이 있다.

    4-1. Pull Request를 등록하기 전 upstream에 변경된 내용이 없는 경우, origin에서 upstream으로 바로 요청한다.

    4-2. Pull Request를 등록하기 전 upstream에 변경된 내용이 있는 경우, upstream 내용을 로컬로, 로컬 내용을 내 원격 저장소로,

            내 원격 저장소에서 upstream으로 요청한다.

 

예시) 

1. Spring boot 저장소 포크

 2. 내 원격 저장소에 해당 저장소가 생성됨

   - 만약 저장소에 반영할 내용이 있으면 This branch is ~~ commit 갯수가 표시됨

 

upstream을 등록하고, 작업 내용이 있을 경우 내 로컬, 원격 저장소에 반영하는 방법

- 내 로컬에 반영

1. git remote add upstream [url]

    ex) git remote add upstream https://github.com/spring-projects/spring-boot.git

 

2. git pull upstream [branch]

    ex) git pull upstream main

 

- 내 원격 저장소에 반영

3. git push origin [branch]

    ex) git push origin main  

 

- 원격 저장소 & upstream 등록 여부 확인

git push origin main  

 

 

참고

https://techblog.woowahan.com/2553/

https://pers0n4.io/github-remote-repository-and-upstream/

 

'ETC' 카테고리의 다른 글

웹 브라우저에 요청 시 일어나는 과정  (1) 2024.11.07
코드 스타일  (0) 2024.08.27
GitHub 이력서 작성하기  (0) 2024.08.24