Git 공부

2021-09-16 Git 기본 정리 (+VCS)

콘요맘떼 2021. 9. 17. 01:43

1. 버전 관리 시스템(VCS : Version Control System)

- 파일 변화를 시간에 따라 기록했다가 특정 시점의 버전을 다시 꺼내올 수 있는 시스템.

- 파일의 상태를 되돌리거나, 수정 내용을 비교하고 이슈를 추적할 수 있게 해준다.

- 주로 소프트웨어 개발에서 코드 관리에 사용되지만 텍스트, 이미지 등 다양한 종류의 파일을 관리하기 위해 사용 가능

- VCS 이전에는 각 버전의 파일들을 모두 저장하는 방법밖에 없었음.

 

(1) 로컬 버전 관리 시스템

- 로컬 환경에 간단한 DB를 사용해서 파일의 변경 정보 관리.

 

(2) 중앙 집중식 버전 관리 시스템 (CVCS : Centralized Version Control System)

- 다른 개발자와 함께 작업하는 경우를 위해서 등장.

- 파일을 관리하는 서버가 별도로 있고 업데이트시 서버에 즉각적으로 동기화되는 시스템.

- 서버에 문제가 발생하거나 오프라인의 환경에서 모든 개발자가 일을 할 수 없는 문제 발생.

 

(3) 분산 버전 관리 시스템 (DVCS : Distributed Version Control System)

- 서버에만 히스토리 정보가 있는 것이 아니라 모든 개발자가 동일한 히스토리 정보를 가지고 있는 시스템.

- 서버에 문제가 생기거나 오프라인이 되어도 서로의 히스토리를 통해 계속 업무를 진행할 수 있다.

- 서버는 회사 내에서만 사용 가능한 Private 서버일 수도, 깃허브와 같은 Cloud 서버일 수도 있다.

- Git, Mecurial, Darcs 등이 속한다.

 

 

2. 깃 (Git)

- 컴퓨터 파일의 변경사항을 지속적으로 추적해주는 분산 버전 관리 시스템(DVCS)이다. 

- 기존의 VCS들은 Delta-Based Version Control이었던 반면 깃은 스냅샷으로 버전 데이터를 관리한다.

  (1) 자유롭고 빠른 버전 및 브랜치 이동이 가능

  (2) 변경사항이 없는 파일의 경우 서로 링크되어 있기 때문에 스냅샷은 무겁지 않다

- 쉽고 빠른 branching/merging이 가능하다. (협업에 유리)

- 로컬에서도 이미 모든 데이터를 가지고 있기 때문에 깃은 대부분의 작업을 로컬에서 진행한다. (장점)

- 깃은 모든 데이터를 오브젝트로 저장한다. (오브젝트 파일은 .git/object에 각각의 파일로 저장되며 SHA-1알고리즘을 통해 중복되지 않는 해시로 이름이 붙여진다.)

  (1) 블롭 : 파일에 대응

  (2) 트리 : 디렉토리에 대응, 하위 항목으로 Blob이나 다른 트리 등을 여러 개 가질 수 있음

  (3) 커밋 : 스냅샷을 누가, 언제, 왜 저장했는지 기록

  (4) 태그 : 커밋을 알아보기 쉽도록 이름을 붙이는 것

 

- 깃에서 관리하는 파일의 상태

  (1) committed : 수정된 파일이 안전하게 깃 디비에 저장된 상태

  (2) staged : 수정된 파일이 다음 커밋에 포함될 내역으로 표시된 상태

  (3) modified : 변경되었지만 아직 다음 커밋에는 포함되지 않은 상태 (커멧 전에 staged 상태로 변경됨, 만약 변경되지 않으면 작업한 내용 날라감)

 

깃 시스템에서 파일의 사이클

 

 

※ Delta-Based Version Control

어떤 파일들이 있는지와 각 시점 파일들의 변경 사항만을 기억한다.

버전을 변경할 때 변경사항들을 계산하는 시간이 많이 소모된다는 단점이 있다.

[Delta-Based Version Control]                                                                    [Git(Snapshot)]        

 

 

 

여담

첫 포트폴리오를 만들었다! 클론 프로젝트들을 제외하고 적으려니까 프로젝트가 생각보다 별로 없었다. 빨리 맛집 어플 만들고 싶은데 할 게 정말 많다. (막학기 19학점은 사람이 할 게 못 된다.)

https://www.notion.so/Donghwan-Yu-25a70f261de14f59a9d99f0bb9f03e19