본문 바로가기

Dev/TOOLS 도구

[Git&GitHub] Git & GitHub 관련 개념 총정리

728x90
반응형

Git이란?

  • 여러 사람이 함께 개발을 할 때, 수정된 내역을 공유하고 버전을 관리하며 개발의 효율성을 높이기 위한 도구!
  • 즉, 소프트웨어 버전 관리 시스템(VCS, Version Control System)이라고 할 수 있음
  • 단, 작은 단위의 개발보다는 매우 크고 복잡한 프로젝트를 개발할 때 더 유용함

 

 

Git server와 Git Client

Git server (클라이언트에게 코드를 받아 모아놓는 곳)

  • Github.com
  • Gitlab
  • Git Bucket
  • 등등 다양한 서비스가 있음

 

Git client (개인/지역 컴퓨터의 로컬 개발환경)

  • git command line Interface (CLI): 명령어를 입력해서 git을 이용할 수 있도록 해주는 rjt
  • VSC Git: VSC 내에 내장되어있는 Git

 

Git Server와 client의 상호작용 단계

  • 내 컴퓨터에서 코드 및 문서 작성 → Github.com에 올라감 → 다른 컴퓨터에 있는 Git Client에 동기화 됨
    • 항상 같은 상태를 유지하게 해줌
    • 협업에 용이함

 

 

필수 용어 정리

  • Repository (원격저장소): github 상에서 우리의 코드 및 프로그램을 담는 프로젝트 저장소!
  • clone: github에 있는 repository의 내용을 내 컴퓨터의 로컬 환경(로컬저장소)로 복제하는 것
  • commit: git을 통해 로컬 저장소에서의 작업 변경 내역을 저장하는 것
    • Commit history를 통해서 지금까지 commit 내역을 확인할 수도 있음

 

  • staged changes: 버전을 분리하여 커밋하기 위한 장바구니 같은 개념 (작업 디렉토리에서 commit할 파일들만 add하여 stage에 담아놓음)

 

 

  • push: commit해온 나의 로컬 저장소에서의 작업 변경내역을 원격저장소 repository에 반영할 수 있도록 업로드하는 것
  • pull: 원격저장소에 있는 내용들을 나의 로컬 저장소로 내려받는 것 (pull == fetch + merge)
    • fetch: 원격 저장소에 있는 내용들을 다운로드 하는 것
    • merge: 다운로드 받은 내용들을 합치는 것

 

  • checkout: 저장소의 head를 바꾸어, commit 내역을 토대로 버전을 되돌리는 등의 작업을 수행하는 명령어
    • 마지막으로 commit한 버전은 master가 가리키고 있음
    • master 버튼 위에 커서를 올려 우클릭 → (Master) Checkout Branch 선택
    • 반드시 master 버튼 위에서 수행해야 함!!! 반! 드! 시!

 

  • Issue: 저장소에 속해있는 게시판 — 프로젝트 진행 과정 중 발생하는 이슈들을 올리고, 담당자나 카테고리 및 작업 대상 코드를 지정하여 작업을 요청하는 글을 올릴 수 있음! (링크)
  • Wiki: 프로젝트와 관련된 매뉴얼이나 다양한 지식들을 구조화하여 업로드하는 곳 (링크)
  • Insight: 이 프로젝트가 어떤 상태인지 확인할 수 있는 곳

 

 

git config를 이용한 최초 설정

  • git config는 commit 시에 누가 어떤 기록을 했는지 파악할 수 있도록, 작업자의 기록을 남기기 위한 세팅
  • gif config에 global 옵션값을 더하여 유저 이름과 이메일을 등록
  • Repository에 따라 최초 한 번만 설정하면 됨 😉
git config -- global user.name username
git config -- global user.email username@gmail.com

 

 

협업을 위한 내용정리

  • branch: 하나의 프로젝트 내에서 다양한 실험적인 작업들을 할 수 있도록 하는 독립적인 작업 영역
    • master branch에 exp branch를 합치는 것 — 실험이 종료됨
    • exp branch에 master branch를 합치는 것 — 실험을 토대로 업데이트
    • 위 둘의 의미는 다르지만, 결과물은 반드시 동일해야 함
    • 한 번에 여러 작업 혹은 확신에 들지 않는 작업을 할 때 주로 사용하는 것을 권장함
    • branch 이름은 주로 ‘feature/기능명’ 과 같이 짓는다고 함

 

  • PULL and PUSH — 항상 원격저장소 내용을 받아온 후에 (PULL),내가 작성한 부분을 원격 저장소에 업로드해야 함에 유의!
  • Conflict: 같은 내용이 서로 다른 로컬 저장소에서 수정되어 충돌하는 것!
    • 예) A가 3번째 코드 줄을 수정 후 commit & push
    • B가 3번째 코드를 수정 후 commit & push → [Fail!] A가 이미 push함으로써 원격저장소 코드가 달라졌기 때문 (Conflict)
    • B가 pull 을 함으로써 원격 저장소의 코드를 다시 받아옴
    • B가 사용하는 vscode 에서 충돌이 난 부분을 알려줌
    • B가 충돌이 난 부분을 수정하여 다시 commit & push
      • 수정방안 1) 원격 저장소의 코드를 수용 — 남이 만든 코드를 반영
      • 수정방안 2) 지역 저장소의 코드를 반영 — 내가 만든 코드를 반영
      • 수정방안 3) 두 가지를 모두 반영하는 경우 — 두 가지를 다 고려하여 수정

 

  • Pull & Request: 브랜치를 나누어 개발한 것을 master branch에 merge하기 위해 관리자에게 검토 요청을 보내기 위함 — 간단한 댓글 기능으로 리뷰도 가능함
    • PR을 하는 과정에서도 conflict가 발생할 수 있음
    • 이 때 conflict를 해결하고, master에 merge하는 것이 중요함
    • 모든 과정을 단번에 이해하려고 하지 말고, 필요할 때 다시 찾아보면서 이해하기

 

 

 

본 내용은 부스트코스의 ‘Github으로 따라하는 버전 관리’ 강의 내용을 토대로 작성되었습니다

 

728x90
반응형