2025. 1. 22. 00:32ㆍ기반기술/Git, Github
Git과 Github의 사용 흐름
Fork → Clone → Commit → Fetch & Merge → Push → Pull Request
1. Fork (원격 -> 원격 복사)
- Fork는 원격 저장소의 지금 상태 그대로를 복사해서 자신의 Github 계정에 저장소를 생성한다.
- Fork는 Git 기능이 아니라 GitHub가 Git 기능을 추상화해서 제공하는 기능이므로 git fork같은 명령어는 없다. 즉, git clone을 GitHub 내에서 구현했다고 생각하면 된다.
- Fork된 저장소는 원본 저장소와 완전히 동일한(주소만 다른) 자신만의 저장소이다.
2. Clone (원격 -> 로컬 복사)
- 원격에서는 소스를 수정할 수 없으므로 이 저장소를 작업할 로컬 머신에 내려받아야 하는데 이 과정이 Clone이다.
- Fork가 Github내에서 저장소를 복사한 것이라면 Clone은 원격 저장소를 로컬 저장소로 복사한 것이다.
3. Commit
- Git commit은 현재의 로컬 git 저장소에 소스를 적용해서 히스토리를 남긴 것
- SVN의 commit과 다르게 원격저장소에 적용되는 것은 아니다.
- Git에서는 브랜치를 생성하는 것을 권장하고 있고, 일반적으로 main브랜치에서 다른 브랜치를 생성해서 작업하는 것이 일반적이다.
Git 브랜치(Branch)
브랜치(Branch)브랜치는 하나의 저장소 내의 독립적인 작업 공간이다.브랜치를 생성하면 기존 코드의 복사본이 만들어지고, 그 후에는 독립적으로 작업할 수 있다.다른 브랜치에서 작업한 내용
hnjee.tistory.com
4. Fetch & Merge (원격 -> 로컬 가져오기)
- 로컬에서 작업을 하다보면 원격저장소에 변경사항이 생긴다
- clone 이후에 원격저장소에 누군가 소스를 push하면 이 변경사항을 다시 로컬로 가져와야 하는데 이 과정을 fetch라고 한다.
- 원격저장소의 변경사항을 로컬로 가져온 뒤에 로컬의 브랜치에 merge하는 과정으로 이루어진다.
- 이 과정은 git pull이라는 명령어를 통해서 이루어 질 수 있으나, 일반적으로는 git fetch후에 git merge로 나누어서 작업하는 것을 보통 더 권장한다 (conflict에 유연한 대처가 가능함)
5. Push (로컬 -> 원격 올리기)
- 로컬에서 수정작업을 완료했다면 자신의 원격저장소에 수정한 커밋 들을 Push해야 한다.
- 이 과정은 로컬저장소에 커밋한 내역을 원격저장소에 적용하는 과정이다.
- 원본저장소와 자신의 원격저장소의 master 브랜치를 계속 싱크하려면 원본저장소 내용을 fetch받아서 master에 merge한 뒤에 자신의 원격 저장소의 master로 push하면 된다. 이 과정을 계속 반복하면 항상 두 master 브랜치의 동기화를 할 수 있다.
6. Pull Request (PR)
- 이제 원격에 올린 변경사항을 원본 저장소에 적용하기 위해서 Pull Request를 보내야 한다.
- 이 때의 Pull Request도 git 자체에 있는 기능은 아니고 Github에서 제공하는 기능이라고 할 수 있다.
- Pull Request를 사용하는 이유는 Collaborator가 아닌 이상 원본저장소에는 쓰기 권한이 없기 때문이다.
- 수정한 내용을 Pull Request로 보내면 저장소의 커미터들이 내용을 리뷰한 뒤에 승인 한다.
승인 이후 Pull Request의 내용이 jQuery 원본저장소에 merge가 된다 (물론 승인하지 않고 거절할 수도 있음)
Github로 협업 프로젝트 관리하기
1. 프로젝트 리더가 GitHub에 원본 원격 저장소 생성
- 프로젝트 리더는 GitHub에서 새로운 원격 저장소를 생성.
- 프로젝트의 목적, 설명, 초기 세팅 (예: README.md, .gitignore, 라이선스 등)을 포함하여 기본 정보를 설정.
2. 프로젝트 뼈대 생성 및 초기 Push
- 리더는 IDE (예: IntelliJ)나 로컬 환경에서 프로젝트의 기본 파일 구조와 뼈대를 생성.
- 작업이 완료되면 로컬 저장소를 GitHub 원격 저장소에 push하여 기본 구조를 팀원들과 공유.
3. 팀원 초대 (Collaborator로 추가)
- 리더는 GitHub 저장소의 Settings > Collaborators 메뉴에서 팀원들을 초대.
- 초대받은 팀원들은 이메일로 초대 링크를 확인하고 프로젝트에 참여.
4. 팀원들은 원격 저장소를 로컬에 Clone
- 각 팀원은 GitHub 원격 저장소를 로컬에 Clone하여 작업 환경을 준비.
- Clone 후, 로컬 저장소와 원격 저장소 연결
5. 작업할 브랜치 생성 및 작업 진행 (Commit -> Push)
- 팀원들은 로컬 저장소에서 작업을 시작하기 전에 새로운 브랜치를 생성 (예: feature/login, bugfix/signup-error 등)
- 브랜치에서 작업을 진행하며 적절히 commit하여 변경 내용을 저장.
- 작업 완료 후 원격 저장소의 해당 브랜치로 Push.
6. Pull Request(PR) 생성 및 코드 리뷰
- 브랜치 작업을 완료한 팀원은 GitHub에서 PR(Pull Request)를 생성. 변경 내용과 의도를 명확히 작성할 것.
- 리더 또는 코드 리뷰 담당자는 PR 내용을 검토하고, 코드 리뷰를 통해 피드백을 제공.
- 리뷰가 완료되면, 담담자가 PR을 승인(Approve)하고 main 브랜치로 병합(Merge)
7. 원격 저장소와 최신 상태 동기화 (Fetch + Merge = Pull)
- PR로 인해 원격 저장소의 main 브랜치가 업데이트되었을 경우, fetch+merge 또는 pull을 통해 자신의 로컬 저장소를 최신 상태로 동기화.
- 이를 통해 모든 팀원이 최신 변경 사항을 반영하고, 충돌 가능성을 최소화.
- 로컬 저장소에서 개발이 완료되어 원격 저장소에 push, merge하기 전, 원격 저장소의 최신 변경 사항 반영해야함