Git

LegendKi·2024년 4월 24일

Upstage AI Lab 3기

목록 보기
4/13
post-thumbnail

Git

Git은 분산 버전 관리 시스템(DVCS)으로, 소프트웨어 개발에서 코드의 버전을 관리하는 데 필수적인 도구이다. Linus Torvalds가 처음 개발하였으며 효율성, 신뢰성, 비선형적인 개발 Workflow을 지원한다.

분산 버전 관리 시스템(DVCS)

Git은 중앙 집중식 서버에 의존하지 않고 각각의 개발자가 전체 코드 베이스의 복사본을 로컬 컴퓨터에 저장하게 된다. 이는 네트워크에 문제가 생겨도 작업을 계속할 수 있고 각자의 로컬 저장소에서 독립적으로 작업이 가능하게 한다.

효율적인 성능

Git에서의 모든 작업은 빠르게 수행되도록 최적화되어 있으며 대부분의 명령은 로컬 파일 시스템에서 실행되어 네트워크에 의존하는 작업이 최소화되어 큰 프로젝트라도 빠른 속도로 실험이 가능하다.

데이터 무결성

Git은 내부적으로 SHA-1 해시를 사용하여 모든 파일과 커밋을 식별한다. 이를 통해 소스코드의 변경사항이나 업데이트가 있을 때마다 체계적으로 관리되며 오류나 파일의 손상이 있을 경우 즉시 감지할 수 있다.

비선형적 개발 지원

Branch를 활용하여 여러 개발자들이 동시에 다양한 기능을 작업할 수 있어 별도의 branch에서 실험을 진행한 뒤 정상적인 작동이 가능하면 merge를 통해 main branch로 합칠 수 있다.

Branch

Branch는 작업을 독립적으로 진행하기 위한 기능이다. 코드 베이스의 한 버전에서 새로운 시도로 개발을 진행할 수 있게 해주며 각 branch는 다른 branch의 영향을 받지 않으므로 하나의 저장소에서 여러 작업을 동시에 진행할 수 있다.

Branch의 중요성

  • 기능 개발 : 새로운 기능을 개발할 때 기존 코드에 영향을 주지 않고 안전하게 작업할 수 있다.
  • 버그 수정 : 기존 버전에서 발생한 버그를 수정하는 작업을 별도의 branch에서 진행하여 수정이 안정화될 때까지 기존 시스템을 유지할 수 있다.
  • 실험적 시도 : 새로운 아이디어를 자유롭게 시험해보고 실험적인 작업이 성공적일 경우 main branch에 merge 할 수있다.

Branch 관리

  • Branch 생성
git branch <branch >
  • Branch 전환
git checkout <branch >
git switch <branch >
  • Branch 전환 및 생성을 한번에
git checkout -b < branch >
  • Branch 목록 보기
git branch
  • Branch 삭제
git branch -d <branch >
  • remote Branch에 push
git push origin <branch >

Branch 전략

  • Git Flow : 기능 개발, 릴리스 준비, 유지 보수, 핫픽스 등을 위한 다양한 branch를 운영한다.

  • GitHub Flow : 간단하고 빠른흐름에 초점을 맞추며 'main' branch가 중심이 되고 기능별 branch를 생성하여 작업 후 바로 merge하는 방식이다.

Git Process

Working Directory

Working Directory는 파일을 수정하고 일상적인 작업을 수행하는 곳이다. 이곳에서 코드를 작성하고 수정사항을 생성하며 새로운 기능을 개발한다.

Staging Area

수정한 파일들을 commit하기 전에 Staging Area에 임시 저장한다. 이는 commit할 파일들을 선별하여 앞접시에 덜어내는 과정이라고 생각할 수 있다.

git add <파일명> # 특정 파일을 Staging Area에 추가
git add . # 모든 변경사항을 Staging Area에 추가

Local Repository

변경사항을 Staging Area에서 commit으로 확정하면 Local Repository에 기록이 된다. commit은 변경 내용의 스냅샷이라고 생각하고 나중에 특정 버전으로 돌아갈 수 있게 해준다.

git commit -m "커밋 메시지"

Conventional Commits

Conventional Commits는 코드 저장소의 commit 메세지에 일관된 규칙을 적용하기 위한 규칙으로 commit log의 가독성을 높이고 소프트웨어의 버전 관리와 릴리즈 프로세스를 자동화하는데 도움을 준다.

Conventional Commits의 구조

<Type>[Optional Scope]: <설명>

[Optional Body] 작업 상세 기술

[Optional Footer] 부가 정보
  • Type
    • feat: 새로운 기능에 대한 commit
    • fix : 버그 수정에 대한 commit
    • docs : 문서 관련 작업
    • style : 코드 형식, 세미콜론 누락 등의 변경(코드 의미에 영향을 주지 않는 변경)
    • refactor : 코드 리팩토링
    • test : 테스트 추가 테스트 리팩토링(비즈니스 로직에 변경 없음)
    • chore : 빌드 과정이나 보조 도구 변경

Remote Repository

Local에서 작업한 내용을 공유하기 위해선 Remote Repository에 push해야한다. 대표적인 Remote Repository 서비스로는 GitHub, GitLab, Bitbucket 등이 있다.

git push origin <브랜치명>

git checkout

다른 branch로 전환하거나 특정 파일을 이전 상태로 복완할 때 사용한다.

git checkout <브랜치명>

git merge

다른 branch의 변경사항을 현재 branch로 병합할 때 사용한다.

git merge <브랜치명>

git fetch

Remote Repository의 최신 이력을 Local에 가져오되 병합은 하지 않을 때 사용한다.

git fetch origin

0개의 댓글