
Git은 가장 많이 사용되는 DVCS(분산 버전 관리 시스템)이다. 기존의 델타 방식 시스템과 다른 점은 데이터를 스냅샷의 스트림처럼 취급한다는 점이다. 변경 사항이 생길 경우 변경된 부분만 저장하는 것이 아닌 파일 시스템 전체를 저장한다. 이러한 스냅샷들이 모여서 시간의 흐름에 따라 변경된 내용을 추적하는 방식으로 데이터를 관리 한다.
Git의 장점은 다음과 같다.
거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크가 없는 환경에서도 작업이 가능하다. 히스토리 조회나 커밋을 할 때도 로컬 파일 내에서 할 수 있기 때문에 네트워크가 없는 환경에서도 순조롭게 작업이 가능하다.
위의 장점에서 이어지는 항목인데, 네트워크 환경이 없는 곳에서 개발이 가능한 이유는 병렬 개발이 가능하기 때문이다. Git에는 브랜치라는 기능이 존재하는데, 이를 활용하면 각각의 독립적인 개발 라인을 하나의 프로그램으로 병합하는 것이 가능하다.
Git을 사용하기 위해서는 로컬 파일을 저장하는 저장소가 필요하다. 이는 ‘Github’이라는 서비스가 수행하는데, 이를 사용하기 위해서는 Github.com에 먼저 가입하여야 한다.
위 링크를 통해 Github에 가입하면 다음과 같은 화면이 나온다.

Github을 통해 프로젝트를 관리하기 위해서는 우선 각 프로젝트를 관리할 repository(저장소)가 필요하다. 좌측의 New 버튼을 누르면 새로운 repository를 만들 수 있다.

그러면 이러한 화면이 나오는데, 여기서는 이름과 공개 여부만 설정해주면 된다. 그 아래 나머지는 추후에 설정이 가능하기 때문에 지금은 신경쓰지말자

repository를 생성하면 다음과 같은 화면이 나온다.
우리는 여기서 가장 위에 ‘.git’으로 끝나는 주소만 잘 기억하고 있으면 된다.
위 링크로 들어가면 Git을 다운로드 할 수 있게 안내해준다.
Windows
MacOS
$ brew install git
Mac은 homebrew로 설치하면 된다.
Linux/Unix
Linux/Unix는 버전에 맞는 명령어를 입력하여 설치한다.
본격적으로 Git을 사용하기 이전에 가장 먼저해야 될 것이다. 설치한 Git에 Github Account 정보를 등록하여야 서버 저장소와 연동이 가능하다. 최초 한번만 설정하면 이후 Git을 사용할 때 매번 지정하지 않아도 된다.
$ git config --global user.name "User Name"
$ git config --global user.email "Example@example.com"
이후 아래 명령어로 잘 등록되었는지 확인할 수 있다.
$ git config --list
config가 완료되었다면 아까 만들어둔 repository에 파일을 업로드할 준비를 할 순서이다.
먼저, 이용할 로컬 저장소로 이동한다. 아까 만든 repository에 업로드 될 파일들이 존재하는 곳이다.
이동하였다면 다음 명령어를 입력해준다.
$ git init
git init은 해당 디렉토리를 로컬 저장소로 지정해주는 명령어다. Git이 해당 디렉토리를 지켜보면서, 내부 파일들의 추가, 수정, 삭제 등을 감지할 수 있게 된다.
다음은 리모트 저장소를 연결하여야 한다.
$ git remote add origin repository-address
repository-address부분에 아까 기억하라고 했던 그 주소(~.git)를 입력하면 된다.
다음은 로컬 저장소 안의 파일들을 스테이지 위에 올릴 차례이다.
여기서 스테이지라는 용어가 나오는데, 이를 알기 위해서는 Git에서의 세 가지 상태를 먼저 알아야 한다.
💡 Git의 세 가지 상태 (출처: https://git-scm.com/book/ko/v2/시작하기-Git-기초)
Git은 파일을 Commited, Modified, Staged 이렇게 세 가지 상태로 관리한다.
- Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
- Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않는 것을 의미한다.
- Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
Git의 공식 사이트에서는 세 가지만 언급하고 있지만, 좀 더 명확하게 이해하기 위해서는 unmodified 상태를 추가하여 네 가지 상태로 이해하는 것이 좋다. 로컬 저장소에서 파일이 관리되는 순서는 다음과 같다.
위에서 스테이지 위에 올린다는 의미는 수정된 파일 즉, modified 상태인 파일을 Staging Area에 올린다는 의미이다. 우리는 이것을 스테이징(staging)이라고 한다.
$ git add .
# or
$ git add 파일명
add 다음의 ‘.’은 모든 파일을 의미한다. 특정 파일만 스테이지 위에 올리고 싶으면 ‘.’ 위치에 해당 파일명을 적으면 된다.
드디어 커밋을 해볼 차례이다!
커밋이란 수정되기 전 파일로부터 수정된 후 파일이 되기까지의 변경 이력을 기록해 놓는 것이라고 할 수 있다.
위에서 언급했듯이 staged 상태인 파일들을 커밋하면 commited 상태로 변경되며, repository에 기록된다.
-m 이라는 옵션을 사용하면 커밋 메시지를 적을 수 있는데, 여기에 자신이 어떤 파일을 어떻게 수정했는지 기록할 수 있다.
$ git commit -m "커밋 메시지"
로컬에서 그동안의 커밋 내역들을 보고 싶으면 다음 명령어로 확인하면된다.
$ git log
커밋된 파일들은 리모트 저장소에 업로드할 수 있다.
# git push (리모트 저장소 별칭) (브랜치명)
$ git push origin master
마지막에 브랜치명은 다음 파트에 좀 더 자세하게 설명하겠지만, 일반적으로 처음 생성하면 master 또는 main 이라는 이름으로 생성된다.

결과적으로 잘 업로드 된 것을 볼 수 있다.
Git, 1.3 시작하기 - Git 기초, https://git-scm.com/book/ko/v2/시작하기-Git-기초