CS
💾 [CS] git이란 무엇일까요?
-
분산 버전 관리 시스템(Distributed Version Control System)으로, 소스 코드의 변경 사항을 추적하고 협업을 효율적으로 지원하기 위한 도구입니다.
- Git은 개발자가 소프트웨어 프로젝트의 이력을 관리하고, 동시에 여러 사람과 협력하여 코드를 관리할 수 있도록 설계되었습니다.
1️⃣ Git의 주요 특징.
1️⃣ 분산 버전 관리.
- Git은 중앙 서버뿐 아니라 각 사용자의 컴퓨터에 전체 소스 코드 히스토리를 저장합니다.
- 네트워크 연결이 없어도 로컬에서 모든 기능(브랜치, 커미스 로그 확인 등)을 사용할 수 있습니다.
2️⃣ 빠른 성능.
- Git은 대규모 프로젝트에서도 빠르게 동작하도록 설계되었습니다.
- 로컬에서 동작하므로, 파일 변경 추적, 브랜치 생성, 병합 등이 빠르게 처리됩니다.
3️⃣ 브랜치 기반 워크플로우.
- 브랜치를 쉽게 만들고, 다양한 기능 개발이나 실험을 독립적으로 진행할 수 있습니다.
- 브랜치를 병합(Merge)하거나 삭제할 때도 매우 효율적입니다.
4️⃣ 데이터 무결성 보장.
- Git은 데이터를 변경 불가능한 SHA-1 해시값으로 관리하여 무결성을 보장합니다.
- 코드의 이력과 상태가 손상되거나 변조되는 것을 방지합니다.
5️⃣ 효율적인 협업 지원.
- 개발자 간의 협업에서 발생하는 충돌을 최소화하고, 동시 작업을 효과적으로 관리할 수 있습니다.
- pull, push, merge 등의 명령어를 통해 코드 변경 사항을 공유하고 통합합니다.
2️⃣ Git의 기본 개념.
1️⃣ Repository(저장소)
- 프로젝트와 관련된 모든 파일과 이들의 변경 이력을 저장하는 공간.
- 로컬 저장소(Local Repository)와 원격 저장소(Remote Repository)가 있습니다.
2️⃣ Commit(커밋)
- 변경 사항을 기록하는 스냅샷.
- 프로젝트의 특정 상태를 저장하며, 커밋 메세지를 통해 변경 내용을 설명합니다.
3️⃣ Branch(브랜치)
- 독립적인 작업을 위한 분기점.
- 기본 브랜치는 main 또는 master이며, 새로운 기능이나 실험을 위해 독립적인 브랜치를 생성할 수 있습니다.
4️⃣ Clone(클론)
- 원격 저장소(Remote Repository)를 로컬(Local)로 복제하여 동일한 프로젝트를 시작하는 작업.
5️⃣ Pull(풀)
- 원격 저장소(Remote Repository)의 최신 변경 사항을 가져오는 명령어.
6️⃣ Push(푸시)
- 로컬 저장소(Local Repository)에서 작업한 내용을 원격 저장소(Remote Repository)에 업로드(Upload)하는 명령어.
7️⃣ Merge(병합)
- 한 브랜치(Branch)에서 다른 브랜치(Branch)로 변경 내용을 통합하는 작업.
8️⃣ Staging Area(스테이징 영역)
- 커밋(Commit)하기 전에 변경된 파일을 임시로 저장하는 곳.
- git add 명령어로 변경 사항을 스테이징 영역(Staging Area)에 추가합니다.
3️⃣ Git의 장점.
1️⃣ 효율적인 협업.
- 여러 개발자가 동시에 작업할 수 있도록 브랜치(Branch)와 병합(Merge) 기능을 제공.
2️⃣ 히스토리 관리.
- 프로젝트의 모든 변경 사항을 시간순으로 기록하여 언제든지 과거 상태로 되돌릴 수 있음.
3️⃣ 분산형 구조.
- 네트워크에 의존하지 않고 로컬에서도 작업할 수 있음.
4️⃣ 대규모 프로젝트 지원.
- 대규모 코드베이스에서도 빠르고 안정적으로 동작.
5️⃣ 오픈 소스 및 커뮤니티 지원.
- 오픈 소스 프로젝트로서 활발한 커뮤니트와 다양한 도구 지원.
4️⃣ Git의 단점.
1️⃣ 학습 곡선.
- Git 명령어와 개념이 복잡하여 초보자가 익히는 데 시간이 걸릴 수 있음.
2️⃣ 충돌 관리.
- 협업 중 병합 충돌(Merge Conflict)이 발생하면 수동으로 해결해야 함.
3️⃣ 파일 크기 제한.
- 대용량 바이너리 파일 관리에는 적합하지 않음(Git LFS 사용 필요).
5️⃣ Git이 널리 사용되는 이유.
-
- 오픈소스로 무료 제공.
-
- Github, GitLab, Bitbucket 등의 플랫폼과의 통합.
-
- 다양한 개발 도구(IDE)와의 호환성.
-
- 대규모 협업 프로젝트를 위한 강력한 기능 제공.