커밋(commit): 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위 & 결과물
레포지토리(repository): 커밋이 저장되는 곳(프로젝트 디렉토리의 각 버전이 담기는 저장소)
commit에 관한 주의사항
1. 첫 커밋을 하기 전, 사용자의 이름과 이메일 주소를 설정!
2. 커밋 메시지 남기기 (옵션 -m)
3. 커밋할 파일을 git add로 지정해주기
git init # 현재 디렉토리를 Git이 관리하는 프로젝트 디렉토리(=working directory)로 설정하고 그 안에 레포지토리(.git 디렉토리)= 생성
git config user.name "codeit" # 1. 깃에 이름 알려주기
git config user.email "happily2bus@gmail.com" # 2. 이메일 알려주기
git commit -m "Create calculator.py and License" # 3. 커밋 메시지 입력하기
git add [파일 이름] # 수정사항이 있는 특정 파일을 staging area에 올리기
git add [디렉토리명] # 해당 디렉토리 내 수정사항이 있는 모든 파일들을 staging area에 올리기
git commit -m "Add a LICENSE(내용)" # Git으로 커밋 할 때 커맨드
git status # 깃이 인식하고 있는 프로젝트 디렉토리의 현재 상태를 보여줌
git add . # '.'현재 프로젝트 디렉토리 내에서 변경사항이 생긴 모든 파일들을 staging area에 추가하라
git reset [파일 이름] # staging area에 올렸던 파일 다시 내리(*단 변경된 새 모습은 그대로 working directory에 남아있다!)
git status # Git이 현재 인식하고 있는 프로젝트 관련 내용들 출력(문제 상황이 발생했을 때 현재 상태를 파악하기 위해 활용하면 좋음)
git help [커맨드 이름] # 커맨드에 대한 의미 혹은 사용법을 확인할 때 사용(*man -git 도 동일함)
참고) 리눅스 명령어
mkdir: mkke directory의 약자로 디렉토리(폴더)를 생성할 때 사용하는 명령어
-m: 디렉토리를 생성할 때, 권한을 설정합니다.
-p: 상위 경로도 함께 생성합니다.
-v: 디렉토리를 생성하고 생성된 디렉토리에 대한 메시지를 출력합니다.
Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작한다. 이때, 각 작업 영역의 이름은
- working directory: 작업을 하는 디렉토리(*참고로 working tree 또는 staging area는 index라고 할 때도 있음)
- staging area: git add를 한 파일들이 존재하는 영역 -> 커밋을 하게 되면 staging area에 있는 파일들만 커밋에 반영됨
- repository: working directory의 변경 이력들이 저장되어 있는 영역 -> 커밋들이 저장되는 영역
즉, working directory에서 작업 후 -> 작업한 파일들을 git add 해주고 -> 커밋을 하면 staging area에 있던 파일들의 모습이 스냅샷(snapshot)처럼 이 repository에 저장된다.
위의 작업 이후에 아래의 작업을 추가로 진행하였다.
- working directory에서 A.txt 파일 내용에 Python~이라는 단어를 추가, B.txt 파일 내용에 Morning!이라는 단어를 추가함
- 그런데 이번에는 git add B.txt만 실행해서 B.txt 파일만 staging area에 올림
- 그 다음 git commit -m "Ver_2"로 두 번째 커밋
이전 그림과 다른 점은 A.txt는 staging area에 올리지 않고, B.txt만 staging area에 올렸다는 것. 그랬더니 지금 repository에 Ver_2 커밋을 보면 지금
- A.txt는 staging area에 있던 모습, 그러니까 수정하기 이전의 모습이 Ver_2 커밋에 반영되었고
- B.txt도 staging area에 있던 모습, 하지만 A.txt와는 달리 수정한 이후의 모습이 Ver_2 커밋에 반영되었다.
A.txt, B.txt 둘다 working directory에서 수정했다는 사실은 같지만, staging area에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지가 달라진다.
Git에서 파일들은 크게 다음 2가지 상태를 가진다.
- Untracked 상태: '추적되지 않고 있는'이라는 뜻이다. 이 상태는 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않는 상태를 뜻하는데 예를 들먄 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 이 상태에 해당한다.
- Tracked 상태: 파일이 Git에 의해 그 변동사항이 추적되고 있는 상태
- Staged 상태: 파일의 내용이 수정되고나서, staging area에 올라와있는 상태를 Staged(스테이징된, stage area에 올려진) 상태라고 한다.
- 새로 생성한 파일에 내용을 쓰고 git add를 해주거나
- 한 번이라도 커밋에 포함됐었던 파일이라도 내용을 수정하고 git add를 해주면 Staged 상태에 해당한다.
- Unmodified 상태: 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태면 그 파일은 Unmodified(수정되지 않은, 변한 게 없는) 상태에 해당한다. 커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태에 해당된다.
- Modified 상태: 최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면 그 파일은 Modified(수정된) 상태이다.이렇게 Git에서 파일은 매 순간 4가지 상태 중 하나의 상태에 있게 된다.
- Staged 상태: 파일의 내용이 수정되고나서, staging area에 올라와있는 상태를 Staged(스테이징된, stage area에 올려진) 상태라고 한다.