간단한 프로젝트나 제가 지금까지 진행한 프로젝트에서는 Github에서 프로젝트를 관리할때 각자 기능별 브랜치를 만들고 메인 브랜치에 반영하고 싶으면 로컬에서 commit, merge 를 통해 검증이 되면 그 main 브랜치를 원격 레파지토리에 push해서 병합하는 구조를 사용했었습니다. 그런데 이번에 새로운 프로젝트를 진행하면서 Fork + Pull Request 조합으로 프로젝트를 관리하게 돼서 이 과정에 대해 알아보려고합니다.
1. Fork란 무엇인가?
Fork는 다른 사용자의 GitHub 저장소(Repository)를 내 계정으로 복제하는 기능입니다. 이는 단순한 복사본이 아니라 원본 저장소와의 연결을 유지하면서 독립적으로 작업할 수 있는 공간을 만들어줍니다.
Fork의 주요 목적
- 오픈소스 프로젝트 기여: 직접적인 쓰기 권한 없이도 프로젝트에 기여할 수 있습니다
- 독립적인 개발: 기존 코드를 기반으로 새로운 기능을 추가하거나 방향을 전환할 수 있습니다
- 안전한 실험: 원본 코드에 영향을 주지 않고 다양한 변경사항을 시도해볼 수 있습니다
2. Pull Request란?
Pull Request(PR)는 내가 Fork한 저장소에서 작업한 변경사항을 원본 저장소에 반영해달라고 요청하는 기능입니다. 코드 리뷰와 토론을 거쳐 최종적으로 프로젝트에 병합될 수 있습니다. PR의 장점은 코드 변경사항을 한눈에 비교할 수 있어 리뷰어가 쉽게 검토할 수 있다는 점입니다.
3. Fork & Pull Request 작업 흐름
이제 Fork와 Pull Request를 활용한 전체 작업 흐름을 단계별로 살펴보겠습니다.
1) Fork 하기
먼저 기여하고 싶은 프로젝트의 GitHub 페이지에서 오른쪽 상단의 'Fork' 버튼을 클릭합니다.
Fork가 완료되면 내 GitHub 계정에 동일한 이름의 저장소가 생성됩니다. 이제 이 저장소는 내 소유이며 자유롭게 수정할 수 있습니다.
2) Clone 및 Remote 설정
Fork한 저장소를 로컬 환경으로 가져옵니다.
# 내 Fork한 저장소 복제
git clone https://github.com/내사용자명/저장소이름.git
# 복제된 디렉토리로 이동
cd 저장소이름
이제 로컬 저장소에 원본 저장소를 'upstream'이라는 이름으로 추가합니다. 이는 나중에 원본 저장소의 변경사항을 쉽게 가져오기 위함입니다.
# 원본 저장소를 'upstream'으로 추가
git remote add upstream https://github.com/원본사용자명/저장소이름.git
# 설정된 Remote 확인
git remote -v
출력 결과는 다음과 같을 것입니다:
origin https://github.com/내사용자명/저장소이름.git (fetch)
origin https://github.com/내사용자명/저장소이름.git (push)
upstream https://github.com/원본사용자명/저장소이름.git (fetch)
upstream https://github.com/원본사용자명/저장소이름.git (push)
3) 브랜치 생성
작업을 시작하기 전에 새로운 브랜치를 만들어 작업합니다. 이는 여러 기능을 동시에 개발하거나 다른 팀원과의 코드 충돌을 방지하는데 도움이 됩니다.
# 새 브랜치 생성 및 전환
git checkout -b feature/new-feature
# 브랜치 목록 확인
git branch
4) 코드 수정 및 커밋
이제 필요한 변경사항을 작업하고 커밋합니다.
# 파일 수정 후 변경사항 스테이징
git add .
# 변경사항 커밋
git commit -m "[feat] Retrieve docs node"
5) Fork한 저장소에 Push
작업이 완료되면 내 GitHub 계정의 Fork 저장소에 변경사항을 Push합니다.
git push origin feature/new-feature
6) Pull Request 생성
GitHub로 돌아가면 방금 Push한 브랜치에 대한 'Compare & pull request' 버튼이 표시됩니다. 이 버튼을 클릭하여 Pull Request를 생성합니다. PR 생성 페이지에서 PR의 제목과 설명을 작성합니다. 변경사항을 설명하고 필요한 경우 관련 이슈를 언급합니다. 생성된 PR 페이지에서는 변경된 코드를 한눈에 비교해볼 수 있습니다. 이는 코드 리뷰를 진행하는 데 매우 유용합니다.
7) 코드 리뷰 및 병합
PR이 생성되면 프로젝트 관리자나 다른 팀원들이 코드를 리뷰하고 피드백을 제공합니다. 필요한 경우 추가 수정을 진행하고 다시 Push합니다.모든 검토가 완료되면 관리자가 'Merge pull request' 버튼을 클릭하여 변경사항을 원본 저장소에 병합합니다.
8) 동기화 및 정리
PR이 병합된 후에는 로컬 저장소를 원본 저장소와 동기화하고 사용한 브랜치를 정리합니다.
# 메인 브랜치로 전환
git checkout main
# 원본 저장소의 변경사항 가져오기
git pull upstream main
# 로컬 브랜치 삭제
git branch -d feature/new-feature
# Fork 저장소도 업데이트
git push origin main
Fork & Pull Request의 장점
- 코드 품질 향상: 코드 리뷰 과정을 통해 버그를 사전에 발견하고 코드 품질을 높일 수 있습니다
- 지식 공유: 팀원들이 서로의 코드를 검토하며 지식을 공유할 수 있습니다
- 프로젝트 안정성: 직접적인 main 브랜치 수정 없이 변경사항을 검증할 수 있습니다
- 기여 추적: 누가 어떤 기능을 개발했는지 명확하게 기록됩니다
Fork와 Pull Request는 오픈소스 프로젝트뿐만 아니라 팀 프로젝트에서도 효과적인 협업 방식입니다. 처음에는 기존의 브랜치 방식보다 복잡해 보일 수 있지만, 익숙해지면 더 체계적이고 안전한 개발 환경을 구축할 수 있습니다.
참고자료
https://dusanbaek.tistory.com/97
https://velog.io/@0x45c/Git-Fork-Pull-Request
'Git&GitHub' 카테고리의 다른 글
[PR] 실전 Fork & PR (0) | 2025.04.21 |
---|---|
[Github] 잔디가 심어지지 않는 문제 해결하기 (0) | 2025.04.03 |
[Github 잔디 심기]티스토리 블로그 + Github 연동 (0) | 2025.03.21 |
[Git & GitHub] Branch와 Merge 과정 (2) | 2024.02.26 |
[Git & GitHub] Git 명령어 (0) | 2023.08.10 |