포스트

Git

Git

Git(23.08.28)

버전 관리

  • 로컬 버전 관리 시스템
    • 파일 다른 이름으로 저장
    • 간단 하지만 실수 발생
    • DB를 활용해서 변경 사항을 기록하는 로컬 시트템 제작
  • 중앙집중식 버전 관리 시스템
    • 파일을 저장하는 하나의 서버
    • 서버를 사용하는 다수의 클라이언트(서버 접속하는 프로그램)
    • 누가 무엇을 하는지 추적 가능
    • 중앙 서버에 의존하는 형태 → 중앙 서버 다운시 치명적
    • 서버 다운시 모든 사람이 업무 중단
  • 분산 버전 관리 시스템
    • 클라이언트가 저장소를 통쨰로 복사함
    • 서버에 비의존적임 (서버가 이상이더라도 로컬에 저장)

git의 역사

  • 리눅스가 사용하던 DVCS가 유료화 됨으로써 자체 도구 제작
  • 리눅스가 분산 저장소 설계 함
    • 빠른속도
    • 단순 구조
    • 비 선형적 개발
    • 완벽한 분산
  • 2005년 Git 탄생

git의 특성

  • 대부분의 명령은 로컬에서 실행
    • 서버와 통신 비용이 없기에 빠른 조회 가능
  • 각 파일의 변화를 시간순으로 관리
    • 델타를 저장 → 버전에 따른 변경 사항을 저장
    • 특정 버전으로 돌아갈떈 속도가 느림
  • git은 스냅샷으로 저장
    • 파일이 달라지지 않으면 이전 버전의 링크만 저장
    • 특정 버전으로 되돌아갈때 속도가 빠름
  • git은 무결성 하다
    • 데이터를 저장하기전 체크섬을 구하고 해당 체크 섬으로 데이터 관리
    • SHA-1 해시 사용 → 고유한 값을 가지기에 해당 파일의 해시로 저장
  • git의 상태
    • Committed → DB에 안전하게 저장
    • Modified → 파일만 수정 아직 커밋 되지 않음
    • Staged → 곧 커밍 할거다.
  • 깃은 어떻게 데이터를 저장하는가?
    • 커밋이 깃은 커밋 개체를 생성
    • 이런식으로 파일 저장 tree → blob → …
    • 결국 커밋을 가리키는 포인터 → 브랜치

브랜치와 머지

  • branch → 가상의 작업 공간
  • 이슈 발생시 새 브랜치를 하나 생성해 작업 진행 → hotfix 발생시 브랜치 새로 생성해 수정하고 머지

git-flow

  • feature 브랜치
    • 특정 기능 하나에 대한 브랜치 그리고 개발 완료되며 다시 머지
    • fast-forward 사용하지 않음, 기능별로 개발한 커밋 분류하기 위해서
    • prefix/
  • release 브랜치
    • 배포를 위한 브랜치
    • develop 브랜치 부터 시작됨
    • 소소한 버그 픽스
    • release 준비 완료시 develop / master 에 머지
    • 이 브랜치를 통해 develop은 바로 다음 기능
    • release/
  • hotfix 브랜치
    • master로 부터
    • 긴급한 이슈 해결
    • release와 비슷함 ( 출발 브랜치의 차이 )
    • hotfix와 상관 없다면 develop은 개발 계속함
    • hotfix/

원격 저장소

  • main 과 origin/main은 다르다

  • 원격 저장소의 변경사항을 내려 받는것을 fetch라고 함
  • fetch와 머지는 다르다.

  • pull = fetch + 머지
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.