$ mkdir 폴더이름 # 새 폴더 만들기
$ cd 폴더이름 # 만든 폴더로 이동 (change directory)
$ git init 경로명 # 저장소 초기화
$ ls # 파일 목록 출력
$ ls -a # 폴더 안의 숨겨진 파일까지 출력
깃은 VCS의 특성 때문에 저장 공간을 논리적으로 분리함
작업하는 공간(working), 임시로 저장하는 공간(stage), 실제로 저장, 기록하는 공간(repository)
깃이 다른 VCS보다 뛰어난 점 : 지정된 파일들의 모든 것을 추적하는 관리 시스템 (추적됨, 추적되지 않음 상태로 구분함)
tracked 상태
워킹 디렉터리에 새 파일을 추가하면 untracked 상태
$ git add
git add 명령어를 통해 tracked 상태로 변경해야함.
즉, 워킹 디렉터리 >> 스테이지 영역
깃은 요청받은 파일들만 추적 관리한다.
추적하는 파일 : tracked 상태로 표시
tracked / untracked 나누는 이유 : 시스템 부하를 줄이고, 더 효율적으로 파일 이력을 관리하기 위함.
임시로 저장하는 공간
워킹 디렉터리에서 제출된 tracked 파일들을 관리
스테이지는 커밋하려는 파일의 추적 정보만 기록
스테이지를 운영하는 이유 : 커밋을 빠르게 처리하기 위함
repository(저장소)는 스테이지 영역에서 가리키는 파일 내용을 기반으로 변경된 차이점만 기록함
파일들의 스테이지 상태 확인 명령어
$ git status
$ git ls-files --stage
스테이지 영역에 등록된 파일들은 또 다시 stage / unstage 상태로 구분
깃이 변화 이력을 기록하려면 파일들의 최종 상태가 stage 상태여야 함
unstage 상태 : 파일에 변화가 있음을 의미(스테이지 영역과 워킹 디렉터리 안의 파일 내용에 차이가 있을 때)
코드 변경 = 워킹 디렉터리에서 파일을 수정
파일 수정 >> 워킹 디렉터리와 스테이지 간 내용이 일치 X
스테이지는 수정한 파일과 원본 파일을 구분하기 위해 modified / unmodified 상태로 나눔
modified 상태
스테이지에 등록된 파일은 깃이 추적 관리함
tracked 상태인 파일이 수정되면 스테이지는 파일 상태를 modified 상태로 변경

수정된 파일은 스테이지에서 잠시 제외됨
깃은 수정 여부만 체크해 주기 때문에 modified 상태로 변경된 파일은 스테이지로 재등록해야 함
수정된 파일을 스테이지 영역으로 다시 적용하려면 git add 명령어 사용
unmodified 상태
tracked 상태이면서 스테이지에서 한 번도 수정하지 않은 원본 상태
수정 X 파일 : 재등록할 필요 X
스테이지에 등록후 수정을 안했다면 unmodified 상태

상태 개념 : 깃의 분리된 저장 영역인 워킹 디렉터리와 스테이지, 추적 여부를 의미
깃이 다양한 저장 영역을 구분해서 가지고 있는 이유 : 파일들의 상태를 효율적으로 모니터링하기 위함.
$ git status : 상태 확인 명령어
외부에 있는 기존 프로젝트를 기반으로 저장소를 생성하고 싶다면 외부 저장소를 복제해서 생성할 수 있음.
외부 저장소를 이용해서 로컬 저장소를 생성하는 것 = '깃 저장소 복제'
공개 저장소
ex. 깃허브, 비트버킷
깃 호스팅 서비스는 공개된 저장소와 비공개된 저장소를 모두 지원함
공개된 저장소는 누구나 복제하여 코드를 내려받을 수 있음
다운로드 vs 복제
다운로드 : 깃의 변경 이력까지 가져오지 X
복제 : 깃의 변경 이력까지 가져옴 >> 최종 코드뿐만 아니라 중간에 커밋같은 변화의 모든 이력도 같이 내려받을 수 있다. 일부코드를 변경하여 기여하는 것도 가능
복제 명령어
$ git clone 원격저장소URL 새폴더이름
복제할 때 폴더 이름을 지정하지 않으면 공개 저장소에서 사용된 폴더와 동일한 이름으로 새 폴더를 만듬(다른 이름으로 복제하고 싶다면 새 폴더이름을 추가 인자로 적자.)
git clone 명령어를 사용하면 깃은 자동으로 깃 서버에 접속
저장소의 모든 소스 코드를 자동으로 내려받음