그림으로 보는 Git의 개념 이해하기
Git은 Svn 이후로 현재 가장 많이 사용되어지는 형상관리 툴입니다. 위키백과를 보면 아래와 같이 정의를 하고 있습니다.
깃(Git /ɡɪt/)은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다. 기하학적 불변 이론을 바탕으로 설계됐고, 분산 버전 관리 시스템으로서 빠른 수행 속도에 중점을 두고 있는 것이 특징이며 데이터 무결성, 분산, 비선형 워크플로를 지원한다.
위키백과 참조
처음 Git을 접할 때 그 개념을 이해하는데 어려움이 많습니다. 그래서 간단하게 기초적인 이해를 그림으로 설명해 볼까 합니다.
Git은 내 컴퓨터에서만 운영해도 되지만 거의 99%는 원격서버와 같이 연계해서 협업을 하며 사용합니다.
Github, Gitlab은 원격 저장소(Remote Repository)로써 동기화가 된 상태라고 가정했을 때, 로컬 저장소(Local Repository)와 동일한 내용을 가지고 있습니다.
Git을 운영하는 순서는 여러가지가 있겠지만 가장 많이 사용하는 것은 원격저장소의 파일을 로컬로 다운로드 받아서 작업 후 다시 업로드 하는 식으로 많이 하므로 그 순서를 기준으로 설명하겠습니다.
서버에서 Clone해오기
원격저장소에서 Clone하는 것과 그냥 다운로드 하는 것은 다릅니다.
- Download ZIP : 그냥 순수하게 파일들만 압축해서 다운로드 되어 집니다.
- Clone 주소복사 : Clone은 순수파일들과 이 프로젝트의 커밋되었던 히스토리 정보까지 모두 다운로드가 되어 로컬저장소(Local Repository)를 만들어 줍니다.
git clone
서버에서 파일을 Clone 하게 되면 내 컴퓨터의 지정된 폴더에 .git
이라는 숨겨진 폴더가 생성되고 이 .git
폴더를 가지고 있는 폴더가 작업 폴더(Working Directory)가 됩니다. 이 작업 폴더는 자동으로 서버와 링크가 맺어지게 됩니다.
이
.git
폴더가 사실 로컬저장소의 역활을 하는 중요한 폴더로서 서버와의 링크 정보와 변경된 히스토리 정보를 모두 가지고 있는 폴더 입니다. 이 폴더를 사람이 수정하거나 추가/삭제를 할 필요가 없습니다. Git에서 알아서 운영합니다.
git clone <저장소 url>
작업 폴더(Working Directory) 구성
작업폴더는 관리(추척)가 되는 파일과 관리(추적)되지 않는 파일로 나누어져 있습니다. 관리(추적)가 된다는 것은 이 파일의 생성, 수정, 삭제 등의 히스토리 정보를 모두 가지고 있다는 뜻입니다.
파일관리(추적)의 상태
추적은 바로 이전의 커밋을 깃점으로 아래의 4가지 상태로 관리됩니다.
- 추적안함 (Untracked) : 관리대상이 아님
- 추적함(Tracked)
- 수정없음 (Unmodified) : 변경이 없는 파일
- 수정함 (Modified) : 변경된 파일
- 스테이지됨 (Staged) : 스태이지에 올라간 파일
git add
작업 폴더에 처음 파일을 생성한다면 이것은 아직 관리(추적)대상이 아닙니다. 관리대상이 아닐 경우는 아무런 히스토리 정보를 가지고 있지 않습니다. 이제 이 파일을 관리대상으로 삼기 위해서는 git add
명령어를 실행해 줘야 합니다. git add 명령어를 실행하면 이 파일이 스테이지(Staging Area) 로 올라가게 됩니다. 이제부터 이 파일의 수정, 삭제 등의 모든 정보는 Git에 기록이 되어집니다.
파일의 상태는 추적안함 (Untracked), 수정함 (Modified) 이 스테이지됨 (Staged) 으로 변경됩니다.
git add <파일 이름> // 특정 파일만 추가하기
git add . // 모든 파일을 추가하기
git commit
이제 스테이징된 파일들을 로컬 저장소(Local Repository)로 등록을 해야 합니다. 그러게 위해서는 git commit
을 해야 합니다. git commit
을 하면 현재 스태이징된 파일들을 그대로 스냅샷으로 찍어서 로컬 저장소(Local Repository)에 보관하게 됩니다. 이 스냅샷이 하나의 히스토리 기록이 되는 것입니다. 이 기록을 기준으로 과거로 되돌아갈 수도 있고 미래로 갈 수도 있고 다른 브랜치로도 이동할 수 있는 기준점이 됩니다.
파일의 상태는 스테이지됨 (Staged) 이 수정없음 (Unmodified) 으로 변경됩니다.
git commit -m "참고할 설명 작성"
git push
git commit
으로 로컬 저장소(Local Repository)에 스냅샷을 찍어 이용하는 것은 내 컴퓨터에서만 가능한 상태입니다. 이것을 서버에 올려서 다른 사람들과 공유를 하기 위해서는 원격 저장소(Remote Repository)에 업로드를 해야 합니다.
그 명령어가 git push
입니다. git push
를 하면 로컬 저장소의 커밋(git commit)된 모든 내용이 그대로 원격 저장소로 올라갑니다.
git pull
원격 저장소에 올라온 최신 수정본 파일을 내 로컬 저장소로 업데이트를 해야 할 필요가 있습니다. 그때 필요한 명령어가 git pull
입니다. 일단 한번은 서버와 링크가 맺어있어야 실행이 됩니다. 또는 git fetch
명령어를 사용할 수도 있습니다.
이렇게 가장 기초적인 git의 구조와 명령어를 설명했습니다.