단의 개발 블로그
Github 협업 방식 (Upstream/Downstream & Remote repository) 본문
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 |