1. Git이란?
1.1 버전 관리란?
우리가 보통 문서작업을 하면 파일을 저장할 때 이런식으로 저장하는 경우가 많을 것이다.
이런 문서가 많아지면 얼마나 관리하기 어려울까?
따라서 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 불러올 수 있는 시스템이 존재한다.
이러한 시스템을 버전 관리 시스템이라고 부른다.(VCS, Version Control System)
1.2 버전 관리 시스템이 중요한 이유
1.2.1 변경 사항 추적
버전 관리 시스템은 파일이나 프로젝트의 변경 사항을 세분화하여 추적한다.
이를 통해 언제, 누가, 무엇을 변경했는지 명확하게 파악할 수 있다.
1.2.2 협업 용이성
각 개발자는 서로의 작업에 영향을 주지 않으면서 독립적으로 작업할 수 있으며,
나중에 이러한 작업을 쉽게 통합할 수 있다.
1.2.3 버그 수정 및 기능 추가 관리
개발 과정에서 발생할 수 있는 문제를 해결하고 새로운 기능을 추가하는 과정을 용이하게 한다.
특정 시점으로 롤백하여 문제를 해결하거나, 새로운 기능을 실험적으로 추가해 볼 수 있다.
1.2.4 백업 및 복구
개발 과정에서 발생할 수 있는 문제를 해결하고 새로운 기능을 추가하는 과정을 용이하게 한다.
특정 시점으로 롤백하여 문제를 해결하거나, 새로운 기능을 실험적으로 추가해 볼 수 있다.
1.3 버전 관리 시스템의 종류
1.3.1 로컬 버전 관리 시스템 (Local Version Control System, LVCS)
서버 없이 로컬 컴퓨터에서 버전을 관리한다.
하지만 이 방법은 데이터 손실 위험이 높고 협업이 힘들다.
1.3.2 중앙집중식 버전 관리 시스템 (Centralized Version Control Systems, CVCS)
모든 버전 관리 정보를 중앙 서버에서 관리한다.
모든 프로젝트 파일과 변경 이력이 한 곳에 저장되고 네트워크를 통해 중앙 서버에 접속하여 사용할 수 있다.
하지만, 중앙 서버가 다운되면 작업이 불가하고 네트워크가 없으면 작업을 수행할 수 없다.
1.3.3 분산 버전 관리 시스템 (Distributed Version Control System, DVCS)
CVCS의 한계를 극복하기 위해서 등장했다.
모든 사용자는 저장소(repository)의 전체 복사본을 로컬에 보유한다.
따라서 각 사용자가 서버와 연결 없이도 로컬 저장소에서 작업이 가능하다.
사용자는 자신의 로컬 변경사항을 다른 사용자와 공유하기 위해 중앙 서버에 푸시(push)할 수 있다.
대표적인 DVCS 도구가 바로 GIT이다.
1.4 GIT 구조 이해하기
GIT의 구조는 위와 같다.
1.4.1 Working Directory
실제 파일들이 있는 곳으로, 사용자가 현재 작업하고 있는 파일들의 상태를 나타낸다.
작업 디렉토리에서 파일을 edit하면, Git은 이 파일을 "수정됨(modified)" 상태로 인식한다.
하지만, 이 변경사항은 아직 로컬 저장소에 반영되지 않은 상태이다.
git add 를 통해서 커밋할 파일을 추가할 수 있다.
1.4.2 Staging Area
Working Directory에서 변경된 파일들을 커밋하기 전에 임시로 모아두는 곳이다.
즉, Git에서 버전 관리를 위해 변경 사항을 커밋하기 전에 검토하고 조정할 수 있는 중간 단계이다.
git commit 명령어를 사용하여 로컬 저장소에 커밋하게 된다.
1.4.3 Local Repository
개발자의 개인 컴퓨터에 위치한 프로젝트의 버전을 관리하는 저장소
로컬 저장소를 사용하여 파일의 변경 사항을 추적하고, 이전 버전으로 롤백하며, 변경 이력을 검토할 수 있다.
git push (로컬 저장소에서 리모트 저장소로 변경 사항 전송)와
git pull (리모트 저장소에서 로컬 저장소로 변경 사항 가져오기) 명령어가 존재한다.
1.4.4 Remote Repository
네트워크를 통해 접근할 수 있는 서버에 위치한 저장소
해당 저장소에서는 팀 원들의 작업 사항을 저장, 백업, 코드 변경 통합 및 충돌 해결을 한다.
원격 저장소는 주로 다음과 같은 명령어를 수행한다.
- git clone: 원격 저장소의 복사본을 처음으로 로컬 컴퓨터에 생성할 때 사용한다.
- git fetch: 원격 저장소의 최신 변경 사항을 로컬 저장소로 가져오지만, 자동으로 병합하지는 않는다.
- git pull: 원격 저장소의 변경 사항을 로컬 저장소로 가져와 자동으로 병합하는 작업을 수행한다.
- git push: 로컬 저장소의 변경 사항을 원격 저장소에 업로드하여 다른 사람들과 공유한다.
1.5 Git 파일 상태
Git에서 파일의 상태는 크게 'Untracked', 'Tracked'의 두 가지로 나뉘고,
'Tracked' 상태에는 다시 'Unmodified', 'Modified', 'Staged'의 세 가지 상태가 있다.
이 상태들은 파일이 Git 저장소와 어떤 관계에 있는지, 현재 작업 흐름에서 어떤 위치에 있는지를 나타낸다.
1.5.1 Untracked
이 상태의 파일은 Git 저장소에 의해 추적되지 않는 파일이다.
즉, 이전에 커밋에 포함되지 않았고, Staging Area(임시 저장 공간)에도 추가되지 않은 파일을 말한다.
처음 저장소에 파일을 추가할 때 이 상태가 된다.
1.5.2 Tracked
이전 커밋에 포함되어 Git에 의해 추적되고 있는 파일이다.
Tracked 상태의 파일은 다음의 세 가지 상태 중 하나를 가질 수 있다.
- Unmodified
파일이 변경되지 않았음을 나타낸다. 즉, 마지막 커밋 이후로 파일에 어떠한 수정도 가해지지 않았다는 뜻 - Modified
파일이 수정되었지만, 아직 Staging Area에 추가되지 않은 상태를 말한다.
수정된 파일은 git add 명령어를 사용하여 Staging Area에 추가할 수 있다. - Staged
수정된 파일이 커밋을 위해 Staging Area에 추가된 상태를 말한다.
이 상태의 파일은 다음 커밋에 포함될 준비가 되어 있다.
git commit 명령어를 실행하면 Staged 상태의 파일들이 커밋에 포함된다.
2. GitHub 란?
GitHub는 Git 버전 제어 시스템을 기반으로 하는 소프트웨어 개발 프로젝트를 위한 버전 관리 및 협업 플랫폼이다.
2.1 GitHub의 주요 기능
2.1.1 리포지토리 호스팅
사용자는 GitHub에 개인 또는 공개 리포지토리를 만들어 소스 코드를 저장하고 관리할 수 있다.
2.1.2 협업
GitHub은 이슈 트래커, 프로젝트 보드, 코드 리뷰, 풀 리퀘스트 등 다양한 협업 도구를 제공한다.
2.1.3 포크 & 풀 리퀘스트
다른 사용자의 리포지토리를 포크(fork)하여 자신의 계정으로 복사할 수 있고,
변경 사항을 원본 리포지토리에 반영하고자 할 때 풀 리퀘스트(pull request)를 보낼 수 있다.
2.1.4 GitHub Actions
소프트웨어 워크플로우를 자동화할 수 있는 CI/CD(지속적 통합/지속적 배포) 기능을 제공합니다.
'환경 세팅 및 사용법 > GitHub' 카테고리의 다른 글
[GitHub] 기본 용어 정리 (0) | 2024.06.26 |
---|---|
[GitHub] Branch (0) | 2024.06.26 |
[Github] fork, pull request (0) | 2024.06.26 |
[GitHub] 저장소 기본 (0) | 2024.06.26 |
[GitHub] 계정 생성 및 설정 (0) | 2024.04.26 |