Git이란 분산형 버전 관리 시스템(Version Control System)의 한 종류이며, 빠른 수행 속도에 중점을 둔다.
버전관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정시점의 버전을 다시 꺼내올 수 있는 시스템
- 각 파일을 이전 상태로 되돌릴 수 있다.
- 프로젝트를 통째로 이전 상태로 되돌릴 수 있다.
- 시간에 따라 수정 내용을 비교해 볼 수 있다.
- 누가 문제를 일으켰는지도 추적할 수 있다.
- 누가언제만들어낸이슈인지도 알 수 있다.
- 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.
모두 같은 환경에서 개발하여 불필요한 시간을 없애고 서로 주고 받는 와중에 일어나는 충돌을 최소화 하는 것
프레임워크를 갖추고 공통으로 쓰는 코도들을 미리 넣어두고, 테스트 코드나 샘플코드들을 넣어주어서 프로젝트 개발 시작하기전에 팀원 모두 같은 코드로 테스트 할 수 있는 환경도 제공
- 여러 명이 동시에 작업하는 병렬 개발이 가능
- 인터넷이 연결되지 않은 곳에서도 개발을 진행
- 개인 프로젝트일지라도 Git을 통해 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다.
① 내가 작업한것들(로컬저장소)
② 원격저장소로 밀어내거나(push)
③ 원격저장소에서 최신 형상을 내 작업공간으로(로컬저장소) 당겨온다(pull)
만일 도화지에 그림을 그리고, 각 그림 완성도 마다 버전 관리를 한다고 가정
먼저 그림을 그리고,

이렇게 사진첩 현재 상태를 저장

그리고 내일 작업을 이어나가 눈코입을 그렸다고 하자

다시 작업한 내용을 사진첩에 추가로 저장했다.

머리와 수염을 그리고 이 역시 사진첩에 추가로 저장
사진첩에는 총 3개의 작업내용이 버전별로 저장된 것을 확인 할 수 있다.
각 작업들의 순서를 매겨줘서 버전 순서를 기억

하지만 git은 숫자로 인덱싱하지않고, 해시값으로 인덱싱
해시값은 중복이 안된다고 봐도 무방
단, 해시값으로 순서를 알 수 없으니 트리처럼 부모를 각 노드마다 기록해주어 진행순서를 알 수 있게 한다.

만일 머리를 다시 그리고 싶다면, 이전 버전인 해시값 AB9C8을 참조하여 다시 가져온다.

그리고 머리를 다시 그리고, 사진첩에 추가로 저장(B3A12)
작업순서를 기억하기 위해 부모를 기록

작업이 분기로 두가지로 나뉘어지니까
어느 작업이 무엇인지 알기 쉽게 작업명을 붙여준다.


Repository
스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳
Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공
원격 저장소(Remote Repository)
파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소
로컬 저장소(Local Repository)
내 PC에 파일이 저장되는 개인 전용 저장소
아예 저장소를 새로 만들거나, 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해 올 수 있다.
스테이지 내용은 .git/index 파일에 저장되고, 저장소의 내용은 .git/HEAD 파일에 저장
Working Tree(Working Directory)
저장소를 어느 한 시점을 바라보는 작업자의 현재 시점
파일 수정, 저장 등의 작업을 하는 디렉토리로, 작업 디렉트로(working directory)라고도 한다.
SnapShot
특정 시점에서 파일, 폴더 또는 워크스페이스의 상태를 의미
스냅샷을 통해 특정 시점에 어떤 파일에 어떤 내용이 기록되어 있었는지, 폴더 구조는 어떠했는지, 어떤 파일이 존재했는지 등 저장소의 모든 정보를 확인
Checkout
이전 버전 작업을 불러오는 것
Staging Area
저장소에 커밋하기 전에 커밋을 준비하는 위치
Commit
현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업
Head
현재 작업중인 Branch를 가리킨다.
Branch
가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을 때 Merge를 하여 작업을 한다.
Merge
다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미
참고 문헌