분산 버전 관리 시스템
버전 관리
- 코드의 히스토리(버전)를 관리
- 개발 과정에서 이루어진 변경 사항을 추적하고, 이전 버전과의 차이를 비교
- 실수로 파일이 삭제되거나 변경된 경우, 특정 버전으로 복구
분산 버전 관리
- 분산 <-> 중앙 집중
- 중앙 서버에만 의존하지 않고, 모든 참여자가 동일한 데이터베이스의 복사본을 보유하는 시스템
분산의 예
- 블록체인: 네트워크에 연결된 모든 노드가 동일한 데이터를 보유함
- Git: 개발자가 각자의 컴퓨터에 동일한 버전 히스토리를 저장
Git의 데이터 관리 방식
버전 데이터베이스의 특징
- Git은 파일 전체를 복사하지 않고, 변경된 내용만 기록하여 각 버전을 관리
- 원본 파일은 그대로 유지되며, 효율적인 데이터 관리를 제공
데이터 저장 방식
- Git은 각 버전에서 변경된 부분만 저장하므로 디스크 사용량이 적고, 이전 상태로의 복원이 용이
데이터 관리 예시
- 초기 파일 저장: 첫 번째 버전에서 파일 전체가 저장됨
- 변경 사항 기록: 이후 버전에서는 파일 전체가 아닌 변경된 부분만 기록
- 효율적 복구: 변경 사항을 결합하여 파일의 전체 상태를 복구
Git의 구조
컴퓨터 간 데이터 동기화
- 여러 컴퓨터(예: ComputerA, ComputerB, ComputerC)가 각각 동일한 데이터베이스를 보유
- VCS 서버는 중앙 집중식 서버처럼 동작하지만, 없어도 작업 가능함
워크플로우 예시
1. 로컬 저장소에서 변경 사항 커밋
2. 변경 사항을 원격 저장소에 push
3. 다른 컴퓨터에서 pull을 통해 동기화
GitHub, GitLab, Bitbucket..
- Git으로 관리되는 프로젝트를 클라우드에 저장하고 협업할 수 있도록 지원하는 플랫폼
- 중앙 저장소 역할을 하며, 협업 기능을 제공
Git 설치 및 기본 사용법
Git 설치
- Windows
- Google 검색: git downloads for Windows
- 다운로드 및 설치 후 Git Bash를 실행
- macOS
- Terminal에서 사용 가능
설치 확인
git --version
기본 명령어
파일 및 디렉토리 관리
- ls: 현재 위치의 파일 및 폴더 목록 출력
- pwd: 현재 디렉토리 경로 확인
- cd {path}: 경로 이동
- mkdir {name}: 폴더 생성
- touch {name}: 파일 생성
- rm {name}: 파일 삭제
- rm -r {name}: 폴더 삭제
Git 저장소 생성
- 특정 디렉토리를 Git으로 관리하려면 git init 명령어를 사용
git init
- .git 디렉토리가 생성되며, 이 디렉토리에 버전 관리 정보 저장
숨김 파일 확인
- '.'으로 시작하는 파일은 숨김 파일로 처리 -> 숨김 파일까지 확인할 수 있는 명령어
ls -al
추가적인 Git 명령어
- git add {file}: 변경된 파일을 스테이징 영역에 추가
- git commit -m "message": 스테이징된 변경 사항을 저장소에 커밋
- git push: 로컬 변경 사항을 원격 저장소에 업로드
- git pull: 원격 저장소의 변경 사항을 로컬로 가져오기
Git 브랜치
브랜치란?
- 독립적인 작업 공간 제공
- 새로운 기능 개발이나 버그 수정을 위해 기존 코드를 변경하지 않고 작업
워크플로우 예시
- main 브랜치에서 새 브랜치 생성
- 새 브랜치에서 변경 사항 작업
- 변경 사항을 main 브랜치로 병합
git branch new-feature
git checkout new-feature
git commit -m "Add new feature"
git checkout main
git merge new-feature
(master)와 (main)의 차이
Git의 초기 기본 브랜치는 (master)
최근에는 (main)으로 변경
기능적으로 동일하며, 기본 브랜치 이름만 다름
브랜치 명령어
- git branch {branch_name}: 새로운 브랜치 생성
- git checkout {branch_name}: 해당 브랜치로 이동
- git merge {branch_name}: 다른 브랜치를 현재 브랜치에 병합
.git 디렉토리 삭제 시
- .git 디렉토리를 삭제하면 해당 디렉토리의 버전 관리 기능 제거
GitHub와 Git의 차이
- Git: 분산 버전 관리 시스템 자체
- GitHub: Git 저장소를 클라우드에서 관리하고 협업 기능을 제공하는 플랫폼
GitHub 주요 기능
- Pull Request: 코드 변경 사항을 리뷰하고 병합 요청을 보냄
- Issues: 프로젝트 관리 및 버그 트래킹
- Actions: 자동화 워크플로우 설정 가능 (예: CI/CD)
협업 워크플로우
- 중앙 리포지토리 방식:
- 모든 개발자가 중앙 리포지토리를 클론
- 로컬에서 작업 후 push를 통해 변경 사항 업로드
- 변경 충돌이 발생하면 병합(resolve) 후 작업 지속
- Fork & Pull Request 방식:
- 원본 저장소를 포크하여 개인 저장소에서 작업
- 작업 완료 후 Pull Request를 보내 검토 및 병합 요청
[Developer A]
↓ Fork
[개인 저장소 (Fork)] ◀─────────────────────────────┐
↓ Clone │
[로컬 저장소] │
↓ Branch 생성 및 개발 │
↓ Commit │
↓ Push │
[개인 저장소 (Fork)] │
↓ Pull Request 생성 │
[원본 저장소 (Upstream)] ◀────────────────────────┘
'Git Github' 카테고리의 다른 글
GitHub 프로필/ GitHub Pages 레포지토리 생성 및 커스텀 (1) | 2025.01.23 |
---|---|
Remote Repository 연결 및 관리 (3) | 2025.01.17 |
Git - Working Directory, Staging Area, Repository (3) | 2025.01.02 |
Markdown Syntax Guide (3) | 2024.12.19 |