Git(1) - Git의 기본 개념

brunomarschuck·2022년 12월 11일
0

Git

목록 보기
1/3
post-thumbnail

1. Git(깃)

Git 은 버전 관리 시스템(VCS)의 하나로,
스택오버플로우 2022년 조사 기준 1등 시스템이다.

버전 관리 시스템은
세이브 지점을 만들어 원할 때 돌아가게 해 주는 것이다.
소스코드 뿐만 아니라 거의 모든 파일을 관리할 수 있다.

2.0 버전까지 개발을 했는데, 1.6 버전의 장점이 그리워질 때,
Git을 통해 그 버전으로 돌아갈 수 있다.

또한 문제가 발생했을 때 그 원인도 찾아내기 쉽고,
코드를 수정한 후 수정 내용을 비교해 볼 수도 있다.

2. GitHub(깃허브)

Git은 로컬(각자의 컴퓨터)에서 버전을 관리하고,
GitHub는 클라우드 방식으로 버전을 관리한다.
로컬 파일을 깃허브 클라우트에 업로드하면 여러 사용자가 작업할 수 있다.

노마드코더 니콜라스의 비유를 빌리자면 깃은 커피이고 깃허브는 커피샵이다.

3. Git, GitHub의 필요성

1) 용이한 버전 관리

Git으로 버전을 관리하면 아래와 같은 문제들에서 자유로워진다.

로컬에서 백업을 통해 버전을 관리할 때 발생할 수 있는 문제점들을 적어 보겠다.

(1) 파일의 어마어마한 크기
프로젝트가 커질 수록 파일 크기가 감당하기 어려울 정도로 커질 것이다.
(2) 파일 관리의 어려움
파일이 많아지면 원하는 파일을 찾는 것이 쉽지 않아진다.
(3) 변경사항 확인의 어려움
매번 파일이 변경될 때마다 변경사항을 기록하는 것은 쉬운 문제가 아니다.
또한, 기록했다 해도 깔끔하게 정리하기 어렵다.
(4) 실수 가능성
사람은 기계가 아니다. 로컬에서 백업을 통해 관리하다가 저장, 변경, 삭제, 위치 지정 등에서 실수를 할 수 있다.

Git은 파일에 대한 모든 변경사항을 기록하기 때문에, 위와 같은 문제를 겪지 않는다.

2) 공유를 통한 협업

프로젝트 폴더를 GitHub에 올려 작업하는 방식을 사용하면
협업할 때에 코드 공유가 쉽고 함께 버전관리를 할 수 있다.

4. 버전 관리 시스템(VCS)의 역사

  • 로컬에서 수동으로 폴더를 나누어 관리
  • 중앙집중화 버전 관리 시스템(CVS) 등장
    • 서버에서 버전을 관리
    • CVS: Centralized Version Control
    • 예) Subversion, Perforce
    • 서버에 문제가 있거나 인터넷이 안 될 때 사용 불가
  • 분산 버전 관리 시스템(DVS) 등장
    • local repository(개인의 하드)를 거쳐 main repository(서버)에 파일을 보냄
    • 모든 개발자들이 버전에 대해 동일한 히스토리를 가짐
    • DVS: Distributed Version Control
    • 예) Git, Mercurial, Darcs
  • 클라우드 서비스 등장: 협업을 위해 버전별 변경사항을 공유
    • GitHub, Bitbucket

5. Git의 탄생

  • Linux Kernel Team에서 버전 관리를 위해 BitKeeper라는 버전 관리 시스템을 도입
  • BitKeeper의 Owner인 Lary McVoy가 유료화를 선언
  • Linux Kernel의 창시자인 Linus Torvalds가 Git이라는 버전 관리 시스템 만듦
    • CVS를 가장 나쁜 예제로 삼음
    • BitKeeper처럼 분산형이면서 더 빠른 것 지향
    • 변경사항을 적용했을 때 일관적이고 안전한 것 지향
  • 기존의 버전 관리 시스템은 delta-based였음
    • 각각의 버전마다 변경된 내용들만 가지고 있어, 버전을 변경할 때 시간이 오래 걸림(변경 사항 계산)
  • Git은 delta-based가 아니라 전체적인 내용을 snapshot해서 가지고 있음
    • 버전 및 브랜치 간 자유자재로 이동 가능: 프로젝트의 전체적인 내용을 가지고 있기 때문
    • snapshot은 가벼움: 변경되지 않은 파일들은 이전 파일의 링크를 가리키고 있기 때문

6. Git의 장점

  • 세상에서 가장 많이 사용되어지는 VCS (most commonly used)
  • 무료 (free)
  • 오픈소스 (open source)
  • 동작이 빠름 (lightning fast)
  • 오프라인에서 작업 가능 (work offline)
  • 실수 고치기 쉬움 (undo mistakes)
  • 효율적인 협업 가능 (easy and fast branching/merging)

참고 영상: 드림코딩 - 깃, 깃허브 이건 알고 사용하자

profile
브루노마르스

0개의 댓글