ETC/Git

Git 입문자 안내서 - 00

Jade Choe 2024. 1. 4. 19:15
SMALL

Git이 뭐야?

  • 리눅스의 아버지, 리누스 토발즈가 개발한 분산형 버전 관리 시스템.
  • 쉽게 설명하면 코드의 다양한 버전을 관리할 수 있는 시스템임.
  • 코드뿐만 아니라 그래픽리소스 등 파일의 버전관리도 가능함.

왜 쓰는건데?

협업이 용이하다.

  • 작업자의 작업 공간이 분리되고, 작업 내역을 하나로 합치는 병합 작업이 쉽게 이뤄진다.

변경사항이 기록되어 버전 관리가 용이하다.

  • 개발을 하다보면 이전 버전으로 되돌아가야 하는 경우가 빈번히 생긴다.
    • 어젯밤에 코드를 수정하고 잠에 들었는데 아침에 실행해보니 동작하지 않는다면?
    • 새 기능을 추가했는데 QA에서는 잡히지 않은 치명적인 예외사항(결제오류 등)이 생겼다면?

테스트 코드를 확인하기 쉽다.

  • 테스트 서버에만 적용하고 라이브 서버에는 적용하면 안되는 경우에 사용할 수 있다.
  • 기존 코드를 리팩토링 하거나, 새로운 기능을 구현하는 경우 기존 코드에 영향을 주지 않는다.

누가, 언제, 어떻게 코드를 수정했는지 추적이 가능하다.

  • 물론 그런 일이 있어선 안되겠지만, 누군가 컨펌되지 않은 작업을 했을 때 책임소재를 명확히 따질 수 있다.
  • QA에서 잡히지 않은 예외사항이 발생했을 때 수정/추가된 코드를 비교 분석해 원인을 파악하기 용이하다.

시스템을 빠르게 복구할 수 있다.

  • Git은 버전관리 뿐만 아니라 코드 백업의 역할도 해주기 때문에 서비스가 중단되었을 경우 대체 시스템 구성을 빠르게 진행할 수 있다.
  • PC를 맘 편히 초기화 할 수 있다!

기본개념/용어

Repository

  • 말 그대로 코드 파일 집합들을 모아놓은 저장소이다.
  • 로컬 저장소 (Local Repository)원격 저장소 (Remote Repository)로 구분된다.
  • 로컬 저장소는 각 작업자의 독립적인 작업 공간이다.
    • 로컬 저장소에서 코드를 수정하더라도 원격 저장소에는 영향을 미치지 않는다.

Working Tree

  • 작업 중인 파일의 집합이다.
  • 기존 코드를 수정하거나 새 파일을 생성, 또는 기존 파일을 삭제할 경우 작업 트리로 들어간다.
    • 기본적으로 아래와 같이 구성된다.
      구분 표기 비고
      수정됨 Modified 파일 내용이 git이 갖고있는 버전과 상이한 상태. 커밋할 준비는 되어있지 않음.
      준비 Staged 해당 파일을 커밋할 준비가 되어있는 상태.
      커밋됨 Commited 로컬 저장소에 변경사항을 확정하고 저장한 상태.
    • 새 파일을 추가하거나 기존 저장소의 파일을 추적 목록에서 제외하면 Untracked 상태가 된다.
    • Untracked상태의 파일들은 git add 명령어로 작업 트리에 추가할 수 있다.

Add / Commit / Push / Pull / Fetch

  • Add : 작업 트리에 파일 삭제, 수정 등의 변경사항을 등록하여 Staged 상태로 만든다.
  • Commit : 작업 트리Stage된 파일들을 적용하겠노라고 확정한다.
  • Push : 로컬 저장소의 변경사항을 원격 저장소에 적용한다.
  • Pull : 원격 저장소의 변경사항을 확인하고 변경 내역이 있는 경우 로컬 저장소로 가져와 적용한다.
  • Fetch : 원격 저장소의 변경사항을 확인하지만, 실제 파일을 가져와 적용하지는 않는다.

HEAD

  • 저장소에 최신 버전으로 확정된 상태.
  • 코드를 수정하다가 수정한 파일을 전부 되돌려야 할 경우 별도의 매개변수가 없으면 HEAD로 되돌려준다.
  • 로컬 저장소HEAD원격 저장소HEAD는 다름.
    • 로컬 저장소에서 수정한 내역을 CommitPush하지 않은 경우 원격 저장소에는 반영되지 않았기 때문임.
    • 반대로 원격 저장소의 내용을 Pull 하지 않았을 경우에도 다름
BIG