Git은 VCS (Version Control System)다. 여기서 version은 소스코드(sourcecode) 파일의 version을 뜻한다. 한마디로 소스코드(soruce code)의 변경사항 내역을 관리하는 시스템이다. 참고로 소스코드란 코드 파일들을 의미. (server.js 같은 파일이 소스코드!)
개발을 잘 모르거나 막 배우기 시작한 입문자에게는 Git과 Github는 신세계처럼 들릴 거 같다. 개발자라면 뗄래야 뗄 수 없는 존재가 Git과 Github인 거 같다.
매우 매우 중요하다는 뜻!
개발자는 혼자 일하기도 하지만 대부분은 팀 단위로 협업을 하게 된다. 여러명이 함께 한 시스템을 나눠서 만들때 누가 어떤 코드를 언제 어떻게 바꿨는지 변경 내역을 확인하고 관리할 수 있다.
또 최신 코드파일에 문제가 생겨서 이전 코드로 다시 되돌려야 할 경우도 많이 발생하기 때문에 Git과 Github가 개발자에게는 거의 필수라고 볼 수 있다.
정리하자면 VCS의 기능은 다음과 같다
참고 블로그: https://nanite.tistory.com/39
작업공간 (workplace) :
PC(개인 컴퓨터)환경에서 소스코드를 편집하는 일반적인 프로젝트 폴더를 일컫는 말
저장소(repository) :
작업공간을 Git이 제공하는 자료구조 안에 압축시켜 놓은 것. 저장소는 로컬저장소와 원격저장소로 나누어진다. 일반적으로 저장소라고 하면 로컬 저장소를 가리킨다. git init
명령어로 해당 작업공간의 저장소를 생성하면 작업공간 하위에 .git이라는 이름의 폴더가 생긴다. 작업공간 안의 .git 폴더가 바로 로컬 Git 저장소. 이 저장소 안에 모든 커밋Commit들이 들어있다.
원격 저장소(remote repository) :
저장소가 내 PC의 프로젝트 폴더 안이 아닌 서버에 위치해 있는걸 원격 저장소라고 한다. 원격 저장소를 사용하면 여러 사람이 서버에 있는 하나의 저장소를 공유해서 공동으로 작업할 수 있다.
커밋(commit) :
<명사> 어떤 순간 작업공간의 상태를 저장한 것입. 작업공간 안에 있는 모든 파일과 파일의 데이터를 사진 찍듯이 복사해서 저장소에 보존한다. 즉 커밋은 작업공간의 어떤 시점의 스냅샷이라고 할 수 있다.
<동사> '커밋한다'는 말은 커밋을 추가한다는 뜻. 현재 작업공간의 상태를 커밋으로 만들어서 저장소에 저장한다는 의미다.
스테이지(stage) :
작업공간에서 변경이 발생한 파일을 다음 커밋에 포함되도록 예약하는 것을 추적이라고 한다. 어떤 파일을 추적하면 그 파일을 스테이지 되었다고 한다. 추적되는 파일은 스테이지 영역(stage area)에 들어가있다. 추적하고 있는 파일을 스테이지 영역에서 제외하는 것은 unstage라고 한다.
일단 나는 임시저장 개념으로 이해했다...
브랜치(branch) : 커밋에서 분기하면 브랜치가 된다. 말 그대로 한 갈래; 가지를 의미
master : 기본 설정된 브랜치에 붙는 이름.
origin : 기본 설정된 원격 주소에 붙는 별명.
머징(Merging) : 각각의 브랜치에서 만든 소스코드를 다시 master에 합치는 기능
Pull Requests : 각각의 브랜치에서 개발하여 커밋한 소스코드를 기본 저장소에 합치는 것을 요청하는 과정
git init
프로젝트를 git repository로 만들기 위해서 사용하는 명령어. 여기서 프로젝트(project)라 함은 개발하고자 하는 소스코드들이 있는 디렉토리를 뜻한다. git init을 해서 git repo로 만들어야 git으로 버전 관리가 시작된다.
git add
수정 사항들, 즉 modified 파일들을 staged 상태로 옮기고자 할때 사용하는 명령어. git repo에 새로이 추가된 파일들을 staged 상태로 옮길때도 사용한다. 새로 추가된 파일들은 "untracked" 파일 이라고 하는데, git에서는 이들도 수정 사항으로 본다.
git commit
staged 된 파일들을 commit 하고자 할때 사용하는 명령어.
git diff
어떤 수정 사항들이 적용됐는지 볼때 사용하는 명령어. staged 된 수정 사항들은 git diff로 볼 수 없고 Modified 된 파일들만 git diff로 볼 수 있다.
git status
현재 상태를 보여주는 명령어. 어떤 파일들이 modified가 되었고 어떤 파일들이 staged가 되었는지 등의 전체적인 상황을 보여준다.
git log
Commit 내역들을 보여준다. Commit history라고도 함. git log를 통해 이제까지 커밋 내역들을 전부 볼 수 있다. 다만 출력되는 포맷이 보기가 쉽지가 않아서 tig 같은 tool을 사용하면 편리하다.
git rm
원하는 파일을 git repo에서 삭제하는 명령어.
git mv
원하는 파일을 git repo 상에서 이동 시킬때 사용. 주로 rename 할 때 많이 사용한다.
git branch
Branch를 생성. 뒤에 브랜치 이름을 적는다.
git checkout
어떤 branch를 checkout 할때 사용되는 명령어.