GitHub로 협업을 진행하다 보면 규모에 따라 다르겠지만 참여하는 개발자가 많은 프로젝트의
경우 무분별한 Branch 생성으로 협무의 효율을 떨어뜨릴 수 있습니다.

그 외 수많은 Git branch 전략이 있습니다.
그래서, 효율적인 버전 관리를 위해 만들어진 다양한 GitHub-Flow 전략 중 One of the Git Flow
전략을 우리가 진행할 프로젝트에 적용시켜 볼 수 있으면 좋겠다는 생각을 했습니다.

출처:One of the Git Flow © Sammy Baek

팀장이 GitHub에 생성한 프로젝트 원격 저장소(Remote Repositoty)를 본인의 GitHub에
Fork해 오기
Fork해온 프로젝트를 본인의 로컬 저장소(Local Repository)로 Clone해 오기
#로컬 저장소 = 본인 pc
프로젝트를 Forked해온 원격 저장소(Remote Repositoty) https 주소를 로컬 저장소(Local Repository)에 등록하기
#clone 받아오면 remote에 clone 받아온 원격 저장소의 https 주소와 별칭(origin)이 자동으로 생성됨, 그렇기 때문에 프로젝트로 원격 저장소의 주소는 직접 입력해 줘야함
로컬 저장소(Local Repository)에서 작업하기 전 새로운 Branch를 생성해서 작업하기
#main 저장소에는 pull 이용해 항상 최신의 정보가 유지되도록 만들고 생성한 branch에서
작업을 진행해야 로컬 환경에서 merge를 통해 충돌을 사전에 처리할 수 있고 정상적으로
작동하는지 확인 가능함
작업이 완료되었다면 git fetch를 활용해 원본(Upstream) 프로젝트에 변경 이력이 있는 확인해보기
#git fetch 후 받아 온 정보를 git diff ..upstream/main 코드를 이용해 상세 확인
원격 저장소의 변경 이력이 없거나 내 작업물과의 충돌이 발생하지 않을것 같다면, 우선 main
브랜치로 이동 후 git pull upstream을 이용해 최신 버전으로 만들기
main브랜치에서 작업을 진행한 브랜치 merge 진행, 이 과정에서 충돌이 일어난 경우
충돌 해결 후 merge 계속하기
merge가 완료되면 본인의 원격 저장소로 git push
GitHub 사이트에서 본인의 원격 저장소(Forked Remote Repository) 이동 후 Push된 이력을
원본 프로젝트가 있는 저장소에 pull request 요청 보내기
#팀원을 프로젝트 원격 저장소에 초대했다면 pull request 요청 시 승인 과정없이 자동으로 merge 됨

Fork 기능 이용 시 원본 원격 저장소와 복제된 원격 저장소는 연결되어 있어 원본 저장소에 변화가 있을 시 복제된 원격 저장소에 반영 할 수 있다.Fork :
GitHub에 공개된 사용자들의 원격 저장소(Remote Repository)를 자신의 원격 저장소(Remote Repository)로 모든 정보(코드, Commit 내용, Branch 등)를 복제해 오는것
원본 프로젝트가 있는 원격 원격 저장소를 자신의 원격 저장소로 복사해서 작업을 하면 2가지 장점을 생각해 볼 수 있다. ( 2가지의 장점의 큰 맥락은 같다. )
내 원격 저장소에 있는 프로젝트에 어떠한 작업을 진행해도 원본 프로젝트에 영향을 미치지 않음
프로젝트의 무분별한 수정을 막을 수 있음
프로젝트가 진행될 원본 프로젝트가 있는 GitHub의 원격 저장소로 이동하여 오른쪽 상단에 있는 Fork 버튼을 클릭해 보겠습니다.

Fork 버튼을 클릭하면 아래 화면이 나옵니다.
새로 생성될 원격 저장소 이름, 기본값은 Fork한 원격 저장소의 이름이 그대로 사용됨
원격 저장소에 대한 설명
체크된 상태에서 Create fork를 누르면 main Branch만 남기고 기존에 있던 모든 Branch가 제거된 상태로 Copy됨, 이를 원하지 않으면 체크를 해제 후 Create fork를 선택

그럼 아래 명령어를 이용해 Fork한 프로젝트를 본인의 작업 환경에 구성해 놓은 로컬 저장소에 Clone 해봅니다.Clone :
특정 원격 저장소(Remote Repository)를 로컬 환경으로 복제하여 새로운 로컬 저장소(Local Repository)를 만들어 줌
Clone을 통해 생성한 로컹 저장소는 origin이라는 별칭으로 붙음
VS Code에서 BASH 터미널을 이용 중인 경우라면 왼쪽 상단에 Clone한 프로젝트의 폴더가 생긴걸 볼 수 있습니다.
Clone 기능을 통해 로컬에 저장된 저장소의 별칭은 기본적으로 Origin으로 설정됩니다.
💡 Clone 기능을 통해 로컬에 저장된 저장소의 별칭은 기본적으로 Origin으로 설정됩니다.
여기에 추가로 작업해줘야 하는 부분이 있습니다.
원본 프로젝트가 있는 원격 저장소를 등록해 주는 과정입니다. 이걸 통해 원본 프로젝트에
변화가 생겼을때 Git 명령어를 통해 확인해 볼 수 있습니다.
- 아래 명령어를 이용해 Fork한 원본 로컬 저장소를 관리 목록에 추가
(upstream은 별칭으로 원하시는걸로 설정해도 됩니다)

위 과정을 거치면 fork한 원격 저장소(origin)와 원본(upstream) 원격 저장소를 관리 목록에서 확인할 수 있습니다.

Branch를 생성하셨다면 해당 Branch로 이동 후 작업을 진행해주시면 됩니다. 아래 명령어를 통해 원하는 브랜치로 전환할 수 있습니다.
Branch를 생성해서 작업을 하면 몇 가지 장점이 있습니다.
우선 변경 이력을 forked remote repository에 push해 줍니다. 기능을 만들기 위해 작성한 이력을 GitHub에 기록하고 관리하기 위해서 필요한 작업입니다.

# 프로젝트 원본 저장소의 변경 이력 가져와 확인해 보기
git fetch upstream
git diff ..oring/main
#
CONTRIBUTING.mdPull requests 내역에 추가된다. Pull requests 요청은 원본(upstream) 원격 저장소에 수정 권한을 가진 팀장 의해 검토될 것이며 원본 소스와 병합(merge)되는 것이 타당한 것으로 판단되는 경우 원본 소스에 병합될 것이다. 호우~~~!!! 우리 수강생 분들 대단하다!!! 장하다. 멋지다~!~!!!! 