git은 버전을 관리하는 프로그램이다. 여기서 버전관리란? 파일의 버전을 시간에 따라 기록하다가 나중에 특정 시점에서 버전을 꺼내올 수 있는 시스템을 말한다.
버전관리의 장점으로는 지난 과정을 확인할 수 있다는 점과 이전 버전으로 돌아갈 수 있다는 점이다
프로젝트가 있다. 그럼 그 프로젝트를 담기 위한 최초의 디텍도리를 만들어야 하는데 그 이름을 프로젝트 디렉토리라고 하자. 이 디렉토리에는 프로젝트에 관련된 디렉토리나 파일들이 안에 담겨있다.git으로 프로젝트 디렉토리의 버전을 관리하기 시작하면 원하는 시점마다 그 디렉토리에 어떤 것들이 있는지, 이것들이 어떻게 변해가는지를 기록할 수 있다. git이 이런 정보를 기록하는 곳을 repository (저장소)라고 한다.repository (저장소) 안에는 디렉토리의 초창기 모습부터 최근 모습까지 버전별로 담겨있다.git을 사용하면 프로젝트 디렉토리 안에 .git 이라고 하는 디렉토리가 만들어지는데 .git 디렉토리가 repository를 의미한다.프로젝트 디렉토리의 모습을 하나의 버전으로 남기는 동작을 commit 한다 라고 표현한다. commit을 하면 그 당시의 프로젝트 디렉토리의 모습이 마치 사진처럼 repository에 저장된다. 이 때 고정된 결과물 자체도 commit이라고 한다.repository에 저장된 commit을 나중에 참조하면 과거의 프로젝트 디렉토리의 모습을 볼 수 있다.커밋(commit) : 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위
레포지토리 (repository) : 커밋이 저장되는 곳
- Git Bash를 사용해서 MathTool이라는 디렉토리를 만들었다.
- MathTool은 이 프로젝트에서 프로젝트 디렉토리 역할을 한다.
- MathTool로 이동하고, git으로 MathTool 디렉토리의 버전관리를 시작하기 위해 설정이 필요하다.
- git init을 작성한다. init은 비어있는 레포지토리를 생성했다는 의미이다.
- MathTool 디렉토리를 살펴보면
.git이라는 디렉토리가 생성됐다..git디렉토리가 레포지토리를 의미한다.
.git디렉토리 안에 들어가서 불러오면 여러 자식 디렉토리와 파일들이 있다.- 여기있는 디렉토리와 파일들로 git은 여러 복잡한 작업을 함으로써 버전관리를 한다.
- MathTool 디렉토리에 더하기, 빼기 함수가 적혀있는 파이썬파일과 무료를 의미하는 텍스트 파일을 저장한다.
- 리스트를 불러오면 포함된 것을 확일할 수 있다.
- git은 커밋하기 전에 어떤 사용자가 커밋을 했는지에 대한 정보가 담겨있어야 한다. 혼자 작업시에는 필요 없겠지만 다른 사용자들이 함께 사용할 경우 구별하기 위해 사용자 정보가 담겨야한다.
- 사용자 이름과 이메일을 작성했다.
- 커밋하기 전에 이름, 이메일을 설정해야하고 마지막으로 커밋에 대한 정보를 추가해 줘야한다. 여기서 정보란 어떤 변동사항이 생겼는지를 의미한다.
- 이러한 정보를 커밋메세지라 한다. 메세지를 남기기 위해 옵션이 필요한데,
-m을 사용하면 된다.-m뒤에""사용해서 내용을 작성하면 된다.- 메세지를 작성하고 커밋하게되면
Untracked files:이라는 문구가 나오게 된다.
이 문구는git에 의해서 아직 추적되지 않고 있다라는 의미이다.
아직git으로 무언가 해준것이 없어서 파일 버전관리 대상이 아닐때 이러한 문구가 나온다.
Untracked files:문구를 없애기 위해 add라는 작업이 필요하다.add는 원래 있던 파일의 내용들을 수정하고나면 이 파일이 새로운 모습으로 커밋에 포함될 거라고 지정하는 것을 의미한다.
add작업 후에git commit -m "Creat calculator.py and License"을 해보면 커밋이 되었다는 출력결과가 나오게 된다.- root-commit은 이 프로젝트의 첫번째 커밋이라는 뜻이다
- 6 insertions(+)는 6줄이 추가 되었다는 의미인데 calculator.py의 5줄과 License.txt의 한 줄을 합쳐서 총 6줄이 되었다는 뜻이다.
- working directory
- 작업을 하는 프로젝트 디렉토리를 말한다. 위 예제에서는 MathTool이 이에 해당한다.
- staging area
- git add를 한 파일들이 존재하는 영역이다. git commit을 하게되면 이 영역에 있는 파일들만 commit 된다.
- repository
- working directory의 변경 이력들이 저장되어 있는 영역이다. commit들이 저장되는 영역이다.
- Untracted 상태
- Untracted는 추적되지 않고 있다라는 뜻이다. 즉 파일이 git에 의해서 변동사항이 전혀 추적되고 있지 않는 상태를 말한다.
- 예를 들어 파일을 생성하고 그 파일을 한 번도
git add를 해주지 않는 상태를 말한다.
- Tracted 상태
- git에 의해서 추적되고 있는 상태를 말한다.
- Tracted는 다시 3가지 상태로 나뉜다.
- Staged 상태
- 파일의 내용을 수정하고staging area에 올라와있는 상태를 말한다.
- 예를들어 새로 생성한 파일에 내용을 쓰고git add를 해주거나, 한 번이라도 커밋에 포함됐었던 파일이라도 내용을 수정하고git add를 해주면 이 상태가 된다.- Unmodified 상태
- 현재 파일의 내용이 커밋된 파일과 비교했을 때 바뀐게 없는 상태면 그 파일은 Unmodified(수정되지 않은) 상태라고 한다.
- 커밋을 하고 난 직후에는 working directory 안에 모든 파일이 이 상태가 된다.- Modified 상태
- 최신 커밋과 비교했을 때 수정된 점이 있다면 그 파일은 Modified 상태이다.

- Add the file : Untracked 파일을 처음으로
git add해주면 Staged 상태가 된다.- Edit the file : 최신으 커밋과 비교했을 때 변화가 없는 파일을 수정하면 Modified 상태가 된다.
- Stage the file : 변경된 파일(Modified 상태)을
git add하면 Staged 상태가 된다.- Commit : 커밋을 하게되면 Staging area에 있던 파일들이 커밋에 반영되고 최신의 파일들과 차이가 없게 되기 때문에 Unmodified 상태가 된다.
- Remove the file : 파일을 삭제하게 되면 더이상 git에서 인식을 하지 못하기 때문에 Untracked 상태가 된다.