본문 바로가기

CS

Git에 대한 모든 것

버전관리 시스템(Version Control System)

파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 불러올 수 있는 시스템

 

VCS의 종류

  • 로컬 버전관리 (Local VCS) : 간단히 데이터베이스를 사용해서 파일의 변경 정보를 관리하는 시스템
    • RCS(Revision control system)
  • 중앙집중식 버전관리 (CVCS) : 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용하는 방식
    • CVS, Subversion, Perforce
  • 분산 버전관리 시스템 (DVCS)
    • 단순히 파일의 마지막 스냅샷을 Checkout 하지 않고 저장소를 히스토리와 더불어 전부 복제
    • 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있고 클라이언트 중에서 아무거나 골라도 서버를 복원 가능
    • 많은 수의 리모트 저장소를 가질 수 있어서 다양한 방법으로 협업 가능
    • Git, Mecurial, Bazaar, Darcs

SHA (Secure Hash Algorithm)

SHA는 입력 데이터를 고정된 크기의 고유한 해시 값으로 변환하는 해시 함수이며 Git에서는 주로 SHA-1을 사용함

SHA-1 해시는 160비트(20바이트) 길이의 해시 값을 생성 = 40자리 16진수 문자열로 표현

 

사용 용도

  1. 커밋 식별: 각 커밋은 고유한 SHA-1 해시로 식별됨. 이 해시는 커밋의 내용, 작성자, 작성 시간, 부모 커밋 등의 정보를 기반으로 생성되므로, 동일한 커밋이 생성될 가능성은 거의 없음
  2. 객체 식별: Git은 커밋 외에도 블롭(blob), 트리(tree), 태그(tag) 등의 객체를 SHA-1 해시로 식별
  3. 변경 추적: 파일의 변경 사항을 추적하고 관리하는 데 사용됨. 파일 내용이 변경되면 새로운 SHA-1 해시가 생성됨

 

SHA-1 해시의 특성

  1. 고유성: 해시 충돌이 일어날 가능성이 매우 낮아, 각 커밋과 객체를 고유하게 식별할 수 있음
  2. 고정 크기: 입력 데이터의 크기에 관계없이 항상 160비트의 해시 값을 생성
  3. 변경 감지: 데이터가 조금이라도 변경되면 완전히 다른 해시 값을 생성하므로, 변경 사항을 쉽게 감지 가능

git의 파일 상태

 

  • untracked : 처음 추가된 파일, git의 추적을 받지 않음
  • tracked : git의 추적을 받는 파일들 
    • unmodified : 수정되지 않은 상태의 파일
    • modified : 수정된 상태의 파일 + add되지 않음
    • staged : add된 파일

commit 시에 다시 모든 파일이 unmodified 상태로 돌아옴

 

 

Git 개체 (Objects)

.git파일의 정체를 알 수 있는 글

https://git-scm.com/book/ko/v2/Git의-내부-Git-개체

 

Git - Git 개체

여러분이 사용하는 쉘이 어떤 것인가에 따라 master^{tree} 표현식이 오류를 일으킬 수도 있다. Windows 에서 CMD는 ^ 문자는 이스케이프 기호로 사용한다. ^ 문자를 제대로 사용하려면 git cat-file -p master

git-scm.com

 

'CS' 카테고리의 다른 글

HTTP Request와 Response  (0) 2024.08.06
DBMS, SQL, 트랜잭션  (0) 2024.08.05
URL  (0) 2024.07.23
[객체지향 프로그래밍] 객체지향  (0) 2024.07.22
[컴파일러] 파싱(parsing)  (0) 2024.07.17