Git, 깃의 기본적인 사용 방법을 알아보자.
깃이란 무엇인가?
깃은 분산형 저장관리 시스템의 한 솔루션이다.
분산형 버전관리 시스템을 깃이라고 부르는 것이 아니다.
분산형 버전관리 시스템을 구현한 소프트웨어 중 하나가 깃이다.
깃 서버(Git server)
중앙 집중형 버전관리 시스템과 유사하게
분산형 버전관리 시스템 또한 변경기록과 소스코드를 저장하는 서버가 있다.
깃에서는 그 서버를 ‘깃 서버’ 라고 부른다. (Git Server)
깃 클라이언트(Git client)
그리고 PC에서 깃 서버를 사용하기 위해 사용하는 소프트웨어는 Git Client(깃 클라이언트) 라고 한다.
깃허브는 뭔데?
깃이랑 깃허브가 무엇인지 혼동이 있을 수 있다.
깃은 위에서 말했듯이 분산형 버전관리 시스템을 구현한 소프트웨어이며
깃허브는 깃 서버를 운영하는 회사(=서비스)를 말한다.
깃허브는 깃 서버를 독점한 회사가 아니다. gitlab과 같은 다른 회사들도 있다.
깃 클라이언트에 대해
깃 클라이언트의 설치
깃을 쓰려면 깃 클라이언트가 있어야 한다. 맥은 유닉스가 전신이라 그런지 기본 설치되어 있다.
윈도우는 깃 클라이언트를 설치해줘야 한다.
https://git-scm.com/downloads/guis
깃, 4 개의 공간
버전관리 시스템은 소스코드 및 변경기록을 저장하고 관리하는 것이다.
분산형 버전관리 시스템은 로컬에도 그 변경기록과 소스코드의 저장소(Repository)를 운영하는 것이 차이점이다.
위 그림을 보자. 네 가지 공간이 보인다.
세 공간은 로컬에 있고, 한 공간은 리모트에 있다.
1. Working Directory
2. Staging Area
3. Local Repository
4. Remote Repository
이들을 이해하면 깃, 그러니까 분산형 버전관리 시스템을 이해할 수 있다. 그래서 아래는 깃 사용법을 이해하기 위해 가장 중요한 내용이다.
- Working Directory: 실제 작업을 하는 공간으로 윈도우 탐색기나 맥의 파인더로 보고 있는 폴더 및 파일들이 Working Directory에 있다고 할 수 있다.
- Staging Area: 백업을 할 대상들이 모여있는 가상의 공간이다. 백업을 하는 것을 보통 Snapshot을 찍는다고 하는데, 이 스냅샷을 찍는 무대인 스테이지를 의미한다. (저장장치에 이 공간이 실제로 생기는 것은 아니다.
- Local Repository: Staging Area에 있는 파일과 디렉토리를 실제로 백업(Commit)을 하면 로컬 저장장치에 실제로 저장된다. 그 저장소를 말하는 공간이다.
- Remote Repository: Github, Gitlab 등 깃 서버에 존재하는 원격의 저장소 공간을 말한다.
분산형 버전관리 시스템은 Working Directory 에서 개발을 하면서 발생하는 소스코드 및 변경기록을 Staging Area, Local Repository, Remote Repository에 순서대로 백업하며 관리하는 소프트웨어인 것이다.
4 개의 공간을 오가는 방법
작업을 하는 Working Directory에서 어떤 것이 백업이 될 대상인지를 정하는 것이 Staging Area 이다. 이는 git add
명령어로 대상을 결정하여 working directory에서 staging area로 보낸다. 현재 경로 이하를 전부 다 스냅샷 대상으로 추가하려는 경우는 git add .
라고 명령하면 된다.
이렇게 명령한 경우 .git 폴더 내부의 index 파일에 어떤 파일과 디렉토리가 스냅샷으로 찍힐지 데이터를 입력한다. 스테이지에 올린 파일들을 빼고 싶다면
git restore
명령어를 알아보자. (참고로 맥에서 이름 앞에 .이 붙으면 히든인 폴더 혹은 파일이다. 파인더 옵션에서 보이도록 해야 한다. 단축키는 cmd + shift + . 이다.)
Staging Area에서 Local Repository에 소스코드와 변경기록을 실제로 저장하는 명령이 git commit
이다. 물론 단순히 저 명령어만 입력한다고 커밋이 완료되지는 않는다. 커밋을 했다면 그 사유와 변경 내용이 있을테고, 그러한 내용을 남기지 않으면 매우 비효율적일 것이다. 깃은 커밋에 코멘트를 꼭 남기도록 되어 있다. 간단히 한 줄로 커밋을 하려면 이렇게 하면 된다. git commit -m "$코멘트내용"
리포지토리는 내 PC에 있는 로컬 리포지토리와, 깃 서버에 있는 리모트 리포지토리로 분산된다. 여러 개발자들과 협업해야 하므로 서버의 리포지토리에 각각의 개발자들이 작업한 내역을 전송한다. 즉, 로컬 리포지토리의 데이터를 깃 서버에 동기화한다. 이것을 로컬의 데이터를 서버에 밀어넣는, PUSH 한다고 표현한다. 그래서 로컬 리포지토리를 깃 서버에 올리는 것은 git push
명령어를 쓴다. 이렇게 로컬 리포지토리를 Push하여 서버의 리포지토리가 업데이트된다.
다수의 개발자들이 프로젝트에 참여하는 경우엔 반대로 나의 로컬 리포지토리가 서버의 리포지토리보다 오래된 저장소일 수 있다. 다른 개발자가 로컬 리포지토리를 Push하여 리모트 리포지토리를 업데이트한 경우에 그렇다. 이럴 때는 반대로 서버의 리포지토리를 기준으로 나의 컴퓨터(로컬)에 있는 리포지토리를 업데이트 해야 한다. 이것은 간단히 git pull
명령어를 통해 할 수 있다.
리모트 리포지토리에 있는 프로젝트 가져오기(Clone)
리모트 리포지토리를 내 PC에 복사해서 로컬 리포지토리를 만들고 싶다면 방법은 간단하다.
git clone $URL
해당 리포지토리의 URL만 알면 된다.