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 상태가 된다.