[팝콘]개발기록 - 협업 워크플로우

sunghun kim·2025년 3월 28일

[팝콘-프로젝트]

목록 보기
2/6

git을 본격적으로 사용하는건 처음이기에
팀원에게 민폐를 끼치지 않도록 과정을 기록했습니다.

🍴1. Fork

fork는 Git저장소를 복사하여 자신의 GitHub계정으로 가져오는 작업으로,
원본 저장소(Upstream)와 독립적인 복사본을 생성하여 자유롭게 변경작업을 할 수 있습니다.

Upstream원본 레포지토리를 말하고,
Origin원본 레포지토리에서 Fork를 한 레포지토리를 말합니다.


🖨️ 2. clone

Git에서 clone원격 저장소(remote repository)의 전체 내용을 로컬 컴퓨터로 복사하여 새로운 작업 디렉토리를 만드는 명령어입니다.

  1. 로컬 컴퓨터에서 터미널을 열어 cd <clone할 경로> 를 입력합니다.
  2. 원격 저장소에서 git 주소를 복사합니다.
  3. 터미널에서 git clone <git 주소>를 입력합니다.

주의사항은 Upstream이 아닌 Origin에서 clone 해야한다는 점입니다‼


🌳 3. branch

Git에서 branch는 저장소내에서 독립적으로 작업을 진행할 수 있는 분기를 의미합니다.
새로운 기능을 개발할 때, 기존 작업에 영향을 주지 않고 별도의 작업 공간을 생성하는 역할입니다.


📝 4. add/commit

Git에서 addcommit은 파일의 변경 사항을 저장소에 반영하는 데 사용하는 기본 명령어입니다.

터미널에서 git add / git commit 을 통해서 할 수 있지만,
GitHub Desktop 소프트웨어도 사용할 수 있습니다.

  1. 프로젝트를 올바르게 선택하고
  2. 브랜치도 올바른지 확인을 먼저 해줍니다.
  3. git에서 관리하는 파일 중, 변화 된 파일은 자동으로 목록(좌측)이 생깁니다.
  4. 목록에서 체크박스에 체크를 하면 git add를 한 상태, 즉 staging area에 들어간 상태와 같습니다.
  5. 우측에서 원하는 줄만 staging area에 넣을 수도 있습니다.
  6. 그리고 좌측하단의 commit message를 입력하고
  7. 하단의 commit 버튼을 누르면 commit 할 수 있습니다.

History로 들어가면 기록을 쉽게 확인할 수 있으며, 직전 커밋에 대한 변경도 하기가 쉽습니다.


🔝 5. push

Git에서 push는 로컬 저장소에서 작업한 내용을 원격 저장소(remote repository)에 업로드하는 명령어입니다.
push를 통해 로컬에서 작성한 커밋 기록이 원격 저장소에 반영되며, 협업하는 다른 사람들이 이를 확인하거나 작업을 이어받을 수 있습니다.

addcommit단계를 지나고나면
GitHub Desktop에서 상단의 맨우측에 push버튼이 활성화 됩니다.
이때의 push버튼이 local에서 Origin으로 commit내역을 보내주는 버튼입니다.

커밋 내역이 없으면 Fetch origin 버튼이 활성화되어있습니다.


🙏 6. PR/issue

GitHub에서 PR(Pull Request)코드 변경 사항을 검토하고 병합(Merge)을 요청하는 기능입니다.

origin으로 들어가서 Pull requests 탭으로 들어가면 새로운 PR을 만들 수 있습니다.
초록색의 New pull request버튼을 누르면 새로운 PR을 만들 수 있으며
origin의 어떤 브랜치에서 upstream의 어떤 브랜치로 PR을 요청하는지를 선택할 수 있습니다.

이슈도 PR에서 연동할 수 있습니다.
이슈는 백로그에 작성했던 내용으로 작성했고 PR에서 #을 입력하면 이전 PR이나 이슈도 선택도 할 수 있습니다.

PR에는 ??명이 리뷰를 해야지 merge할 수 있는 기능이 있습니다.
PR을 요청한 후에는 동료가 특정 부분에서 토론을 열 수 있으며 해결이 되면 닫을 수도 있습니다.


⤵️ 7. 동기화

동기화(동기화, Synchronization)는 데이터나 상태를 여러 위치에서 동일하게 유지하는 작업을 의미합니다.
Git에서는 로컬 저장소원격 저장소 간에 데이터와 변경 사항을 일치시키는 과정에서 사용됩니다.

본인이 올린 PR에서 merge가 된 상황일 때는 동기화 과정이 필요 없습니다.
팀원이 올린 PR에서 merge가 되었을 때는 동기화를 해야합니다.

동기화를 하기 위해서는 로컬에서 upstream remote repository를 등록해줘야 합니다.
현재 upstream에서 forkorigin은 이미 local로 clone한 상태입니다.

upstream 등록

// 1. main 브랜치로 이동
git checkout main

// 2. 연결된 리모트 저장소 확인
git remote -v

// 2. 의 출력
origin	https://github.com/snughnu/Popcorn-iOS.git (fetch)
origin	https://github.com/snughnu/Popcorn-iOS.git (push)

// 3. upstream저장소를 upstream으로 등록
git remote add upstream https://github.com/GDSC-Popcorn/Popcorn-iOS.git

// 4. 연결된 리모트 저장소 확인
git remote -v

// 4. 의 출력
origin	https://github.com/snughnu/Popcorn-iOS.git (fetch)
origin	https://github.com/snughnu/Popcorn-iOS.git (push)
upstream	https://github.com/GDSC-Popcorn/Popcorn-iOS.git (fetch)
upstream	https://github.com/GDSC-Popcorn/Popcorn-iOS.git (push)

동기화

// 1. 터미널에서 로컬 레포로 이동
cd <로컬 git 경로>

// 2. 원격 저장소 확인
git remote -v

// 2. 의 출력
origin	https://github.com/snughnu/Popcorn-iOS.git (fetch)
origin	https://github.com/snughnu/Popcorn-iOS.git (push)
upstream	https://github.com/GDSC-Popcorn/Popcorn-iOS.git (fetch)
upstream	https://github.com/GDSC-Popcorn/Popcorn-iOS.git (push)

// 3. develop 브랜치로 이동 (merge된 브랜치)
git checkout develop

// 4. upstream의 변경사항들을 develop에 동기화
git pull upstream develop

오류가 난다면

현재 브랜치와 원격 브랜치가 서로 다른 커밋 히스토리를 가지고 있어서 오류가 발생할 수 있습니다.
오류의 내용은 어떻게 merge할지 방식을 정해달라는 내용입니다.
(merge, rebase, fast-foward)

merge 방식

git config pull.rebase false
git pull upstream develop

또는

git merge —no-ff upstream/develop
  • 기존처럼 merge commit이 생기며
  • 협업에서 흔히 쓰는 방식이라고 합니다.

rebase 방식

git config pull.rebase true
git pull upstream develop
  • 내 로컬 커밋을 upstream 커밋 뒤에 재배치 하며
  • 히스토리가 직선처럼 깔끔해집니다.
  • 협업에서는 충돌 해결을 잘 해야합니다.

fast-foward방식

git config pull.ff only
git pull upstream develop
  • 히스토리 뒤에 붙일 수 있을 때만 pull이 허용됩니다.
  • 로컬 브랜치가 upstream보다 앞서 있으면 pull이 실패합니다.
  • 안전하지만 상황에 따라 너무 제한적입니다.
profile
기죽지않기

0개의 댓글