Git이란?
Git은 프로젝트의 시간과 차원을 자유롭게 넘나들 수 있도록 해주는 분산 버전 관리 시스템(Distributed Version Control System, DVCS)입니다.
Git을 사용하면 파일의 변경 내역을 기록하고, 특정 시점으로 되돌리거나 변경 내용을 비교할 수 있습니다.
버전 관리 시스템(VCS, Version Control System)이란?
데이터나 프로그램 등의 파일을 버전별로 관리하고, 협업을 원활하게 진행할 수 있도록 도와주는 도구입니다.
파일의 변경 사항을 추적, 관리, 백업, 복구, 공유할 수 있으며 대표적인 버전 관리 시스템으로는 Git, Subversion(SVN), Mercurial 등이 있습니다.
Git의 주요 기능
-
시간 관리:
- 프로젝트의 버전을 과거로 되돌리거나 특정 변경 내역을 취소할 수 있습니다.
- 과거 작업 기록을 확인하거나, 잘못된 변경 사항을 되돌리는 것이 가능합니다.
git checkout, git reset, git revert 등의 기능을 이용하여 특정 시점의 코드 상태를 복원할 수 있습니다.
-
차원 관리 (브랜치 기능):
- 프로젝트의 여러 모드(브랜치)를 쉽게 전환하고 관리할 수 있습니다.
- 새로운 기능을 개발하거나 실험할 때 기존 작업에 영향을 주지 않고 독립적으로 작업할 수 있습니다.
-
협업 지원:
- 여러 개발자가 동시에 같은 프로젝트에서 작업할 수 있도록 도와줍니다.
- 코드 충돌을 해결하거나 변경 사항을 통합하는 기능을 제공합니다.
- GitHub, GitLab, Bitbucket과 같은 원격 저장소를 사용하여 협업할 수 있습니다.
Git의 필요성
Git이 없다면 프로그램 소스의 변경 사항을 확인하기 어렵습니다.
특정 변경이 일어나기 전으로 되돌리거나, 협업을 진행하는 것이 매우 어려울 수 있습니다.
- 파일의 변경 이력을 쉽게 관리
git log 명령어를 통해 파일의 변경 이력을 확인할 수 있습니다.
- 언제, 누가, 어떤 변경을 했는지 추적할 수 있습니다.
- 특정 시점으로 되돌리기 용이
git switch, git reset, git revert 등의 명령어를 통해 특정 버전으로 돌아갈 수 있습니다.
- 동료 개발자와 소스코드를 공유하고 협업 가능
git push를 통해 GitHub 같은 원격 저장소로 코드를 공유할 수 있습니다.
git pull을 통해 최신 코드를 받아 협업할 수 있습니다.
Git의 장점
Git은 SVN(Subversion)과 비교하여 다음과 같은 장점을 가지고 있습니다.
1. 분산 버전 관리 시스템(Distributed Version Control System, DVCS)
- Git은 중앙 서버 없이도 로컬에서 버전 관리가 가능합니다.
- 개발자는 인터넷 연결 없이도 로컬 저장소(Local Repository)에서 커밋과 브랜치 작업을 수행할 수 있습니다.
- SVN은 중앙 서버에서만 버전 관리가 가능하기 때문에 인터넷이 없으면 작업이 어렵습니다.
2. 빠른 속도
- Git은 모든 버전 이력을 로컬에 저장하므로, SVN처럼 서버와 매번 통신할 필요 없이 빠르게 작업할 수 있습니다.
- 파일을 비교하고 저장할 때 전체 데이터를 저장하지 않고 스냅샷(snapshot) 방식으로 관리하여 빠르고 성능이 뛰어납니다.
- 반면, SVN은 변경된 파일의 차이(델타)만 저장하는 방식이라 속도가 느릴 수 있습니다.
3. 효율적인 브랜치 관리
- Git에서는 브랜치를 쉽게 만들고 관리할 수 있으며, 브랜치 이동이 간편하고 빠릅니다.
- 브랜치를 활용하여 여러 명이 동시에 독립적으로 개발할 수 있습니다.
- 반면, SVN은 브랜치 생성과 이동이 어렵고, 작업 속도가 느립니다.
4. 데이터 무결성 보장
- Git은 파일의 모든 데이터를 SHA-1 해시값(체크섬)으로 관리하여 데이터 변조를 방지합니다.
- 데이터 손상이 발생했을 경우, 해시값을 비교하여 문제를 감지하고 복구할 수 있습니다.
- SVN은 중앙 저장소에서 데이터를 관리하기 때문에 서버에 문제가 발생하면 데이터가 손실될 수 있습니다.
Git의 단점
1. 초기 학습 비용이 높음
- 초보자가 Git의 개념(스테이징, 커밋, 브랜치, 머지 등)을 학습하는 데 시간이 필요합니다.
- 명령어가 다양하고 편리하지만, 제대로 사용하지 않으면 충돌, 코드 사라짐 등의 문제가 발생할 수 있습니다.
2. 충돌(conflict) 해결이 필요함
- 여러 개발자가 같은 파일을 동시에 수정하면 충돌이 발생할 수 있습니다.
- SVN은 파일 잠금 기능이 있어 충돌을 방지할 수 있지만, Git은 파일 잠금 기능이 없기 때문에 브랜치 전략과 코드 리뷰를 활용하여 충돌을 예방해야 합니다.
3. 대형 프로젝트에서 성능 저하 가능성
- Git은 모든 변경 이력을 로컬에서 관리하기 때문에 대형 프로젝트에서 저장소 크기가 커질 수 있습니다.
- 수십 기가바이트 이상의 큰 프로젝트에서는 클론(clone) 속도가 느려질 수 있으며, 특정 파일을 제외하려면
.gitignore 설정이 필요합니다.
GitHub란?
GitHub는 Git 저장소를 온라인에서 관리하고 협업할 수 있도록 지원하는 클라우드 기반 플랫폼입니다.
Git이 로컬에서 파일의 변경 사항을 추적하고 버전 관리를 수행한다면, GitHub는 이를 클라우드 서버에 저장하여 팀원들과 공유하거나 협업할 수 있도록 지원합니다.
GitHub를 사용하면 원격 저장소를 활용하여 코드 리뷰, 이슈 관리, 풀 리퀘스트(PR) 등을 통해 효율적인 협업이 가능합니다.
GitHub의 주요 기능
-
원격 저장소(Remote Repository):
- GitHub는 프로젝트를 원격 저장소에 저장하여, 어디서나 작업을 이어갈 수 있도록 도와줍니다.
- GitHub 저장소에 변경 사항을 푸시(push)하거나 가져오기(pull)할 수 있습니다.
-
협업 도구:
- 여러 팀원이 동시에 작업하면서, 코드 변경 사항을 효율적으로 관리할 수 있습니다.
- Pull Request를 통해 팀원 간의 코드 리뷰와 의견 교환이 가능합니다.
-
버전 기록 및 이력 관리:
- 모든 커밋 기록을 클라우드에서 관리하며, 언제든지 변경 이력을 확인할 수 있습니다.
-
문서화와 오픈소스 지원:
- 프로젝트에 대한 설명이나 작업 내용을 정리할 수 있는 README.md 파일을 통해 문서화를 지원합니다.
- 누구나 프로젝트를 공개하거나, 다른 오픈소스 프로젝트에 기여할 수 있습니다.
Git 세팅(Mac)
Git이 설치되어 있는지 확인하려면 아래 명령어를 터미널에 입력합니다:
git --version
Git 최신 버전 설치
Git 설치 확인
Git 설치가 완료되면 다시 아래 명령어를 실행하여 설치된 버전을 확인합니다:
git --version
MacOS Git 설정
- 사용자 정보 설정
Git을 사용할 때, 사용자 이름과 이메일을 설정해야 합니다. 이 정보는 커밋 기록에 포함됩니다:
git config --global user.name "name"
git config --global user.email "email@example.com"
- 설정 확인
설정된 정보를 확인하려면 다음 명령어를 입력합니다:
git config --global user.name
git config --global user.email
또는
git config --global --list
- 기본 브랜치명 변경
아래 명령어를 입력하여 기본 브랜치명을 main으로 변경합니다.
브랜치명을 main으로 변경하는 이유는, 이전의 기본 브랜치명인 master가 포괄적이지 않다는 지적에 따라 main이 표준으로 자리 잡았기 때문입니다.
git config --global init.defaultBranch main