플젝 대비를 위한 깃 정리

호씨·2024년 11월 21일
3

Git & GitHub 협업 가이드

목차

1. Git 기본 명령어

저장소 생성/복제

# 새 저장소 생성
git init  # 새로운 Git 저장소를 초기화합니다.

# 원격 저장소 복제
git clone [url]  # 원격 저장소의 전체 내용을 로컬로 복사합니다.

기본 작업

# 파일을 스테이징 영역에 추가
git add [파일명]  # 변경된 파일을 다음 커밋에 포함시키기 위해 준비합니다.

# 변경사항 커밋
git commit -m "커밋 메시지"  # 스테이징된 변경사항을 저장소의 히스토리에 기록합니다.

# 원격 저장소에 푸시
git push origin [브랜치명]  # 로컬의 변경사항을 원격 저장소에 업로드합니다.

# 원격 저장소에서 변경사항 가져오기
git pull origin [브랜치명]  # 원격 저장소의 최신 변경사항을 로컬로 가져옵니다.

브랜치 관련

# 브랜치 목록 확인
git branch  # 모든 로컬 브랜치를 보여줍니다.

# 새 브랜치 생성
git branch [브랜치명]  # 현재 커밋을 기준으로 새 브랜치를 만듭니다.

# 브랜치 전환
git checkout [브랜치명]  # 다른 브랜치로 작업 영역을 변경합니다.

# 현재 브랜치에 다른 브랜치 병합
git merge [브랜치명]  # 지정한 브랜치의 변경사항을 현재 브랜치에 통합합니다.

2. GitHub 협업 프로젝트 세팅

A) 저장소 생성 및 설정

  1. GitHub에서 새 저장소(Repository) 생성
    • 프로젝트의 모든 파일과 히스토리를 저장할 공간을 만듭니다.
  2. README.md 파일 생성
    • 프로젝트 설명, 설치 방법, 사용법 등을 문서화합니다.
  3. .gitignore 파일 설정
    • 버전 관리에서 제외할 파일/폴더를 지정합니다.

B) 협업자 초대

  1. 저장소 Settings → Collaborators 메뉴 접근
  2. Add people 기능으로 팀원 초대
    • 이메일 주소나 GitHub 사용자명으로 초대 가능

C) 브랜치 보호 규칙 설정

  1. Settings → Branches → Branch protection rules → Add rule
  2. 보호할 브랜치 패턴 지정 (예: main)
  3. 필요한 보호 규칙 설정
    • 리뷰 필수 여부
    • 테스트 통과 필수 여부

3. 협업 워크플로우 (GitHub Flow)

  1. main 브랜치에서 새 기능 브랜치 생성
    • 기능명을 반영한 브랜치명 사용
  2. 작업 수행 및 커밋
    • 작은 단위로 자주 커밋
  3. Pull Request 생성
    • 작업 내용 설명 포함
  4. 코드 리뷰 및 토론
    • 팀원들의 피드백 반영
  5. main 브랜치에 병합
    • 모든 검토 완료 후 병합

4. 효과적인 협업을 위한 팁

커밋 메시지 규칙

feat: 새로운 기능 추가
- 새로운 기능 추가 시 사용

fix: 버그 수정
- 버그 수정 시 사용

docs: 문서 수정
- 문서 수정/추가 시 사용

style: 코드 포맷팅
- 코드 형식 변경 시 사용

refactor: 코드 리팩토링
- 코드 개선 시 사용

test: 테스트 코드
- 테스트 추가/수정 시 사용

chore: 기타 변경사항
- 기타 모든 변경사항에 사용

이슈 관리

  • 새로운 기능이나 버그는 Issues에 등록
    • 명확한 제목과 설명 작성
    • 관련 스크린샷 첨부
  • 작업 시작 전 Issue 생성
    • 담당자 지정
    • 라벨 추가
  • 관련 Pull Request에 Issue 번호 참조
    • "Fixes #이슈번호" 형식 사용

브랜치 네이밍 규칙

feature/기능명    # 새 기능 개발 시
bugfix/버그명     # 버그 수정 시
hotfix/긴급수정명 # 긴급 수정 시
release/버전     # 릴리스 준비 시

5. 브랜치 보호 규칙 상세 가이드

설정 위치

Repository → Settings → Branches → Branch protection rules → Add rule

주요 보호 설정 옵션

A) Require pull request reviews before merging

  • 병합 전 Pull Request(PR) 리뷰를 필수로 지정
  • 세부 설정:
    • Required approving reviews: 승인이 필요한 리뷰어 수 지정
    • Dismiss stale pull request approvals: 새 커밋 시 기존 승인 무효화
    • Require review from Code Owners: 코드 담당자 리뷰 필수
    • Restrict who can dismiss reviews: 리뷰 거부 권한 제한

B) Require status checks to pass before merging

  • CI/CD 등 지정된 검사를 통과해야 병합 가능
  • 세부 설정:
    • Require branches to be up to date: 최신 상태 유지 필수
    • Status checks that are required: 필수 검사 항목 선택

C) 추가 보호 옵션

  • Require signed commits: GPG 서명 커밋 필수
  • Require linear history: 선형 커밋 히스토리 유지
  • Include administrators: 관리자도 규칙 적용
  • Restrict who can push: 푸시 권한 제한

권장 설정 예시

1. Branch name pattern: main

2. Protect matching branches:
   ✓ Require pull request reviews before merging
      - Required approving reviews: 1
      - Dismiss stale pull request approvals when new commits are pushed
      
   ✓ Require status checks to pass before merging
      - Require branches to be up to date before merging
      
   ✓ Require linear history
   
   ✓ Include administrators

CODEOWNERS 파일 설정

# .github/CODEOWNERS 파일 예시
*.js                    @frontend-team    # 자바스크립트 파일 담당
/backend/               @backend-team     # 백엔드 코드 담당
*.test.js               @testing-team     # 테스트 코드 담당
/docs/                  @technical-writers # 문서 담당

6. Git/GitHub 주요 용어 세부 설명

기본 개념

  • Repository (저장소)

    • 프로젝트의 모든 파일과 히스토리를 보관하는 공간
    • Local Repository: 개발자의 컴퓨터에 있는 저장소
    • Remote Repository: GitHub 서버에 있는 저장소
  • Branch (브랜치)

    • 독립적인 작업 공간
    • main/master: 주요 브랜치
    • feature: 기능 개발용 브랜치
    • hotfix: 긴급 수정용 브랜치

Git 명령어 설명

  • init: 새 Git 저장소 시작
  • clone: 원격 저장소 복사
  • add: 변경 파일 스테이징
  • commit: 변경사항 저장
  • push: 변경사항 업로드
  • pull: 변경사항 다운로드
  • merge: 브랜치 통합

GitHub 관련 용어

  • Pull Request (PR)

    • 코드 변경 검토 요청
    • Review: 코드 검토
    • Approve: 변경 승인
    • Request changes: 수정 요청
    • Comment: 의견 제시
  • Issue

    • 작업 항목 관리
    • Label: 분류 태그
    • Milestone: 작업 그룹
    • Assignee: 담당자

협업 관련 용어

  • Collaborator: 협업 참여자
  • Organization: 팀 계정
  • Team: 조직 내 그룹
  • Dependency: 외부 라이브러리
  • CI/CD: 자동화된 빌드/배포

고급 기능 용어

  • Fork: 저장소 복사본 생성
  • Stash: 임시 저장
  • Cherry-pick: 특정 커밋 선택
  • Rebase: 브랜치 기준점 변경
  • Squash: 커밋 통합

브랜치 관련 용어

main (또는 master) 브랜치

  • 제품이 출시된 상태의 코드를 보관하는 브랜치
  • 앱스토어에 올라가있는 버전과 동일한 코드가 있어야 함
  • 직접적인 커밋은 금지되며, 항상 안정적인 상태를 유지
  • 사용자가 실제로 사용 중인 버전의 코드

develop 브랜치

  • 다음 버전 출시를 위해 개발 중인 코드를 보관하는 브랜치
  • 현재 개발 중인 기능들이 모이는 곳
  • 언제든 테스트가 가능한 상태로 유지
  • 새로운 기능 개발은 이 브랜치에서 시작됨

feature 브랜치

  • 새로운 기능을 개발할 때 사용하는 브랜치
  • develop 브랜치에서 분기하여 생성
  • 예시:
    • feature/login: 로그인 기능 개발
    • feature/push: 푸시 알림 기능 개발
    • feature/profile: 프로필 화면 개발
  • 기능 개발이 완료되면 develop 브랜치로 병합

release 브랜치

  • 앱스토어 출시를 준비하는 브랜치
  • 버전 번호 수정, 최종 버그 수정 등을 진행
  • 예시: release/1.0.0, release/2.1.0
  • 출시 준비가 완료되면 main과 develop 브랜치 모두에 병합

hotfix 브랜치

  • 출시된 버전에서 발견된 긴급한 버그를 수정하는 브랜치
  • main 브랜치에서 직접 분기
  • 예시: hotfix/crash-fix, hotfix/login-error
  • 수정 완료 후 main과 develop 브랜치에 모두 병합

커밋 관련 용어

[Feat]

  • 새로운 기능 추가를 의미
  • 예시: "[Feat] 카카오 로그인 구현"
  • 사용자에게 새로운 가치를 제공하는 모든 개발 작업

[Fix]

  • 버그 수정을 의미
  • 예시: "[Fix] 로그인 실패 시 앱 크래시 수정"
  • 기존 기능의 오작동을 바로잡는 작업

[Design]

  • UI 디자인 변경 사항
  • 예시: "[Design] 로그인 화면 UI 개선"
  • 시각적 요소의 모든 변경 사항

[Style]

  • 코드 형식 변경
  • 예시: "[Style] 들여쓰기 수정"
  • 기능에 영향을 주지 않는 코드 스타일 변경

[Refactor]

  • 코드 개선 작업
  • 예시: "[Refactor] 로그인 모듈 구조 개선"
  • 기능은 같지만 코드 구조를 개선하는 작업

[Test]

  • 테스트 코드 관련 작업
  • 예시: "[Test] 로그인 실패 케이스 테스트 추가"
  • 테스트 추가, 수정, 삭제

프로젝트 관리 용어

PR (Pull Request)

  • 코드 변경사항을 병합해달라는 요청
  • 포함 내용:
    • 변경사항 설명
    • 테스트 결과
    • 스크린샷
    • 리뷰어 지정

코드 리뷰

  • 다른 개발자의 코드를 검토하는 과정
  • 주요 체크 포인트:
    • 코드 품질
    • 버그 가능성
    • 성능 이슈
    • 코딩 컨벤션

CI/CD

  • CI (Continuous Integration): 지속적 통합

    • 코드 변경사항을 자동으로 빌드하고 테스트
    • 예: GitHub Actions로 PR 시 자동 빌드/테스트
  • CD (Continuous Deployment): 지속적 배포

    • 빌드된 앱을 자동으로 배포
    • 예: Fastlane으로 TestFlight 자동 배포

Git Tag

  • 특정 커밋에 버전 정보를 붙이는 것
  • 예시:
    git tag v1.0.0  # 태그 생성
    git push origin v1.0.0  # 태그 푸시

릴리즈 노트

  • 버전별 변경사항을 정리한 문서
  • 포함 내용:
    • 새로운 기능
    • 버그 수정
    • 성능 개선
    • 주의사항

gitGraph
commit id: "Initial commit"
branch develop
checkout develop
commit id: "프로젝트 초기 세팅"

branch feature/login
checkout feature/login
commit id: "로그인 UI 구현"
commit id: "로그인 로직 구현"
checkout develop
merge feature/login

branch feature/profile
checkout feature/profile
commit id: "프로필 UI 구현"
commit id: "프로필 수정 기능"
checkout develop
merge feature/profile

branch release/1.0.0
checkout release/1.0.0
commit id: "버전 1.0.0 준비"
commit id: "버그 수정"
checkout main
merge release/1.0.0 tag: "v1.0.0"
checkout develop
merge release/1.0.0

branch hotfix/login-crash
checkout hotfix/login-crash
commit id: "로그인 크래시 수정"
checkout main
merge hotfix/login-crash tag: "v1.0.1"
checkout develop
merge hotfix/login-crash

branch feature/push
checkout feature/push
commit id: "푸시 알림 구현"
checkout develop
merge feature/push
profile
이것저것 많이 해보고싶은 사람

0개의 댓글