Knowledge
Git이란?
De1fin
2019. 7. 18. 18:26
Git (깃)
- 리눅스 개발자인 리누스 토발즈에 의해 개발된 분산 버전 관리 시스템
- 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율한다.
- 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용되기도 한다.
Git 은 형상 관리 도구의 일종이다
형상 관리란? 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것
형상 관리 도구 종류
- CVS : 1980년대 만들어진 형상관리 툴
- SVN : 2000년에 CVS 대체하기 위해 만들어 졌으며 현재까지도 사용
- GIT : 매우 빠른 속도와 분산형 저장 시스템으로 SVN보다 많은 기능을 지원
SVN 와 GIT 작동방식
- SVN : 중앙 집중식 소스코드 관리 방식
- GIT : 분산 소스코드 관리 방식 >> 복구에 용이하다.
Git 개념
1) 영역
- working directory
- 현재 작업하고 있는 공간
- Git가 관리 하에 있으나, 아직 추적( track )하고 있지 않은 상태
- index
- stage 또는 staging area라고 하며, 준비 공간
- Git이 추적하고 있으며, 버전으로 등록되기 전 상태
- repository
- 2가지 의미로의 저장소
- 본인 PC에 존재하는 저장소 : local repository
- Github, Gitlab 같은 원격 저장소 : remote repository
2) Flow
- git init
- .git 폴더를 생성
- .git 폴더가 있어야 파일을 추적할 수 있으며, Git과 관련된 작업이 가능함
- git add
- working directory의 변경된 작업 파일을 staging area로 추가시키는 작업
- git commit
- staging area의 내용을 local repository에 확정
- git push
- local repository(로컬 저장소)의 내용을 remote repository(원격 저장소)로 업로드 하는 작업
- git pull
- remote repository(원격 저장소)의 내용을 local repository(로컬 저장소)로 다운로드 하는 작업
- git clone
-
.git을 포함한 remote repository의 파일들을 local repository로 복사하는 것
-
github에서 zip 파일로 받으면 .git 폴더가 없다는 것이 명령어와의 차이점
위에서 살펴본 영역과 명령어를 통해 flow를 그려보면 다음과 같습니다.
3) 협업 - 병합
- git branch
-
독립된 working directory를 의미
-
브랜치를 통해 프로젝트 참여자마다 브랜치를 가져서 독립된 작업 공간 확보
-
테스트 및 백업 등의 용도로 사용 가능
-
head
-
포인터를 의미하며, 현재 작업 중인 branch를 가르킨다.
-
merge
-
해당 이슈 관계자들이 상의하여 수동으로 충돌을 해결해야 함.
-
따라서 작업 내용이 겹치지 않도록 분리시키는 것이 중요
-
2개의 branch에서 작업한 다른 내용을 하나로 합치는 것을 말하며, 현재 브랜치를 기준으로 병합
-
만약 두 branch가 같은 파일의 같은 곳을 수정할 경우, 충돌( merge conflict ) 발생
-
Git의 장점
git의 장점으로는 다음과 같이 5가지를 들 수 있다.
- 처리 속도가 빠르다.
- 일시적인 작업에 대한 이력 관리가 쉽다.
- 브랜치(branch), 머지(merge)가 쉽다.
- 장소에 구애받지 않고 협업이 가능하다.
- Repository의 완전한 복사본을 로컬 장비에 보관이 가능하다. (중앙 집약 관리시스템과의 차별성)