41_git(1)

ryu·2023년 6월 27일
0

버전 관리

버전관리 시스템(형상관리)

  • Configuration Management Systems
  • Versino Control Systems

버전관리를 하는 이유

  • Source Data + History
  • 협업, 작업추적, 복구 등이 가능

Git 등장 배경

기존 방식

  • Source Folder + 실행파일을 버전별로 카피하여 관리
    • '진짜마지막파일', '진짜진짜마지막파일', ...

Local Version Control Systems

  • 내 컴퓨터에서 버전 관리 가능 -> 내 컴퓨터 하드가 날아가면 전체 코드 사라짐
  • 버전은 관리되지만, 협업은 여전히 어려움
  • 그래서 중앙에서 관리해보자!

Centralized Version Control Systems

  • 협업이 가능해짐
  • Commit 하는 순간 배포되어 다수에게 버그 유발 가능(서버로 바로 commit)
  • 인터넷이 안되면 작업이 불가능
  • 자신만의 version history를 가질 수 없음
  • 그래서 개발된..

Distributed Version Control Systems

  • commit 하더라도 개인저장소 내에 적용됨(다른 개발자에게 영향 없음)
  • 원하는 순간에 배포(Push) 가능
  • 오프라인에서도 작업 가능
  • 자신만의 version history를 가짐

버전관리 시스템의 종류

종류

  • CVCS: CVS, SVN, etc
  • DVCS: Mercurial, Git, etc

CVS

  • 1980년대 만들어진 형상관리 시스템
  • commit 중 오류 발생 시 rollback이 되지 않는 등의 문제
  • 이후 SVN으로 대체

SVN

  • 2000년대 만들어졌고 현재까지 두루 사용됨

Git

  • SVN보다 빠른 속도와 많은 기능 지원
  • 현재 많은 기업이 사용 중

기본 용어

Repository

  • 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간
  • Local Repository와 Remote Repository로 구분

Checkout

  • 특정시점이나 Branch의 소스코드로 이동하는 것을 의미
  • Checkout 대상 - Branch, Commit, Tag
  • Checkout 을 통해 과거 여러 시점의 코드로 이동이 가능

Stage

  • 작업할 내용이 올라가는 임시저장영역
  • 이 영역을 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음

Commit

  • 작업할 내용을 Local Repository에 저장하는 과정
  • 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남김
  • commit은 아끼지 말자

Tag

  • 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
  • Tag가 붙은 commit은 commit id (version) 대신 tag name으로 쉽게 check out 가능

Push

  • Local Repository의 내용 중, Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
  • push하는 순간 다른 개발자들도 영향을 받기 때문에 검증되지 않은 코드는 push하지 않도록 함

Pull

  • Remote Repository에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
  • 다른 팀원이 변경하고 Push 한 내용을 Local Repository에 가져올 수 있음
  • Push 과정에서 Conflict(충돌)이 일어나서 Push가 거절된 경우, Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 Conflict를 해결한뒤 다시 Push를 시도 해야 함

Branch

  • 특정 시점(commit 단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
  • 개발의 주축이 되는 branch를 master branch( 혹은 main branch)라고 함
  • 모든 branch는 최종적으로 다시 master branch에 merge(병합)되는 형식으로 진행됨

Merge

  • Branch의 반대 개념으로 하나의 Branch를 다른 Branch와 합치는 과정
  • Merge 되는 두 Branch는 주종관계가 성립
  • Merge되는 과정에서 충돌이 발생하는 경우 Diff를 수정하여 Conflict를 해결한 뒤 Merge를 진행할 수 있음

0개의 댓글