지난 포스트에서 보았듯, Git은 협업을 위한 분산된 버전관리시스템이다.
이번 시간에는 Git의 기본적인 구조와 명령어를 살펴보도록 하겠다.
Git에서 자주 사용하는 키워드
repository
또는repo
: 저장소 / Git으로 버전 관리하는 디렉토리를 의미local repository
: 로컬 저장소 / 작업자의 개발 환경(PC)에 설정된 Git 저장소remote repository
: 원격 저장소 / GitHub 등 외부 서버에 설정된 Git 저장소commit
: 커밋 / 특정 상태를 기록한 것, 즉 버전을 의미. 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업branch
: 브랜치 / 한국어로 번역하면 가지치기 또는 갈래라고 하는데 또 다른 작업공간을 의미merge
: 머지 / 한국어로 병합 또는 합치기라고 하는데 특정 브랜치에서 작업한 내용을 또 다른 브랜치에 적용하는 것을 의미
Git의 기본 기능은 이력 관리입니다. 많은 프로그램이
Ctrl
+Z
(undo)와Ctrl
+Y
(redo)를 제공하는데, Git은 전체 소스 파일을 대상으로 해당 기능을 제공하고, 협업에 필요한 다양한 기능을 가지고 있습니다.
➡️ 아래하 한글에서는 단순히 수평적인 undo와 redo를 제공하지만 (예: 한 보 앞, 뒤),
Git에서는 커밋된 모든 소스 파일을 대상으로 언제든지 undo와 redo가 가능하다.
(예: 1월에 커밋한 version과 9월에 커밋한 version으로의 선회가 자유로움)🔼 따라서 git은 branch를 제공함으로써 A안, B안, C안 등을 병렬적으로 준비할 수 있게 한다.
많은 회사에서 새 기능을 만들거나 버그를 수정할 때 브랜치를 만들고 코드 리뷰 후 메인 브랜치에 머지merge하는 방식을 사용한다고 한다.
Git을 통한 Data 전송은 어떻게 이루어지는가?
🔼`HEAD` : 현재 작업중인 Branch를 가리킨다.
Git Data Transport Command Git data workspace(작업디렉토리) - index(staging area, 스테이징 영역)
- local repository(HEAD) - remote repository(원격 저장소)
➡️git add
: 파일을 Working directory(작업공간)에서 Git이 추적할 수 있는 index(staging 영역)으로 옮겨준다. (GIT🧐 : 이제 변경사항이 있는지 우리가 항상 추적 할게! )
➡️git commmit
: 현재 변경된 작업 상태에 대한 점검을 마치고, 원격 저장소(remote repository)로 전송하기 직전의 지역 저장소(local area)로 옮겨준다.
➡️git push
: 커밋되어 HEAD에 존재하는 변경 사항을 원격 저장소(remote repository)로 옮겨준다. ※ 단, 원격저장소에 덮어 씌우기 이전 다른 팀원이git push
했다면 원격저장소가 변경된 상태이므로,git pull
을 먼저 해주어야 다른 팀원의 코드를 날려먹지 않을 수 있다.
➡️git fetch
: git fetch는 로컬 Git에게 원격 저장소에서 최신 메타데이터 정보를 확인하라는 명령을 전달한다. 단 fetch는 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬 Git에 실제로 가져오지는 않다.
➡️git pull
: 원격 저장소에서 변경된 메타데이터 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬 Git에 가져온다.fetch
와merge
명령어가 합쳐진 것이pull
이다.
⭐
git add
와git commit
의 차이:git commit
명령어가 변경 이력을 남길 사점에는 작업 디렉토리에 있는 변경 내용은 고려하지 않고, 스테이징 영역에 넘어온 변경 내용만 사용되기 때문에 이 두 개의 공간을 서로 햇갈려 한다면 난감한 상황에 빠질 수 있다.
이렇게 작업 디렉토리와 스테이징을 구분하면 변경 이력을 남길 때 작업 디렉토리에 있는 변경 내용을 한 번에 몽땅 기록하지 않고, 조금씩 나누어서 기록할 수 있다는 장점이 있다. 이를 통해, 각 변경 기록(commit)에 논리적으로 하나의 변경 사항을 담기가 용이한데 이렇게 하면 나중에 버그를 추적하거나 변경 이력을 롤백(roll back)할 때도 이점이 있다.
$ cd ~