글 작성자: juyoungit

Git

소스코드를 효과적으로 관리하기 위해 만들어진 분산형 버전관리 시스템

Git의 장점

  1. 소스코드가 변경된 이력을 쉽게 확인할 수 있음
  2. 특정 지점에 저장된 버전과 비교하거나 특정 시점으로 돌아갈 수(복원할 수) 있음

-> Git을 사용하게 되면 모든 파일에 대한 업데이트 이력이 git에 저장되기 때문에 사용자가 일일이 복사해서 백업본 파일을 만들 필요가 없이 매우 편리하다는 장점이 있음

 

저장소(Git Repository)

파일이나 폴더를 저장해두는 곳 -> 파일이 변경 이력별로 구분되어서 저장됨

git은 로컬 저장소, 원격 저장소로 2가지 성격의 저장소를 지원한다.

저장소 종류 내용
로컬 저장소
(Local Repository)
자신의 PC 내에 파일이 저장되는 개인전용 저장소
원격 저장소
(Remote Repository)
파일이 원격저장소 전용서버에서 관리, 여러사람들과 공유하기 위한 저장소

-> 평소에는 자신의 PC의 로컬저장소에서 작업을 진행하다가 작업내용을 공개하거나 공유하고 싶은 경우 이를 원격저장소에 업로드할 수 있으며 또한 다른 사람이 작업하여 원격저장소에 업로드한 파일을 자신의 로컬저장소로 가져오는 것도 가능함

 

커밋 (Commit)

1. 파일 및 폴더의 변경사항을 기록하기 위해서는 바로 이 커밋(Commit)을 진행해야 한다.
2. 커밋(Commit)을 진행하면 이전 커밋상태부터 현재상태까지의 변경이력이 기록된 커밋이 만들어진다. 이는 시간 순으로 저장되며 이를 통해서 과거의 변경이력과 그 내용들을 알 수 있게된다.
3. 각 커밋에서는 영문+숫자로 이루어진 40자리의 고유이름이 붙게되는 데 저장소에서는 이 이름을 통해서 각 커밋을 구분하고 선택한다.
4. 커밋은 이력을 남기는 중요한 작업이므로 커밋을 진행할 때에는 커밋메시지를 필수로 입력해야 한다. 이 메시지가 없으면 커밋이 실행되지 않는다.
5. 커밋메시지도 주석처럼 간단하고 명료하게 적어주는 것이 중요하다. git에서 궍장하는 메시지 형식은 다음과 같다.
1 : 커밋내의 변경내용을 요약
2 : 빈칸
3 : 변경한 이유

작업트리(Work tree)와 인덱스(Index)

작업트리 (Work Tree) 흔히 말하는 작업폴더
인덱스 (Index) 커밋을 실행하기 전의 저장소와 작업 트리사이에 존재하는 가상의 공간
(인덱스에 등록되지 않은 파일은 커밋을 수행할 수 없다.)
Git에서의 커밋 작업트리에 존재하는 변경내용을 저장소에 바로 기록하는 것이 아닌
그 사이 공간인 인덱스(Index)에 해당 내용을 기록(stage - 스테이징 한다고 표현하기도 함)
-> 저장소의 변경사항을 기록하기 위해서는 기록하고자 하는 모든 변경사항들이 인덱스에 존재해야 한다.
인덱스(index) 공간이 별도로 존재하는 이유 작업트리 내에 있는 커밋이 필요없는 파일들을 커밋에 포함시키지 않을 수 있고 파일에서 원하는 일부 변경사항만 인덱스에 등록하여서 커밋할 수 있다.

원격 저장소에 Push 하기

내 PC에서 저장된 이력을 원격저장소에 공유하려면, 로컬저장소의 변경이력을 원격저장소에 업로드 해야한다.

push

웹 상의 원격저장소에 변경된 파일을 업로드 하는 것

-> push를 실행하면 원격저장소에 변경이력이 업로드 되어서 원격저장소와 로컬저장소가 동일한 상태가 되게 된다.

원격 저장소 복제하기

누군가의 변경이력이 저장된 저장소가 있으면 그걸 웹에서 통째로 가져와서 내 PC에서 직접 작업할 수 있다. clone이란, 원격저장소의 내용을 통째로 다운로드 하는 것으로서 복제한 저장소를 다른 PC에서 로컬저장소로 사용할 수 있게 된다.

clone

원격 저장소를 복제

-> 변경이력도 로컬저장소에 같이 복제되어서 넘어오기 때문에 원래 원격저장소와 동일하게 이력을 참조하고 커밋을 진행할 수 있다.

원격 저장소에서 가져오기(Pull)

원격저장소를 공유해서 여러사람이 함께 작업을 수행하게 되면 모두가 같은 원격저장소에 push를 진행하게 된다. 그렇게 되면 나중에 다른 사람이 원격저장소에 push한 내용을 내 로컬저장소에도 적용(Pull)할 필요성이 있다.

pull

원격 저장소에서 최신 변경이력을 다운로드하여 내 로컬 저장소에 적용

-> 원격저장소에서 로컬저장소로 업데이트 하려면 pull을 시행해야 한다.