01. 서론
요즘 git을 사용할 일이 많아졌는데, 제대로 쓰기 전에 기본적인 git 원리와 사용방법에 대해서 복습을 한 번 해야할 것 같아서 포스팅하게 되었다.
02. Git 개념
우리가 코드를 작성할 때, 최종 결과물을 만들기까지 다양한 수정과정을 거쳐서 코드를 완성하게 된다. 이때 의도치 않게 코드를 수정할 수 도있고, 수정하기 전 코드의 내용과 비교하고 싶을 때도 있다. 이러한 과정을 효과적으로 도와 주는 것이 분산형 버전 관리 시스템(Version Control System) 이라는 것인데, Git은 이 Version Control System의 종류중 하나이다.
03. Git 작동 구조
Git은 단순히 보면 원격 저장소에 코드를 저장하고 각 로컬 저장소가 가져다 쓰면서 업데이트 하는 구조이다.
이때, 로컬 저장소는 Staging Area와 Local Repository로 구성된다.
git add
git add는 로컬 저장소에 있는 파일 및 코드들을 Staging Area에 추가하게 된다. 이때 변경이 된 파일이나 코드들은 수정되어서 Staging Area에 올라가게 되고 이를 스테이지 되었다고 한다.
git commit
git commit은 스테이지 단계에 있는 코드나 파일들을 Local Repository로 옮기는 역할을 한다.
git push
git push는 Local Repository에 존재하는 파일이나 코드들을 원격 저장소로 업데이트 하게 된다.
git clone
git clone은 원격 저장소에 있는 코드를 로컬 저장소로 복사하는 역할을 수행한다. 기본적으로 main branch를 복사하고 필요에 따라서 git checkout 을 통해 branch를 바꿔줄 수 있다.
git pull
git pull은 이미 로컬 저장소에 존재하는 원격 저장소의 최신 변경사항을 가져오게 된다. 내부적으로 git pull은 git fetch(원격 저장소에 변경사항이 있는지 확인)와 git merge(작업내용을 합침)의 조합으로 동작한다.
04. Git 기본 용어
Git을 사용하려면 알아야하는 간단한 용어 정리를 해보자.
- Repository : Staging Area에 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳. Local Repository와 Remote Repository 두 개가 존재한다.
- Working Tree (Working Directory) : 작업자가 현재 사용하고 있는 디렉토리를 이야기한다.
- SnapShot : 특정 시점에서 파일이나 코드, 폴더, 워크스페이스의 상태를 의미한다. git commit을 실행하면 스냅샷이 저장되게 된다.
- Checkout : 특정 시점으로 돌아가는 걸 의미한다. 특정 커밋이나 특정 브랜치로 넘어가고 싶을때 git checkout 명령어를 통해 해당 브랜치나 시점으로 돌아갈 수 있다.
- Staging Area : 커밋을 준비하는 위치이다. 앞서 언급했듯이 git add 명령어를 통해 수정된 파일이나 코드를 여기에 추가할 수 있다.
- Head : 현재 작업중인 Branch를 가리킨다. 더 구체적으로 말하면 현재 브랜치의 마지막 커밋의 스냅샷을 가리킨다.
- Branch : 저장소에서 일종의 가상환경 역할을 한다. 일반적으로 현재 상태를 복사하여 Branch에서 작업을 하고 이후 git merge 명령어를 통해 main에 브랜치 코드를 합치게 된다.
- Merge : 다른 Branch에서 수정했던 내용을 현재의 Branch에 합치는 작업을 의미한다.
05. Git 호스팅 서비스 종류
Git 저장소 서버를 유지 및 관리해주는 서비스이다. 유명한거로는 GitHub, GitLab, Bitbucket이 있다.
주로 개인은 GitHub을 사용하고 회사는 GitLab이나 Bitbucket을 사용하는 것 같다. 아래 표는 세 개의 깃 저장소를 비교한 표이다.
FEATURES | GITHUB | GITLAB | BITBUCKET |
Free Private Repos | ✔️ | ✔️ | ✔️ |
Merge Request/Issue Templates | ✔️ | ✔️ | |
Integrated CI | ❋ | ✔️ | ✔️ |
Enterprise Plans | ✔️ | ✔️ | ✔️ |
Integrated Project Board | ✔️ | ✔️ | ✔️ |
Navigation Usability | ✔️ | ✔️ | |
Open Source | ✔️ | ||
Self-hosted Option | ✔️ | ✔️ | ✔️ |
Discoverability | ✔️ | ||
AD/LDAP | ✔️ | ✔️ | ✔️ |
LFS File Storage | ✔️ | ✔️ | ✔️ |
Integrated Time Tracking | ❋ | ✔️ | |
Integrated Review Apps | ❋ | ✔️ | ✔️ |
Free, Public Static Web Pages | ✔️ | ✔️ | ✔️ |
Burndown Charts, Project Analytics | ✔️ | ✔️ | |
Third-party Tool Integration | ✔️ | ✔️ | ✔️ |
❋ Available via third-pary apps.
자세한 비교는 아래를 참조 바란다.