Git?

Git은 Linux 운영 체제 커널을 만든 사람으로 유명한 Linus Torvalds가 개발하였다. 

리눅스 환경에서 버전관리를 위해 만들어진 분산 버전 관리 시스템이다.

 

버전 관리?

팀프로젝트 마지막 발표를 위한 ppt를 만든다고 가정하자.

1. 초안 PPT 작성 후 팀원들에게 보여준다. (발표.ppt)

2. 팀원의 피드백으로 수정을 한다. (발표2.ppt)

3. 다시 피드백을 받고, 수정한다. (발표3.ppt)

이러한 피드백과 수정 절차가 계속 반복되고 나면 어느새 발표n.ppt가 되어 있다.

이렇게 계속되서 새로운 버전의 ppt 파일이 쌓이다 보면 어떤 버전에서 어느 부분이 수정되고, 삭제되었는지도 현재 버전이 몇 버전인지도 헷갈리게 된다.

이러한 버전 관리를 수동이 아닌 자동으로 관리해주는 것이 버전 관리 시스템이다.

버전 관리 시스템에는 여러가지가 있지만 그중 대표적으로 가장 많이 사용되는 것이 Git이다.

 

버전 관리 시스템의 목적

1. version

2. backup

3. cooperation

 

Git 이해하기

Git의 가장 기본적으로 많이 사용하는 명령어는 아래 5가지가 있다.

1. commit - 변경 사항을 저장

2. push - 로컬에 저장해 놓은 변경 사항들을 원격저장소에 저장

3. pull - 원견 저장소에 저장된 데이터를 로컬로 받아옴

4. branch - 새로운 브랜치 생성

5. merge - 브랜치와 브랜치 병합(결합)

 

1. Commit 

Commit은 변경된 내용을 저장하는 것이다.

Commit을 하게 되면 아래 사진과 같이 누가, 언제, 어떤 브랜치로 커밋을 했는지 알 수 있다.

CommitID의 경우 Author + Date + Commit Message 를 하나의 문자열로 만들어 SHA-1 해시함에 돌려 만든 값의 40자를 commit id로 사용한다.

git commit -m "commit message"

 

만약 내가 test.txt 파일에 1을 입력하고 v1으로 commit을 하면 main branch로 v1이 commit 된 것을 확인할 수 있다.

그리고 로컬에서 다시 test.txt파일에 1을 지우고 2를 입력하고 v2으로 commit하면 main branch로 v2가 commit된 것을 확인할 수 있다.

 

2.  branch

branch는 보통 새로운 기능을 추가하거나 할때 사용한다. 

git branch feature/login

 

3. push

Push는 원격 저장소에 로컬에서 내가 commit한 내용들을 저장하는 것이다.

# git push {원격저장소 이름} {원격저장소에 저장할 브랜치 이름}
git push origin main

 

4. pull

Pull은 원격 저장소에서 로컬로 저장된 내용들을 받아오는 것이다.

# git pull {원격저장소 이름} {받아올 branch 이름}
git pull origin main

 

 

4.  merge

merge는 원격 저장소에서 pull 받을 때 conflict가 나거나 작업중이던 branch를 다른 branch와 합치고자 할 때 사용한다.

'git merge {target branch 이름}' 명령어를 실행하게 되면 현재 branch에 target branch가 병합되게 된다.

git merge {합칠 대상}

 

 

명령어 실습

1. test.txt 파일 생성 (내용 1)

 

2. commit message [v1]로 commit

- git init 은 해당 폴더가 git 버전 관리 대상 폴더라고 지정해주는 것

- git add -> commit 대상 파일로 지정

 

3. git show 명령어를 통해 현재 commit 현황 확인

HEAD -> main -> v1인 상태이다.

 

4. test.txt 파일 내용을 변경 후 v2로 commit

 

5. git show를 통해 현황 확인

HEAD -> main -> v2인 것을 확인

 

6. 현재 브랜치에서 새로운 브랜치 feature/login 생성

branch를 생성하고 checkout을 해줘야한다.

브랜치를 생성했다고 자동으로 해당 브랜치로 checkout되는 것이 아니다.

git branch feature/login
git checkout feature/login

 

7. login branch에서 login txt 파일 생성 후 login commit

 

8. git graph는 다음과 같아 진다.

HEAD -> feature/login -> login -> v2

main -> v2 -> v1

 

9. main으로 다시 checkout하고. [git checkout main ] v3를 commit 한다.

이렇게 되면 다시 HEAD -> main -> v3 -> v2 -> v1

feature/login -> login -> v2 가 된다.

그림으로 보면 다음과 같다.

login branch에서 login.txt 파일을 생성했기 때문에 v3에서는 login.txt 파일을 찾을 수 없는 상태가 된다.

login branch에서 작업한 내용을 모두 완료했다고 가정하여 main branch에 반영하고 싶을 때 merge를 사용한다.

 

10. login branch 작업 내용을 main branch에 merge

 

main에 feature/login을 merge하게 되면 아래와 같이 login.txt 파일을 확인할 수 있는 것을 볼 수 있다.

 

작업 내용은 다음과 같이 된다.

728x90

'DevOps\etc' 카테고리의 다른 글

[ CI/CD ] CI/CD란?  (4) 2022.11.10

+ Recent posts