컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템
Git은 버전 관리 시스템(VCS)
이다. 그렇다면 버전 관리 시스템을 왜 써야할까?
과제를 하다보면 완성, 진짜 완성, 진짜진짜 완성, 최종 등으로 다양한 파일들이 만들어진다. 이런 식으로 파일들이 늘어나다 보면 어떤 내용이 수정되었는지 확인하기 어렵고, 변경되기 전 자신이 원하는 부분을 되돌리기도 힘들다.
이런 문제를 해결하는 것이 바로 버전 관리 시스템(VCS)이다.
버전 관리 시스템이란, 시간에 따라 파일의 변화를 기록하여 필요한 순간에 특정 시점의 버전을 다시 꺼내올 수 있도록 하는 시스템을 말한다.
이를 통해 우리는 최종본을 만들기까지 어떤 과정을 거쳤는지 지난 과정들을 확인할 수 있고, 과정 도중 오류가 생기면 이전 버전으로 돌아갈 수 있다.
또한, git은 여러 개발자들이 협업할 수 있도록 돕는 기능을 가지고 있다. 개발할 때는 보통 프로그램을 기능별로 나누고 각 기능마다 여러 개발자들이 나누어 개발을 진행하는데, git을 이용하면 이렇게 나누어 작성된 코드를 하나로 모을 수 있다.
working directory
: 작업을 하는 프로젝트 디렉토리
staging area
: git add를 한 파일들이 존재하는 곳으로, 커밋을 하게 되면 staging area에 있는 파일들만 커밋에 반영
staging area가 필요한 이유는 무엇일까?
만약
staging area
가 없다면 원하는 것들만 선별적으로 커밋에 반영할 수 없음.다음 커밋에 반영하고 싶지 않은 파일이 있을 수 있으므로, 세밀한 버전 관리를 하기 위해 필요함.
repository
: working directory의 변경 이력들이 저장되어 있는 곳
다시 정리하자면,
- 처음 코드 작성 시에는 파일이 working directory에 위치함.
- git add 실행 시 staging area로 이동함
- git commit -m "커밋메시지" 실행 시 로컬 레포지토리로 커밋
- git reset 실행 시 저장된 기록으로 수정
VSCode 단축키
터미널 보기 및 켜기 :Ctrl+`
git init
: 현재 디렉토리를 Git이 관리하는 프로젝트 디렉토리(working directory)로 설정하고 그 안에 레포지토리(.git 디렉토리)를 생성하는 커맨드
git config --global user.name "사용자이름"
: 현재 사용자 이름을 설정하는 커맨드
git config --global user.email "사용자이름"
: 현재 사용자의 이메일 주소를 설정하는 커맨드
git add [파일 이름]
: 수정 사항이 있는 특정 파일을 staging area에 올리는 커맨드.
git add ~
git add 디렉토리명
: add 뒤에 디렉토리명이 들어가면 해당 디렉토리 내에서 수정 사항이 있는 모든 파일들을 staging area에 올림
git add .
: working directory 내의 수정 사항이 있는 모든 파일들을 staging area에 올림
git reset [파일 이름]
: staging area에 올렸던 파일을 다시 내리는 커맨드
git status
: Git이 현재 인식하고 있는 프로젝트 관련 내용들을 출력하는 커맨드
git commit -m "커밋 메시지"
: 현재 staging area에 올라와 있는 것들을 커밋으로 남기는 커맨드
독립적으로 어떤 작업을 진행하기 위한 개념
📌 왜 Branch를 써야할까?
master
: 레포지토리를 만들고 커밋을 하면 자동으로 생기는 브랜치프로젝트를 진행하다 보면 딱 하나의 코드 관리 흐름으로만 순조롭게 진행할 수 있는 경우는 드물다. 대개는 여러 버전(새로운 기능 추가한 A 버전, 버그 수정한 B 버전…)으로 개발이 진행된다.
이 경우, 두 개의 서로 다른 프로젝트를 진행하기 보다는 하나의 프로젝트 내에서 브랜치 두 개를 만드는 것이 효율적이다. 즉, 하나의 프로젝트에 두 개의 버전을 만드는 것이다.
필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.
git branch [새 브랜치 이름]
: 새로운 브랜치를 생성하는 커맨드
git branch -d [기존 브랜치 이름]
: 브랜치를 삭제하는 커맨드
git checkout -b [새 브랜치 이름]
: 새로운 브랜치를 생성하고 그 브랜치로 바로 이동하는 커맨드
새 브랜치 이름 대신 기존 브랜치 이름이 들어가면 해당 브랜치로 이동
git merge [기존 브랜치 이름]
: 현재 브랜치에 다른 브랜치를 merge(병합)하는 커맨드
--abort 옵션을 붙이면 merge를 하다가 CONFLICT가 발생했을 때, 일단 merge 작업을 취소하고 이전 상태로 돌아감
git push -u(or --set-upstream) origin master
: 로컬 레포지토리의 내용을 처음으로 리모트 레포지토리에 올릴 때 사용하는 커맨드
git push
: 로컬 레포지토리의 내용을 리모트 레포지토리에 올리는 커맨드
git pull
: 리모트 레포지토리의 내용을 로컬 레포지토리로 가져오는 커맨드
git clone
: [프로젝트 GitHub 상 주소]는 GitHub에 있는 프로젝트를 내 컴퓨터로 가져오는 커맨드