[Git] 깃(Git)이 뭐임?

Joo·2024년 5월 1일
0

Git

목록 보기
1/5
post-thumbnail

Git : 버전관리(형상관리) 시스템의 한 종류

그럼 버전관리가 뭐임?

→ 버전관리 = Configuration Management System = Version Control System(VCS)

버전관리는 왜 하는 거임??

Source Data(코드) + History(수정) → 협업, 작업 추적, 복구 등이 가능

버전관리 시스템의 종류

CVCS - CVS, SVN, etc.,
DVCS - Mercurial, Git, etc.,

CVS

  • 80년대에 만들어진 형상관리 시스템
  • Commit 중 오류 발생 시 Rollback이 되지 않는 등의 문제
  • 이후 SVN으로 대체

SVN

Git

  • https://git-scm.com/
  • SVN보다 빠른 속도와 많은 기능을 지원
  • 현재 많은 기업이 사용 중

Github

  • 대표적인 Git 서비스
  • https://github.com
  • Git을 호스팅 해주는 웹 서비스, 협업을 위한 기능을 제공
  • 참고 - 소스코드 보안이 중요한 경우 사용을 기피함

Gitlab

  • https://gitlab.com/
  • 설치형 버전관리 시스템 - 소스코드 보안이 중요한 기업에서 주로 사용
  • 클라우드 버전 관리 시스템 - 10명 이하 무료 (Github와 유사)
  • Issue tracker, Git Remote Respository, API, Team, Group 기능 제공

Git과 Github 사용하기

먼저, Github 사이트에 접속해 계정을 만든 후, 아래와 같이 Git Bash에서 global username과 email을 연동한다.

Global Username & Email

git config --global user.name <username>
git config --global user.email <email>

다음으로, 윈도우 유저를 위한 CRLF 설정이 필요하다.
가져올 때는 LF를 CRLF로 변경하고 보낼 때는 CRLF를 LF로 변경 (Mac 유저는 디폴트 설정해도 괜춘)

git config --global core.autocrlf true

참고) CRLF란?

  • 줄 바꿈(Line ending) 문자
    • Windows : CR (\r) + LF (\n)
    • Unix or Mac : LF (\n)
    • Windows 사용자와 Mac 사용자가 같은 Git Repository를 작업할 때 코드에서 변경된 내용이 없어도 CRLF 차이로 인해 commit이 발생할 수 있음

그 후, 기본 editor를 설정한다.

git config --global core.editor <editor> # default = vim

이때까지 진행한 설정 확인하는 방법

git config --list

항목별 설정 확인

git config <key> # 예시 : name

Git 기본 용어

Repository

  • 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크 상의 물리적 공간
  • Local Repository와 Remote Repository로 구분

Checkout

  • 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
  • Checkout 대상 - Branch, Commit, Tag
  • Checkout을 통해 과거 여러 시점의 코드로 이동 가능

Stage

  • 작업할 내용이 올라가는 임시 저장영역
  • 이 영역을 이용해 작업한 내용 중 commit에 반영할 파일만 선별해 commit을 수행할 수 있음

Commit

  • 작업할 내용을 local repository에 저장하는 과정
  • 각각의 commit은 의미 있는 변경 단위이고, 변경에 대한 설명을 commit log로 남김
  • 권장 - commit을 아끼지 말기 (게임의 save point)
  • 참고 - commit 단위나 commit log format을 정해놓은 회사나 팀도 있음 (빌드 서버를 사용하는 경우)

Tag

  • 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
  • Tag가 붙은 commit은 commit id(version) 대신 tag name으로 쉽게 checkout 가능

Push

  • Local repository의 내용 중, remote repository에 반영되지 않은 commit을 remote repository로 보내는 과정
  • 권장 - Push 하는 순간 다른 개발자들도 영향 받으니, 검증되지 않은 코드는 Push하지 않도록 함

Pull

  • Remote repository에 있는 내용 중, local repository에 반영되지 않은 내용을 가져와서 local repository에 저장하는 과정
  • 다른 팀원이 변경하고 Push한 내용을 local repository에 가져올 수 있음
  • 참고 - Push 과정에서 conflict가 발생해 push가 거절된 경우, pull을 통해 remote repository의 변경 내용을 local repository에 반영해 conflict를 해결한 뒤 다시 push를 시도해야 함

Branch

  • 특정 시점(commit 단위)에서 분기해 새로운 commit을 쌓을 수 있는 가지를 만드는 것
  • 개발의 주축이 되는 branch를 master branch (혹은 main branch)라고 함
  • 모든 branch는 최종적으로 다시 master branch에 merge되는 형식으로 진행됨

Merge

  • Branch의 반대 개념으로 하나의 branch를 다른 branch와 합치는 과정
  • Merge 되는 두 branch는 주종관계가 성립 (예, dev branch를 main branch에 merge)
  • Merge 되는 과정에서 conflict가 발생하는 경우, diff를 수정해 conflict를 해결한 뒤 merge를 진행할 수 있음
profile
적당히 공부한 거 정리하는 곳

0개의 댓글