fork란 다른 사람의 Github Repository를 내 Github Repository로 복제하여 가져오는 기능이다.
우리가 생각하는 포크처럼 찍어서 가져온다고 생각하면 될 것 같다.
이 때 forked된 내 저장소는 원본 저장소(다른 사람의 Github Repository)와 연결되어 있기 때문에 협업이 가능하다.
동작 과정을 풀어서 설명하자면,
1. 다른 사람의 Repository를 Fork하여 내 Repository로 복제한다.
2. git clone을 통해 내 local 환경에 저장소를 내려받는다.
3. local 환경의 작업 branch에서 변경, 추가, 수정을 진행한다.
4. 원본 저장소와 merge하기 위해 pull request를 전달한다.
5. 원본 저장소의 관리자가 pull request된 코드를 살펴보고 리뷰 등을 진행하고 승인을 한다.
6. merge
7. 원본 저장소에 내가 작업한 코드들이 merge되어 반영된다.
1.
원본 저장소에 들어가 Fork를 클릭한다. 그 후 내 Github Repository로 들어가면 복제되어 Fork된 저장소가 생겼을 것이다.
2.
local 환경에서 작업을 위해 밑줄친 주소를 git clone으로 내려받는다.
git clone [Clone URL]
참고로 clone은 원격 저장소의 모든 branch가 같이 받아지지 않음.
기본적으로 master branch만 받아와 진다.
원격 저장소의 다른 branch를 가져오려면
git checkout -t [원격 저장소의 branch 이름]
branch의 이름을 변경하여 가져오고 싶다면?
git checkout -b [생성할 branch 이름] [원격 저장소의 branch 이름]
3.
branch를 생성한다. 만약 main에 바로 작업을 한다면 생략해도 되지만 원본과 별도의 작업을 위해 branch를 생성하는게 좋다. 예시로 master branch를 생성하겠다.
git checkout -b [branchName]
git checkout -b master
4.
git remote add origin(별칭) [Clone URL]
원본 프로젝트 저장소를 원격 저장소에 추가
5.
git branch
git branch를 통해 branch를 확인해보면 생성한 branch로 선택되어 있을 것이다.
이후의 과정은 로컬환경에서 작업 후, add-commit-push를 동일하게 진행하면 된다.
6.
작업을 완료하고 push까지 진행되었다면 이제 원본 저장소와 merge를 위한 pull request를 진행하여야한다.
표시한 두 곳중 하나를 클릭하여 pull reqeust를 진행한다. 그 이후는 관리자가 승인을 하고 merge를 해줄 것이다.
관리자가 승인 후 merge를 하면 나의 수정 코드가 원본 저장소에 저장되며 위와 같이 merge되었다는 안내 문구가
pull request 탭에서 나타난다.
7.
- 코드 동기화
git pull origin(별칭)
- branch 삭제
git branch -d [branchName]
이렇게 원본 저장소에 수정한 코드가 저장되었다. 하지만 현재 branch를 통해 작업을 하고 PR을 요청 후 원본 저장소에 merge되었다. 위에서는 master로 진행을 하였는데, main에는 현재 해당 코드가 동기화되어 있지 않다.
또한, 다른 사람이 위와 같은 방식으로 로컬 환경에서 작업을 하고 merge를 진행하여 원본 저장소가 수정되었을 때
어떻게 내 저장소에도 반영되도록 할 수 있을까?
자동으로 해주면 좋겠지만 그렇진 않다!
원본 저장소와 연결해보자!
git remote add upstream [원본 저장소 주소]
연결 확인 명령어
git remote -v
upstream 저장소로부터 최신 업데이트를 가져오는 방법은 아래와 같다.
먼저, fetch를 통해 원본 저장소의 내용을 불러온다.
git fetch upstream
upstream repository 의 브랜치로부터 나의 local branch 로 merge 한다.
git checkout [원하는 나의 local 브랜치]
git merge upstream/[원하는 원본 저장소의 브랜치]
위 코드까지 실행한 상태는 원본 저장소에서 나의 local환경으로 가져온 상태이다.
이제 이를 원격 저장소로 push해주면 원본 저장소의 최신 상태를 fork한 내 저장소로 가져올 수 있게 된다.
git push origin [브랜치]