kimgusxo 님의 블로그
1. 깃(Git)의 기본 개념과 역사 본문
1. 깃(Git)이란 무엇인가
- 깃은 분산 버전 관리 시스템(DVCS)으로 소스 코드 및 기타 파일의 변경 이력을 효과적으로 관리할 수 있도록 설계된 도구
1-1. 깃의 특징
- 분산형 관리: 모든 개발자가 전체 레포지토리의 복사본을 로컬에 보유하므로, 네트워크 문제나 중앙 서버 장애 상황에서도 작업을 이어갈 수 있다.
- 빠른 성능: 로컬에서 대부분의 작업(커밋, 브랜치 생성, 로그 확인 등)을 수행하므로 속도가 매우 빠르다.
- 효율적 저장: 변경된 부분만 저장하는 방식(Date Encoding)을 사용하여 저장 공간을 절약한다.
- 유연성: 브랜치를 통한 병렬 개발 및 실험적 개발이 가능해 다양한 협업 시나리오에 대응할 수 있다.
2. 깃의 탄생 배경
- 2005년 리누스 토르발스(Linus Torvalds)가 리눅스 커널 개발을 위해 기존 사용되던 중앙 집중형 버전 관리 시스템과 대규모 코드베이스의 한계를 극복하고자 만들었다.
3. 깃 용어 정리
- 레포지토리(Repository): 모든 파일과 변경 이력을 저장하는 데이터베이스
- 로컬 레포지토리: 개발자의 컴퓨터에 저장된 레포지토리
- 원격 레포지토리: Github, GitLab 등 서버에 저장된 레포지토리
- 커밋(Commit): 하나의 변경 사항을 스냅샷으로 기록한 것으로 작성자, 날짜, 메세지 등이 함께 기록된다.
- 작업 디렉토리(Working Directory): 사용자가 현재 작업중인 파일들이 위치한 영역이며 커밋 전의 상태를 확인 할 수 있다.
- 스테이징 영역(Staging Area): 커밋할 파일과 변경사항을 임시로 보관하는 곳으로 어떤 변경을 커밋할 지 선택할 수 있다.
- 브랜치(Branch): 코드베이스의 독립적인 작업 흐름을 만들기 위해 사용된다, 각 기능 개발이나 버그 수정을 별도의 브랜치에서 진행한 후 메인 브랜치에 병합할 수 있다.
- 체크아웃(CheckOut): 특정 브랜치나 커밋, 파일의 상태로 작업 공간을 전환하는 명령어이다. 다른 브랜치로 이동하거나 특정 파일 버전을 복원할 때 사용한다.
- 머지(Merge): 여러 브랜치에서 작업한 내용을 하나로 합치는 과정이다. 병합 시 변경 내용이 충돌(Conflict)할 수 있으며 해결해야한다.
- 리베이스(Rebase): 한 브랜치의 커밋들을 다른 브랜치 위에 재배치하여 깔끔한 커밋 히스토리를 만드는 방법이다.
- 푸쉬(Push): 로컬 레포지토리의 커밋을 원격 레포지토리에 업로드하여 공유하는 명령어이다.
- 풀(Pull): 원격 레포지토리의 변경 사항을 로컬로 가져오고 병합하는 작업
- 롤백(Rollback): 문제가 발생했을 때 이전의 안정적인 상태로 되돌리는 작업을 의미한다.
- 리셋(Reset): 특정 커밋 상태로 HEAD를 이동시켜 커밋 기록을 수정하거나 되돌릴 때 사용한다.
- 리버트(Revert): 기존 커밋의 변경 사항을 무효화하는 새로운 커밋을 생성하여 안전하게 변경 사항을 취소한다.
- 태그(Tag): 특정 커밋을 중요 버전이나 릴리즈 지점으로 표시하기 위해 사용한다
- 디프(Diff): 두 커밋 간 혹은 워킹 디렉토리와 스테이징 영역 간의 차이점을 비교하여 보여주는 명령어이다.
- 로그(Log): 커밋 히스토리를 시간 순서대로 확인 할 수 있는 명령어로 변경 내역을 추적할 때 주로 사용한다.
- 블레임(Blame): 특정 파일의 각 라인이 마지막으로 수정된 커밋과 작성자를 확인할 수 있는 도구이다.
- 스태시(Stash): 작업 중이지만 아직 커밋할 준비가 되지 않은 변경 사항을 임시로 저장해두는 기능이다, 다른 브랜치로 전환 후 다시 복원하여 작업을 이어나갈 수 있다.
- 체리픽(Cherry-pick): 다른 브랜치에 있는 특정 커밋 하나를 선택하여 현재 브랜치에 적용하는 명령어이다.
- 풀 리퀘스트(Pull Request): 원격 저장소에서 특정 브랜치의 변경 사항을 메인 브랜치에 병합하기 위해 요청하는 프로세스이다, 코드 리뷰, 토론, 테스트 과정을 거쳐 최종 병합 여부를 결정한다.
- 포크(Fork): 다른 사용자의 리포지토리를 자신의 계정으로 복제하여 독자적으로 수정하고, 이후 원본 리포지토리에 기여할 수 있도록 하는 기능이다.
- 클론(Clone): 원격 레포지토리의 전체 내용을 로컬에 복제하여 로컬 환경에서 작업을 진행할 수 있도록 하는 명령어이다.
- 리모트(Remote): 로컬 레포지토리와 연결된 원격 저장소를 의미한다, 기본적으로 origin이라는 이름이 할당되며 추가로 여러 리모트를 설정할 수 있다.
4. 분산 버전 관리의 장점
- 안정성 및 백업: 모든 개발자가 전체 이력을 보유하고 있으므로, 한 곳의 손실로 인한 데이터 손상이 없다.
- 병렬 작업: 각 개발자가 자신의 브랜치에서 독립적으로 작업한 후 필요 시 메인 브랜치에 병합할 수 있어, 충돌을 최소화할 수 있습니다.
- 이력 추적 및 되돌리기: 커밋 단위로 변경 사항을 추적할 수 있어, 문제가 발생 했을 때 특정 시점으로 손쉽게 되돌릴 수 있다.
- 효율적인 협업: 여러 개발자가 동시에 기능 개발, 버그 수정 등 다양한 작업을 진행하며 풀 리퀘스트와 코드 리뷰를 통해 코드 품질을 유지할 수 있습니다.
- 확장성: 포크와 클론 기능을 통해오픈 소스 프로젝트에 기여하거나 여러 팀이 분산되 환경에서 독립적으로 작업할 수 있다.
'Git' 카테고리의 다른 글
6. 깃 기초 활용 마무리 (0) | 2025.04.08 |
---|---|
5. 깃과 깃허브를 활용한 협업 및 프로젝트 관리 (0) | 2025.03.29 |
4. 깃허브(Github)의 기본 기능 및 활용 (0) | 2025.03.27 |
3. 깃 브랜치, 병합 및 협업 전략 (0) | 2025.03.26 |
2. 깃 설치 및 환경 설정, 기본 명령어 (0) | 2025.03.05 |