새롭게 알고리즘 스터디를 시작하면서, 스터디 방식을 논의하던 중 깃허브를 사용하자는 의견을 냈다.
이전 스터디에서는, 내가 레포지토리를 만들고 그 레포에 사용자를 초대하는 방식으로 진행했었는데,
이번에는 스터디 팀장님께서 다른 방식을 제안해 주셨다.
위의 스터디 방식에 따라,
외부 저장소를 fork한 뒤 pull request를 요청하는 방법을 정리하려 한다.
또한 원본저장소에서 변경된 사항이 있으면 fork한 내 저장소에는 반영이 되지 않기에, 동기화도 해주어야 한다.
fork는 다른 사람의 레포지토리를 그대로 복사해 내 소유의 레포지토리로 가져오는 기능이다.
Fork한 저장소는 내 소유이기 때문에 내 마음대로 소스코드를 수정할 수 있고, 이 내용은 원본 저장소에 영향을 주지 않는다. 따라서 Fork 저장소를 이용하면 소스를 마음껏 수정해보면서, 원본 소스에 대한 무분별한 수정을 막을 수 있다.
즉, 협업을 위해 어떤 부분을 수정하거나 추가기능을 넣을때 fork를 사용한다.
Fork 저장소의 수정 내역은 Pull request로 요청하고, merge를 거쳐야만 원본 저장소에 업데이트 된다.
fork할 레포지토리에 접속하면, 상단 우측에 Fork 버튼이 있다.
Fork 버튼을 클릭하고 내 저장소에 Fork해주면 아래와 같이 새 저장소가 생성된다.
Clone은 원격 저장소의 소스코드와 commit history등을 내 로컬 저장소로 그대로 가져오는 기능이다.
클론한 로컬저장소에서 소스코드를 수정한 후, Commit과 Push의 과정을 거쳐 원격 저장소의 commit history를 로컬과 동일해지도록 업데이트 해준다.
저장소를 클론하기 위해서는 원격저장소 페이지에서 클론 주소를 복사한뒤 아래 명령어를 입력해주면 된다.
$ git clone [로컬 저장소 주소] [생성 폴더명]
생성 폴더명을 생략하면, 원격저장소 이름과 동일한 폴더가 생성된다.
나는 생성 폴더명은 생략한채로 클론해주어, 원격저장소 이름과 동일한 폴더가 생성되었다.
$ git remote -v
위 명령어를 입력해 로컬 저장소와 연결된 원격저장소를 확인한다.
$ git remote add upstream [원격 저장소 주소]
원격 저장소를 등록하기 위해 위 명령어를 입력해준다.
보통 fork에서 원본 저장소의 이름은 upstream을 사용한다고 한다.
연결된 원격저장소 목록을 확인해보면 fork한 내 로컬저장소가 origin, 원본 저장소는 upstream이라는 이름으로 추가된 것을 확인할 수 있다.
로컬 저장소에서 수정한 내용을 fork한 원격 저장소에 Commit & Push 해준다.
이때 원본 저장소에 수정내역을 업데이트 하기 전에, 다른 사람들이 먼저 수정한 내역이 있는지 확인한다.
$ git fetch upstream
만약 다른 사람이 커밋한 내역으로 인해 Conflict가 발생했다면, Conflict를 해결하고 다시 fork한 저장소에 Commit & Push 한다.
push가 완료되었다면 내 fork 저장소 페이지에 접속해, Pull request 탭으로 들어가 New pull request 버튼을 클릭한다.
원본저장소의 어떤 브랜치로 머지할지 선택한 후 Create Pull request 버튼 클릭 해준다.
Pull request 타이틀과 내용을 작성해주면 Pull request가 완료 된다.
내가 올린 Pull request를 외부 원본 저장소의 소유자(스터디 팀장님)가 확인하고 merge 해주면 외부 원본 저장소에 내 수정 내역이 반영된 모습을 확인할 수 있다!
$ git fetch upstream
외부 원본 저장소의 최신 내용을 가져온다.
$ git checkout main
$ git merge upstream/main
merge할 브랜치로 변경한 다음, 원본 저장소의 변경사항을 로컬 브랜치에 merge 준다.
$ git push origin main
내 로컬 저장소(fork한 저장소)에 merge한 내용을 반영해준다.