GitHub에서 프로젝트를 fork하여 개인 계정으로 가져오고, 로컬 머신에서 작업하며 upstream 저장소를 설정하고, 최종적으로 수정한 내용을 원본 저장소로 보내는 방법에 대해 자세하게 설명하겠습니다.
왜?? 이렇게 작업하는가?
fork 및 upstream을 사용하는 주된 이유는 협업 및 컨트리뷰션을 용이하게 하기 위해서입니다. 여러 개발자가 동시에 프로젝트에 기여할 때, 이러한 작업 흐름은 코드 충돌을 방지하고 변경 사항을 조직화하며, 프로젝트의 안정성과 유지 관리를 도울 수 있습니다.
- Fork (개인 저장소로 복제):
- 원본 프로젝트를 직접 수정하지 않고, 자신의 계정으로 fork하여 개인적으로 작업합니다.
- 이렇게 하면 원본 프로젝트에 직접 영향을 주지 않으면서 개발자는 자신의 변경 사항을 안전하게 실험하고 관리할 수 있습니다.
- Upstream (원본 저장소와 연결):
- upstream은 원본 프로젝트의 최신 변경 사항을 계속해서 추적하는데 사용됩니다.
- 개발자는 자신의 fork에서 작업하기 전에 원본 프로젝트의 최신 업데이트를 가져와 로컬 저장소를 최신 상태로 유지할 수 있습니다.
- Branch (브랜치를 통한 개별 작업):
- 새로운 브랜치를 만들어서 각각의 작업을 분리하면 여러 개발자가 동시에 작업할 때 충돌을 방지하고, 개별적으로 특정 기능 또는 수정을 진행할 수 있습니다.
- 이 브랜치는 작업이 완료되면 메인 브랜치로 병합될 수 있습니다.
- Pull Request (병합 신청):
- 개발자는 자신의 fork에서 만든 변경 사항을 원본 프로젝트에 반영하기 위해 Pull Request를 생성합니다.
- 이를 통해 프로젝트 관리자는 변경 내용을 검토하고, 코드의 품질을 확인한 후에 병합 여부를 결정할 수 있습니다.
이러한 작업 흐름을 통해 프로젝트는 여러 사람이 효율적으로 협업하고, 변경 사항이 제대로 검토되며, 코드 충돌이 최소화되어 유지보수가 용이한 상태를 유지할 수 있습니다.
프로젝트 Fork하기:
- GitHub에서 원하는 프로젝트로 이동합니다.
- 프로젝트 페이지 오른쪽 상단에 있는 “Fork” 버튼을 클릭하여 자신의 계정으로 해당 프로젝트를 fork합니다.
로컬 머신에 복제(Clone)하기:
- 터미널 또는 Git Bash를 열고 다음 명령어를 사용하여 fork한 프로젝트를 로컬 머신으로 복제합니다.
- Fork한 자신의 Git hub계정의 Url을 clone뒤에 작성합니다.
$ git clone https://github.com/your-username/project.git
Upstream 저장소 추가하기:
- 프로젝트 디렉토리로 이동한 후 원본 저장소를 upstream으로 추가합니다.
$ cd project
$ git remote add upstream https://github.com/original-username/project.git
브랜치 만들기 및 작업하기:
- 새로운 브랜치를 만들어 작업합니다.
$ git checkout -b feature-branch
- 변경사항을 작업하고 커밋합니다.
$ git add . git commit -m "작업한 내용에 대한 설명"
Upstream 변경사항 가져오기:
- 원본 저장소의 최신 변경사항을 가져와 로컬에 반영합니다.
$ git fetch upstream git merge upstream/main
본인 계정으로 Push하기:
- 작업한 브랜치를 자신의 GitHub 계정으로 push합니다.
$ git push origin feature-branch
GitHub에서 Pull Request 생성하기:
- GitHub 웹사이트에서 fork한 프로젝트로 이동하여 “Compare & pull request” 버튼을 클릭합니다.
- 변경 내용을 확인하고 “Create pull request” 버튼을 클릭하여 Pull Request를 생성합니다.
원본 저장소로 Pull Request 보내기:
- Pull Request가 생성된 후, 원본 저장소에 변경사항을 반영하기 위해 “Merge pull request” 버튼을 누르거나 관리자가 검토 후 Merge할 수 있습니다.
이제 당신이 fork한 프로젝트에서 작업한 내용이 원본 저장소로 반영되었습니다.