- Git add : 변경한 파일 중 올리길 원하는 것만 선택
- Git commit : 선택한 파일들을 한 덩어리로 만들고 설명을 덧붙임
- 변경사항의 모음(X) 하나의 최종 코드 모음(O)
- 기존 커밋과 비교해서 변경된 파일이 아니면 '변경되지 않았다'고만 저장해서 용량이 무겁지 않다. (변경된 파일만 새로 저장)
SVN vs. GIT 차이점
SVN은 바로 이전 커밋과의 변경사항만 저장한다. 커밋 당 용량은 더 가볍지만 한 버전을 보려면 맨 처음 커밋부터 계산해야 하기 때문에 속도가 느리다.
Git은 바로 이전 커밋반 보면 되기 때문에 속도가 빠르다.
파일이 위치하는 영역
- 작업 디렉토리 : 현재 작업하고 있는 우리 컴퓨터 (Working directory)
- 스테이징 영역(add) : 파일을 전달하기 위해 준비하는 공간
- 로컬 저장소(commit) : 준비가 된 파일들을 전달
- 원격 저장소(push) : 커밋한 파일들은 깃허브 원격 저장소로 업로드
1. 맨 처음 로컬 저장소를 만들었을 때
- 내가 작성한 README.md 파일과 app.js 파일은 작업공간에 위치해 있다.
- 추적안됨상태는 아직 git으로 tracking 되지 않은 상태
2. git add : 파일 스테이지에 올리기
작업 공간에 있던 파일들을 로컬 저장소에 add 함으로써 스테이지에 올린다.
3. commit : 스테이지 사진 찍어 남기기
스테이지의 모든 파일들을 commit 해서 찰칵 사진을 찍는다. "프로젝트 초기화" 새로운 커밋
커밋한 후에는 파일 상태들이 수정없음 상태로 돌아간다. (다시 수정 가능)
4. push : 커밋을 원격 저장소에 올리기
마지막으로 push를 하면 최종적으로 파일덩어리가 깃허브의 원격저장소로 올라가게 된다.
5. 파일 변경(수정/추가/삭제)
작업공간에 있던 app.js 파일을 수정하고 난 뒤 파일이 "수정함" 상태
app.css 는 새로 추가되었으나 아직 git으로 tracking 되지 않아 "추적안됨" 상태 (Untracked files)
이 의미는 저장소에는 원래 아무것도 없지만 파일을 생성하게 되면 깃허브에 있는 저장소가 파일의 존재를 인식하지 못하기 때문이다.
add 하게되면 수정본과 추가된 파일 모두 스테이지에 올라가며, 기존에 있으면서 수정이 없던 파일은 스테이지에 그대로 존재한다.
commit 을 하면 변경이 없었던 파일을 포함해서 스테이지에 있는 모든 파일들이 사진 찍힌다.
Git으로 추적하는 파일상태
작업공간(Working directory)에 있는 수정함, 추적안됨 파일을 스테이지로 올려 스테이지됨 으로 변경한다.
커밋을 하면 수정없음 상태로 돌아가서 다시 파일을 수정할 수 있다.