본문 바로가기

Git

Git 기초

Git


Git은 버전을 관리해주는 소프트웨어

Version


버전이란 유의미한 변화(기능 추가 등)가 결과물로 나온 것이다.
변수명 수정 등의 작은 변화는 유의미하다고 할 수 없다.

버전 관리


1. 버전을 비교해줌으로써 변경 사항을 알 수 있다.
2. 이전 버전으로 되돌릴 수 있다.
3. 여러 명의 코드를 쉽게 나누고 합치며 개발할 수 있다.
4. 더 중요한 버전들을 분류할 수 있다.

5. 버전으로 등록하지 않은 파일들을 임시 보관할 수 있다.

6. ...


이러한 Git을 이용하면 저장소에 버전들을 기록해 필요할 때 참고하거나, 되돌릴 수 있어 개발 생산성이 높아질 것이다.

공간


Git에는 3개의 공간이 있다.

1. 작업 디렉토리(Working Directory)
2. 스테이지(Staging Area)
3. 저장소

 

작업 디렉토리(Working Directory)는 버전 관리의 대상이 위치하는 공간으로 프로젝트 폴더라고 생각하면 된다.
스테이지(Staging area)는 다음 버전 후보가 올라오는 공간, 저장소는 버전이 저장되는 공간(.git)이다.

즉, 버전은 작업 디렉토리에서 버전으로 만들고 싶은 파일들만 스테이지로 올리고, 스테이지에서 저장소로 옮김으로써 비로소 버전이 만들어지고 관리되는 것이다.  (스테이지에 올라오지 않은 파일들은 당연히 버전이 될 수 없다.)


이렇게 두 번의 작업을 거치면 테스트용 파일과 같은 불필요한 자원들은 걸러주고, 여러 파일들을 한번에 묶어서 버전으로 만들 수 있다.

 


 

저장소 만들기


1. 버전관리를 하지 않는 로컬 디렉토리 하나를 선택해 Git 저장소로 만든다.

아래 명령어를 실행하면, .git이라는 폴더를 만든다.

 

git init

 

2. 다른 곳에서 Git 저장소를 Clone 한다.

아래 명령어를 실행하면, "libjit2"라는 디렉토리를 만들고 그 밑에 .git 디렉토리를 만든다.
그리고 저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 Checkout 해 놓는다.
처음 저장소를 Clone하면, 모든 파일이 Tracked UnModifed 파일이다.

 

git clone https://github.com/libgit2/libgit2
다른 이름으로 Clone할 수 있다.
위 명령어를 실행하면, "mylibgit"라는 디렉토리를 만든다.

 

git clone https://github.com/libgit2/libgit2 mylibgit

버전 만들기


버전을 만드려면, 관련 파일들을 작업 디렉토리에서 스테이지로 스테이지에서 저장소로 옮기는 작업을 직접 해줘야 한다.

1) Add


버전이 될 파일들을 작업 디렉터리에서 스테이지로 옮기는 작업을 말한다.

 

명령어

git add [파일경로/]파일명

2) Commit


스테이지에서 저장소로 옮겨 버전을 만드는 작업을 말한다.

 

commit은 action이기도 하지만 version과 유사한 의미를 가지고 있다. version이 조금 더 큰 개념이다.

실무에서 1일 1 commit 이상 정도 하며 너무 많은 commit은 하지 않는다.

 

명령어

git commit -m "커밋 메시지"

커밋 메시지(Commit message)


버전에 대한 설명으로 변경사항을 기억하기 위해 작성해줘야 한다.

자세할수록 기억하기 좋다.

 

2. 작업 되돌리기 


이전 버전으로 되돌아갈 수 있는 작업이다.

1) Revert


돌아가고 싶은 버전의 뒤 버전들을 보존해주고, 이후에 해당 버전을 새로운 버전으로 만들어준다.

이때, 해당 버전에 등록된 파일들은 없어진다.

 

지금까지 만든 버전은 손대지 않고, 되돌리고 싶을 때 사용한다.

 

명령어

git revert 커밋ID

2) Reset


돌아가고 싶은 버전의 뒤 버전들은 없애준다.

 

3가지 방법이 있다.

 

1. soft reset

2. mixed reset

3. hard reset

 

soft reset은 뒷 버전들을 없애주는데 commit 실행 전으로 돌아가준다. 

mixed reset은 뒷 버전들을 없애주는데 add 실행 전으로 돌아가준다. 

hard reset은 다음 버전들과 마지막 버전의 파일들까지 아예 없애준다.

 

soft와 mixed의 경우 뒷 버전들은 없어지지만 마지막 버전에 있는 파일들은 staging area 혹은 working directory에 남아 있다. soft와 mixed는 버전들만 없애는 것이며, 마지막 버전이 만들어지기 전까지의 작업은 당연히 남아있다.

 

실무에선 hard reset을 하고 하기 전 작업들을 dump(복사 + 붙여넣기) 해주는 것이 Git을 깔끔하게 이용하는 방법이다. soft, mixed는 코드 충돌 우려 때문에 잘 사용하지 않는다.

 

명령어

git reset --hard/--mixed/--soft 커밋ID

커밋 Id와 Hash


커밋 Id는 각 버전에 지칭되 고유한 정보(ID)이다. 

 

너무 길어서, 앞부분 일부(7자리)를 잘라 사용하기도 하는데 이것이 Hash이다.

 

3. 중요한 버전 분류하기


태그(Tag)


여러 버전 중에서 더 유의미한 커밋을 지칭하기 위한 것이다. 실무에선 release로 사용할 수 있다.

 

더 유의미한 커밋을 분류하기 위함인데.. 남용하면 의미 없다.

 

명령어

git tag [-a] 버전이름 [해시] [-m]

 

4. 작업 임시 저장하기


스태시(Stash)

버전으로 만들지 않은 파일을 stash(임시 저장)하고 다시 불러올 수 있다.

충돌이 나지 않기 위해선 하나의 스태시만 이용하거나, 여러 개의 스태시를 만들어놓고 되돌리지 않고 직접 참고하는 방식으로 이용하는 것이다. 후자 방법을 많이 이용한다고 한다.

 

명령어

stash 하는 명령어, staged file을 stash할 수 있다.

 

git stash
stash를 다시 불러오는 명령어, stash를 지정해주지 않으면 가장 최근 stash를 불러온다.

 

git stash apply [stash@{}]

 

파일 분류


Git 저장소에 있는 파일들의 상태는 다음과 같이 분류된다.

1) Tracked


Git이 알고 있는 파일이며 UnModified, Modified, Staged로 나눠져 있다.

2) UnTracked


Traked 상태가 아닌 나머지 파일들, 스냅샷에도 Staging area에도 포함되지 않은 파일이다.

 

Working directory에는 Staged 상태를 제외한 Untracked, Modified, Unmodified 상태의 파일들이 저장되어 있다. Staging area에는 Modified, Staged 상태의 파일들이 저장되어 있다.

 

파일 변경 확인하기


작업 디렉토리에 있는 파일들의 상태를 확인할 수 있다.

 

명령어

git status
Changes to be commited: Tracked & Staged
Changes not stage of commit: Tracked & Unstaged

Staged된 파일을 수정하면 해당 파일은 Staged 상태에 있으면서 Unstaged 상태에 있다. Commit은 마지막으로 git add 명령을 실행했을 때의 버전이 Commit되기 때문에 파일을 수정하면 git add 명령을 다시 실행해서 최신 버전을 Staged 상태로 만들어야 한다.

 

git status -s
왼쪽은 Staging Area에서의 상태
오른쪽은 Working Tree에서의 상태

 

 

 

'Git' 카테고리의 다른 글

Git으로 협업하기  (0) 2023.07.07