Git 이란 ?
형상 관리 도구 중 하나이다. 버전관리 시스템이라고도 불리운다.
Git 은 분산형 관리 시스템이다. 소스코드를 여러 개발 pc의 저장소에 분산해서 저장한다.
그렇기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며, 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다.
Git의 장점
소스코드를 주고 받을 필요없이, 같은 파일을 여러명이 동시에 작업하는 병렬 개발이 가능하다.
즉, 브랜치를 통해 개발한 뒤, 본 프로그램에 합치는 방식(Merge)로 진행할 수 있다.
분산 버전 관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 중앙 저장소가 날아가도 다시 원상 복구할 수 있다. 프로그램이나 패치를 배포하는 과정도 간단해진다. (pull을 통한 업데이트, patch 파일 배포)
Git과 github
- git : 형상 관리 도구 (버전 관리 시스템)
- github : 형상 관리도구 (버전 관리) 웹 호스팅 서비스
Git (형상 관리 도구)
프로젝트를 진행하면서 소스 코드를 USB나 메일로 주고 받는 건 엄청난 낭비임과 동시에 보안성 위험이 있다. 그렇기 때문에 형상 관리 도구를 사용한다. 형상 관리 도구를 사용하면 변경을 쉽게 되돌릴 수 있다. 소스코드를 과거 특정 시점 으로 스냅샷 처럼 되돌리거나, 특정 시점의 변경 사항을 취소하거나, 두버전의 소스코드를 비교하는 등의 일이 가능하다.
Git 웹 호스팅 시스템
협업하고 있는 코드를 저장할 서버가 필요하다. 버전관리 시스템을 지원하는 웹호스팅 서비스의 기능을 통해 push, pull, request 같은 이벤트에 반응하여 자동으로 작업(배포 등)을 실행할 수 있다.
Git GUI
너무 많은 git 명령어를 자유자재로 외울 자신이 없을 때에는 GUI를 사용할 수도 있다.
Github Desktop, SourceTree, GitKraken..
관련 용어
- Repositiory : 저장소를 의미, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인 할 수 있다.
- Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점
- Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치
- Commit : 현재 변경된 작업 상태를 점검을 마치면 저장소에 저장하는 작업
- Head : 현재 작업중인 Branch를 가르킨다
- Branch : 가지 또는 분기점을 의미, 작업을 할때 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶으면 Merge를 하여 작업을 한다
- Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미
기초 명령어
git init
- 버전 관리하고 싶은 폴더에서 초기화를 하는 준비
git branch
- 독립적인 공간을 만든다.
- 새로 만든 branch lab1은 master와 완전히 동일한 상태를 가진다.
- 브랜치에서 수정을 한 후 commit하면 lab1에만 기록되며 master 브랜치에는 아무런 영향도 주지 않는다.
- 원하는 만큼 빠르게 브랜치를 만들 수 있다.
- 실험 중 다른 브랜치로 돌아가야 할 때 : checkout master 로 head를 옮겨야 한다. (작업 중인 위치를 가르키는 가상의 커서가 존재하는데 이를 git에서는 head라 한다)
- 실험 성공 : lab1 브랜치의 내용을 마스터 브랜치와 병합(Merge) 한다.
- 실험 실패 : lab1 브랜치를 삭제한다.
checkout
- 독립된 작업 공간인 브랜치를 자유롭게 이동할 수 있다.
git commit
- 의미있는 수정 작업이 끝났을 때 마침을 알리는 작업
pull
- 리모트 저장소의 변경된 내용을 로컬(내 컴푸터)저장소에 적용하는 작업
master
- git init을 했을 때, default로 만들어지는 가지가 master 이다
동료와 함께 작업
git은 remote 저장소를 지원한다.
github가 바로 remote 저장소 이다.
bitbucket은 5명까지 공동 작업이 가능하다. (그 이상은 유료)
github는 private가 유료이다.