Git
- 깃은 버전을 관리하기 위한 도구
- 버전 = 변경사항 = 유의미한 변화가 결과물로 나온 것 = 커밋(commit)
깃이 없으면?
- 변경 내역 확인이 어렵다.
- 작업을 되돌리기가 어렵다.
- 협력하기 어렵다.
깃은
- 변경 내역들을 기억하며
- 필요하다면 작업을 되돌리며
- 여러명의 코드를 쉽게 나누고 합치며
Git이 관리하는 세 개의 공간
깃은 VCS의 특성 상 저장 공간을 논리적으로 분할한다. 크게 아래와 같이 3가지로 나눈다.
- 작업 공간 (Working Directory)
- 임시 저장 공간 (Stage)
- 실제로 저장하는 공간 (Repository)
1. Working Directory
- 사용자의 작업 공간으로써, 로컬 저장소(예:
.git 디렉토리
)에 접근할 수 있으며 실제 파일을 수정하거나 생성하는 공간이다.
- 현재 작업중인 소스코드들을 담고 있으며, 운영체제도 워킹 디렉토리 내부의 파일들만 접근하거나 수정할 수 있다.
- 작업 폴더에서 .git 디렉토리를 제외한 나머지 부분
- 워킹 디렉토리에서는 파일들을 추척(tracked)/비추척(untracked) 상태로 구분한다.
- untracked 상태
- 저장소 내에서 새로 만들어진 모든 파일들은 untracked 상태로 시작한다.
- untracked 상태인 저장소 내의 파일들은 git이 코드 변경 이력을 추적하지 않는다.
- tracked 상태
- tracked 상태의 파일들은 git에 의해서 파일의 변경 이력이 추적된다.
- 모든 파일들의 변경 이력을 추적할 경우에는 시스템의 부하가 커지게 된다. 따라서 git에서는 요청받은 파일들만 변경 이력을 추적한다.
- 명령어 :
$ git add <file_name>
위 명령어를 이용하면 파일을 tracked 상태로 등록한다. 👉 즉, 파일을 stage 영역으로 등록시킨다. (파일을 커밋하기 위해선 등록이 필수적)
2. Stage
- 스테이지는 워킹 디렉토리에서 제출된 tracked 상태의 파일들을 관리 및 임시로 저장하는 공간이다.
- 임시로 저장하는 공간이란?
- Working Directory 와 Repository 사이의 임시 공간이다.
- Repository 에서는 스테이지 영역에서의 파일 내용을 기반으로 변경된 차이점 만을 기록한다.
- 스테이지 영역에서는 파일의 내용을 직접 가지고 있는 것이 아닌, 커밋하려는 파일의 추적 상태 정보들만 기록한다.
- 스테이지가 만들어진 이유는 커밋을 빠르게 처리하기 위해서이다.
- 스테이지 내의 파일들은 stage/unstage 상태로 구분된다.
- 스테이지 상태 확인 명령어 :
$ git status
or $ git ls-files --stage
3. Repository
Commit
- 깃이 코드의 변화를 기록하는 것
- 코드의 의미있는 변경 작업들을 저장소에 기록하는 동작
- 깃은 코드의 변경 이력과 변경 시점을 커밋으로 기록한다.
커밋 전 선행 작업
$ git add
명령어를 통해서 새로 생성한 파일이나 변경한 파일을 스테이지 영역으로 등록한다.
- 커밋을 하기 위해선 반드시 스테이지 영역으로 등록한 파일에 새로운 변경 사항이 있어야 한다.
- 변경 사항이 없거나, 파일을 수정했어도 스테이지 영역으로 등록하지 않은 경우 커밋을 할 수 없다.
커밋 명령어
$ git commit
- 파일 등록과 커밋을 동시에 하는 방법 :
$ git commit -a
- 커밋과 메세지 입력 동시에 하는 방법 :
$ git commit --m"commit_message"
- 커밋메세지 수정하는 방법 :
$ git commit --amend
커밋의 로그 기록
- 로그 확인 명령어 :
$ git log
- 로그 기록은 최신 커밋 기록부터 내림차순으로 정렬한다.
참고 📝