본문 바로가기

git

[Git] 지원하는 기능은 어떤 것이 있을까? - 기초 개념

git은 프로젝트에서 작업물을 관리하기 용이하게 하는 버전 관리 툴이다. 대중적으로 사용되고 있는 git의 기능과 사용법을 알아보자

 

기능

1. 백업

깃은 깃 저장소를 통해서 파일을 추적 관리한다. 깃 저장소를 활용하면 이전 버전으로 손쉽게 되돌아 갈 수 있다.

 

2. 협업 개발 

- 코드 공유 : 깃허브를 활용하여 코드를 공유 가능

- 원격 공유 : 깃허브는 로컬 저장소가 아닌 외부 저장소이다. 원격으로 네트워크만 연결된다면 공유된 코드를 사용 가능

- 병합 : 협업 과정에서 구현할 기능이 다르고 이를 통합하는 과정이 필요하다. 따로 구현된 기능을 하나의 프로젝트로 합칠 때 깃이 유용하다.

- 공개 : 깃 허브를 통해서 코드를 공개할 수 있다.

 

기초적인 깃의 동작 명령어 - 간략 소개

init : 폴더를 깃 저장소로 변경하여 깃을 사용할 준비를 하는 동작

commit : 변경된 코드의 이력을 기록하는 것

branch : 분리된 코드의 이력을 생성

merge : 분리된 이력을 하나의 이력으로 통합

push : 로컬 저장소의 이력을 서버로 전송하는 것

 

깃의 저장공간은 어떤 것이 있나?

1. 워킹 디렉터리(working directory)

"작업을 하는 공간"

로컬 저장소에 접근할 수 있으며, 실제로 파일을 생성하고 수정하는 공간

==> 일반적인 폴더에서 파일을 읽고 쓰는 공간과 유사

 

2. 스테이지(stage)

"임시로 저장하는 공간"

버전 관리를 용이하게 하기 위해서 repository와 working directory간의 직접적인 파일 수정이 아니라 해당 파일의 추적 상태 정보들 활용하여 파일을 관리하기 위한 임시 공간이다.

 

왜 필요한가?

작업 브랜치를 변경하려면 워킹 디렉터리는 깨끗한 상태로 정리되어 있어야 한다. 하지만 갑작스러운 요청으로 다른 브랜치의 작업을 먼저 수행해야하는 상황에서는 기존의 작업물을 임시로 저장하고 다른 브랜치로 이동할 필요가 있다. 만약 임시로 저장할 공간이 없다면 기존의 작업을 하던 수정 내용을 지우고 처음부터 작업해야할 수 있기 때문에 임시로 저장하는 공간이 필요한 것이다.

 

스테시의 저장 영역은 스택구조!! (FIFO : First in First out)

-> 먼저 들어간 것이 먼저 나오는 구조!!

 

3. 레파지토리(repository)

"실제로 저장하여 기록하는 공간"

파일의 변경 이력에 대한 정보를 저장하는 공간으로 핵심 저장소이다.

 

깃에서 사용하는 파일의 상태들

1. untracked 상태

깃에서 관리하지 않은 상태의 파일의 상태이다. 모든 파일은 초기에는 untracked상태로 시작한다.

 

2. tracked 상태

깃에서 관리를 하는 파일의 상태이다. git add 명령을 통해서 untracked 상태의 파일을 tracked 상태로 변경하여 해당 파일을 깃을 통해 관리한다.

 

3. unstage 상태

working directory 영역과 stage 영역에서 차이가 있는 상태

 

4. stage 상태

working directory 영역과 stage 영역에서 차이가 없는 상태

 

5. unmodified 상태

working directory 영역과 repository 영역에서 차이가 없는 상태

 

6. modified 상태

working directory 영역과 repository 영역에서 차이가 있는 상태

 

.gitignore 파일 - 추적관리를 포기하는 파일들의 리스트

최초에 init 이후에 자동으로 생성되지 않음

해당 파일에 깃에서 무시하기를 원하는 파일의 이름을 기제하면 파일을 무시함

저장소 폴더의 최상위 디렉터리에 두어야 함

ex)

#주석 예제

test.c

directory/file.c

 

SHA1 해시 알고리즘 - commit 을 구별하는 방법

커밋을 구별하기 위한 식별번호를 생성하는 알고리즘이다.

커밋 로그 예제

7d6d323773497f349fb83a3c346bf0b9db24df28 -> 이것이 식별 번호

너무 길기 때문에 앞의 7자리만 사용해도 커밋을 구별할 수 있다.

 

HEAD 포인터

- 현재 있는 브랜치에서 가장 최근의 커밋(마지막 커밋)을 가리키는 포인터이다.

- HEAD 포인터를 통해서 손쉽게 최근의 커밋에 접근, 이동이 가능하다.

EX)

HEAD // 현재 커밋

HEAD-1 //현재의 한단계 전

HEAD-5 //현재의 5단계 전

'git' 카테고리의 다른 글

[Git] 깃 명령어 정리  (0) 2021.10.25