Type something to search...

04. 깃 협업 Forking Workflow

1. 깃 협업 Forking Workflow

Forking Workflow(포킹 워크플로)는 각 팀원이 원본 저장소를 Fork(포크)하여 자신의 저장소에서 작업하고, Pull Request(풀 리퀘스트)로 원본에 병합하는 Git 협업 방식이다.

저장소는 3종류이다:

이름역할관리자
upstream(업스트림)최종 통합 저장소. PR이 들어오고 배포 서버에 연결된다.팀장
origin(내 fork)자유롭게 작업하는 복사본각자
local(로컬)실제로 코드를 수정하는 내 PC 폴더각자

브랜치는 2개이다: main(배포용, 직접 작업 금지) / dev(개발용, PR 대상)


1.1. 팀장: 원본 저장소 세팅

정보

팀장만 1회 수행한다.

1. GitHub에서 저장소를 만든다.

  • New repository → Public → .gitignore: Node → Create repository

2. Gemini CLI를 열고 프로젝트 폴더로 이동한 뒤 초기화한다.

Gemini CLI
이 폴더를 git 저장소로 초기화하고 GitHub 저장소에 연결해줘.
주소는 https://github.com/팀장계정/저장소명.git 이야.
커밋 후 main에 push해줘.

3. dev 브랜치를 만들고 push한다.

Gemini CLI
dev 브랜치를 만들어서 origin에 push해줘.

4. GitHub에서 기본 브랜치를 dev로 변경한다.

  • 저장소 → Settings → Branches → Default branch → dev 선택 → Update

1.2. 팀원 각자: 내 환경 세팅

정보

팀원 각자 1회 수행한다.

1. 팀장 저장소 페이지에서 Fork를 클릭한다.

  • github.com/팀장계정/저장소명Fork → Create fork

2. 내 fork를 로컬에 복제한다.

터미널
1
git clone https://github.com/내계정/저장소명.git
2
cd 저장소명

3. 원본 저장소를 upstream으로 등록한다.

터미널
1
git remote add upstream https://github.com/팀장계정/저장소명.git

4. 제대로 등록됐는지 확인한다.

터미널
1
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)

originupstream 2개가 보이면 성공이다.

5. dev 브랜치로 이동한다.

터미널
1
git checkout dev

1.3. 팀장: GitHub Actions 세팅

정보

팀장만 1회 수행한다. PR이 올라오면 자동으로 빌드를 검증한다.

1. Gemini CLI에서 워크플로 폴더와 파일을 만든다.

Gemini CLI
프로젝트 루트에 .github/workflows/build.yml 파일을 만들어줘.
내용은 아래 코드야.

아래 내용을 함께 전달한다: build.yml 코드

2. 커밋 후 push한다.

Gemini CLI
커밋해줘. 메시지는 feat: GitHub Actions 빌드 체크 추가. main에 push해줘.

3. GitHub 원본 저장소 → Actions 탭을 열어 워크플로우가 등록됐는지 확인한다.


1.4. 매일 반복: 작업 흐름

1.4.1. 작업 전- upstream 동기화

작업 전 반드시 원본의 최신 내용을 가져온다.

Gemini CLI
upstream의 최신 dev를 내 로컬로 가져와줘.
실행 명령
1
git fetch upstream
2
git merge upstream/dev

1.4.2. 코드 수정 후 — 커밋

담당 파일 수정이 끝나면 바로 커밋한다. 쌓아두지 않는다.

Gemini CLI
변경된 파일 확인해줘.
실행 명령
1
git status
Gemini CLI
커밋해줘. 메시지는 feat: 홈 페이지 구현
실행 명령
1
git add .
2
git commit -m "feat: 홈 페이지 구현"
접두어의미예시
feat:새로 만들었다feat: 홈 페이지 구현
fix:고쳤다/바꿨다fix: 검색 버그 수정
docs:문서 작성docs: README 작성

1.4.3. 커밋 후 — 내 fork에 push

Gemini CLI
내 fork에 올려줘.
실행 명령
1
git push origin dev

1.5. PR 올리기

PR 생성 방법


1.6. 팀장: PR 확인 + Merge

빌드 체크 + Merge 방법


1.7. 빌드 에러 수정하기 (팀원)

빌드가 실패하면 아래 순서로 수정한다.

1. PR 페이지 하단의 Details를 클릭한다.

2. 빨간색 줄에서 에러 메시지를 찾아 복사한다.

3. Gemini CLI에 붙여넣는다.

Gemini CLI
이 에러 고쳐줘:
(에러 메시지 붙여넣기)

4. 수정 후 커밋하고 push한다. PR이 자동으로 업데이트된다.

Gemini CLI
커밋해줘. 메시지는 fix: 빌드 에러 수정. 내 fork에 push해줘.
에러원인Gemini CLI 입력
Module not found: Can't resolve './Home'파일명 오타 또는 import 경로 오류이 import 에러 고쳐줘.
'xxx' is not definedimport 누락xxx가 정의되지 않았다는 에러야. import 추가해줘.
Unexpected token문법 오류 (괄호 빠짐 등)문법 에러 고쳐줘.
Cannot find package 'xxx'패키지 미설치xxx 패키지 설치해줘.
VITE_TMDB_API_KEY is not defined.env 없음GitHub Secrets에 등록한다.

GitHub Actions는 .env 파일을 읽지 못한다(.gitignore에 등록했으므로). API 키는 GitHub Secrets에 등록한다.

  1. upstream 저장소 → SettingsSecrets and variablesActions
  2. New repository secret → Name: VITE_TMDB_API_KEY → Secret: 실제 키 값 입력
  3. build.yml에 아래 블록을 추가한다.
.github/workflows/build.yml
1
- run: npm run build
2
env:
3
VITE_TMDB_API_KEY: ${{ secrets.VITE_TMDB_API_KEY }}

1.8. 충돌이 발생했을 때

1. upstream을 동기화한다.

Gemini CLI
upstream 최신 dev를 내 로컬로 가져와줘.

2. Gemini에게 충돌 해결을 요청한다.

Gemini CLI
충돌이 났어. 어떤 파일인지 확인하고 해결 방법 알려줘.

3. 혼자 해결이 어려우면 카카오톡에 에러 화면을 공유하고 Google Meet로 팀원과 함께 결정한다.

4. 해결 후 커밋하고 push한다.

Gemini CLI
충돌 해결했어. 커밋하고 내 fork에 push해줘.

1.9. 담당 파일 분리 (충돌 예방)

담당작업 영역파일 예시
A디자인 + 검색/상세pages/Search.jsx, pages/Detail.jsx
B홈 + 찜목록 + 공통pages/Home.jsx, pages/Wishlist.jsx, components/
C챗봇 + 백엔드pages/Chatbot.jsx, backend/ 전체

주의

공통 파일(App.jsx, index.css, tmdb.js)을 수정할 때는 카카오톡으로 먼저 알린다.


1.10. 절대 하지 말 것

주의

  • upstream에 직접 push한다. (팀장의 초기 세팅만 예외)
  • main 브랜치에서 직접 작업한다.
  • .env 파일을 GitHub에 올린다.
  • 다른 사람 담당 파일을 수정한다.
  • push 전 upstream 동기화를 건너뛴다.
  • 커밋을 쌓아두었다가 한꺼번에 올린다.