본문 바로가기
엘리스 AI 트랙 4기/elice AI track

[1주차] git

by _sweep 2022. 1. 17.

1월 15일 자 학습 내용 정리입니다.

 

 

 git

git은 버전 관리 도구이다.

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

버전 관리 시스템(VCS, Version Control System)을 사용하면 각 파일을 이전 상태로 되돌릴 수 있고 파일 단위가 아닌 프로젝트 전체를 이전 상태로 되돌리는 것도 가능하다.

또한 시간에 따른 수정 내용을 비교해 볼 수 있고 발생한 에러를 추적할 수도 있으며 잘못된 파일을 복구시킬 수도 있다.

 

git은 협업 도구이다.

git은 효율적인 협업이 가능하도록 한다.

효율적인 협업이 가능한 이유는 git의 특징에서 자세히 알 수 있다.

 

git의 특징은 다음과 같다.

 

1. 가지치기와 병합이 가능하다.

여러 작업이 존재할 때 사용자는 가지치기를 이용해 메인 코드에서 독립성을 유지한 채 다른 개발을 진행할 수 있다.

가지치기로 분산된 곳에서 개발을 하고 메인 코드에 병합, 배포가 가능하며 이를 통해 기능 단위, 일 단위의 작업이 가능해진다.

 

2. 가볍고 빠르다.

git은 대부분의 작업이 서버와의 통신 없이 로컬에서 진행된다.

git과 같은 버전 관리 시스템에는 SVN이 있다.

 

SVN(SubVersion)은 중앙 시스템에 프로젝트, 파일들이 있고 여기에 여러 개발자들이 접속해 코드를 공유한다.

따라서 소스코드를 변경하기 위해서는 중앙 시스템에 접근하기 위한 네트워크가 항상 필요하다.

 

git은 각자의 프로젝트 파일이 각자의 로컬 영역에 존재한다.

각자 로컬 영역에서 소스코드를 변경, 추가한 뒤 다른 사람과 공유를 할 때만 중앙 서비스에 접근해 작업한 코드를 서버에 올리기만 하면 된다.

따라서 필요할 때만 네트워크를 사용한다.

 

SVN과 git의 가장 큰 차이점은 데이터를 다루는 방법이다.

SVN과 같은 보통의 CVS들은 각 파일의 변화를 시간 순으로 관리하면서 파일들의 집합을 관리한다.

그러나 git은 각각의 파일을 파일보다 작은 스냅샷의 형태로 저장한다.

특정 파일을 수정했다고 가정했을 때 이 파일을 커밋하게 되면 git은 이 파일의 새로운 스냅샷을 만들고 달라지지 않은파일들에 대해서는 새로 저장하지 않는다.

 

이러한 이유로 인해 git은 다른 CVS보다 가볍고 빠르다.

 

3. 분산 작업에 효율적이다.

각각의 사용자들은 복사된 프로젝트를 개인의 로컬 영역에서 동시에 작업을 진행할 수 있다.

각 사용자들이 프로젝트의 모든 소스코드를 가지고 있기 때문에 개발자들 사이에서 어떤 문제가 생겨도 개발에는 소스코드에 접근하지 못하는 등의 문제는 없다.

 

4. 데이터의 무결성을 보장한다.

git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.

SHA-1 해시를 이용하여 체크섬을 만드는데 만들어진 체크섬은 16진수의 문자열이다.

git은 파일을 이러한 해시로 저장하고 이를 통해 파일을 식별한다.

따라서 이 해시값이 동일하다는 것은 파일 또는 소스코드의 구성이 완벽하게 같다는 뜻이다.

즉, git은 체크섬을 통해 해당 파일에 대한 기록을 남기고 이를 이용해 버전 관리가 가능하도록 한다.

 

5. 준비 영역을 가진다.

git은 위와 같이 세 가지의 영역을 가진다.

 

이때 git이 하는 일은 기본적으로 다음과 같다.

 

  1. Working Directory에서 파일을 수정한다.
  2. 수정이 끝난 파일은 Staging Area에 올려 스냅샷을 만든다.
  3. Staging Area에 있는 파일들을 git directory에 영구적으로 저장한다.

Working Directory에서 바로 git directory로 파일을 저장하는 것이 아니라 준비 영역을 거침으로써 파일을 잘못 올린다든가 커밋 메세지를 잘못 적는 등의 실수를 줄일 수 있다.

 

6. 오픈소스이다.

오픈소스란 소스코드를 공개한 상태로 누구나 소스코드에 접근할 수 있다.

따라서 인터넷 상의 누구나 해당 소스코드를 볼 수 있으며 수정, 첨삭 후 배포가 가능하다.

 

 

 파일 영역의 life cycle

 

Working Directory

프로젝트의 특정 버전을 가져온 것이다.

같은 디스크 안에 있는 .git directory 안에 있는 데이터베이스에서 파일을 가져와 만든다.

쉽게 말하자면 git이 관리하도록 지정되어 있는 해당 프로젝트 폴더를 의미하며 파일을 작업하는 곳이다.

 

Staging Area

Working Directory에서 커밋할 준비가 되어있는 파일에 대한 정보들이 저장되는 곳이다.

.git directory 안에 위치하며 단순한 파일의 형태로 존재한다.

 

.git directory

git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳이다.

다른 컴퓨터에 있는 저장소를 clone하거나 해당 프로젝트에 대해 git repository를 만들었을 때 생성되는 저장 공간이며 프로젝트의 버전을 관리하는데 필요한 모든 정보가 이곳에 담긴다.

 

 

 파일 상태의 life cycle

Working Directory의 모든 파일은 크게 Tracked(관리대상임)와 Untracked(관리대상 아님)으로 나뉜다.

Tracked 파일은 이미 스냅샷에 포함되어 있는 파일을 말한다.

Tracked 파일은 또 Unmodified, Modified, Staged 상태 중 하나에 속하는데 쉽게 말해 Git이 이미 알고 있는 파일이라는 뜻이다.

 

Untracked

Working Directory의 파일 중 스냅샷과 Staging Area에 포함되지 않은 파일을 말한다.

즉, 수정한 이력이 없어 스냅샷이 저장되지 않았고 커밋을 하지 않아 Staging Area에 저장되지 않은 것이다.

따라서 git은 Untracked 상태의 파일을 알 수 없다.

 

Unmodified

파일을 수정하지 않은 상태이다.

Staging Area에 들어간 파일을 git repository에 올리고 나면 해당 파일은 Unmodified 상태가 된다.

따라서 Unmodified 상태의 파일들은 git repository에 올라와 있는 소스코드와 내용이 동일하다.

 

Modified

파일이 수정을 거치면 Modified 상태가 된다.

 

Staged

파일이 Staging Area에 들어가게 되면 Staged 상태가 된다.

Untracked, Unmodified, Modified 상태의 파일을 Staging Area에 올리면 Staged 상태로 전환된다.

 

 

🔍 참조

git https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

 

 

 

 

 

'엘리스 AI 트랙 4기 > elice AI track' 카테고리의 다른 글

[1주차] git 원격 저장소  (0) 2022.01.17
[1주차] git branch  (0) 2022.01.17
[1주차] git 명령어  (0) 2022.01.17
[1주차] 미디어쿼리  (0) 2022.01.13
[1주차] transform, transition, animation  (0) 2022.01.13

댓글