본문 바로가기
Git & GitHub/Git 입문

깃(Git)과 깃허브(GitHub)란 무엇인가? - 버전관리와 형상관리

by junvely 2022. 4. 7.

 

 [ '버전관리'와 '형상관리' ] 

 

  • 버전 관리 : 소프트웨어의 소스 코드 변경사항을 '버전'이란 개념을 통해 관리하는 것을 말한다.

 

  • 형상 관리 : 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것의 포괄적 의미로, 소프트웨어 소스 코드 뿐 아니라 개발 환경, 빌드 구조 등 전반적인 환경 전반적인 내역 등 프로젝트와 관련된 모든 변경사항을 관리하는 것을 말한다.

 

  • 버전 관리는 '클라이언트 - 서버 모델(CVCS)''분산 모델(DVCS)' 2가지로 나뉜다.

 

  • 분산 모델(DVCS)은 프로젝트에 참여하는 모든 클라이언트(개발자)가 전체 저장소에 대한 개별적인 로컬 저장소를 갖고 작업하는 형태이다. 클라이언트-서버 모델과는 다르게 클라이언트(개발자) 각자가 온전한 전체 저장소의 사본을 로컬에 가지게 된다. 이 덕분에 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다. 바로 이것이 Git과 같은 분산형 버전 관리 시스템이다.

 

 

 [ '깃(Git)'이란 무엇인가? ] 

 

 

  • Git이란, 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'이다. 원래는 Linux 소스코드를 관리할 목적으로 개발 되었다. 개발자들은 Git을 통해 여러 부분들을 나누어 개발하고 버전을 관리할 수 있다.

 

  • Git으로 파일을 관리하면 업데이트 이력이 저장된다. 만약 내가 올리려는 파일이 누군가 수정한 내용과 충돌한다면, 서버에 업로드 할 때 경고 메세지가 발생하여 누군가의 수정내용을 덮어써버리는 실수를 방지할 수 있다.

 

  • Git에서는 소스 코드가 변경된 이력을 쉽게 확인할 수 있고, 특정 시점에 저장된 버전과 비교하거나 특정 시점으로 되돌아갈 수도 있다. 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위해 사용된다.

 

 

 [ 깃(Git) 저장소 - 원격 저장소와 로컬 저장소 ]

 

  • 저장소(Git repository)란 말그대로 파일이나 폴더를 저장해 두는 곳이다. Git의 저장소의 장점은 비슷한 파일이라도 내용의 일부가 다르면 다른 파일로 인식하여 파일을 변경사항 별로 구분해 저장한다는 것이다.

 

  • Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.

  1) 원격 저장소(Remote Repository) : 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람과 함께 공유하기 위한 저장소

  2) 로컬 저장소(Local Repository) : 내 PC에 파일이 저장되는 개인 전용 저장소

평소에는 내 PC의 로컬 저장소에서 작업하다가 소스를 공개하고 싶을 때 원격 저장소에 업로드 한다. 원격 저장소에서 다른 사람이 작업한 파일을 로컬 저장소로 가져올 수도 있다.

 

  • 내 컴퓨터에 로컬 저장소를 만드는 방법은 새로 만들거나, 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해 오는 것이다.

 

 

 [ '깃허브(GitHub)'란 무엇인가? ] 

 

  • 클라우드 방식으로 관리되는 버전 관리 시스템(VCS)으로 원격 저장소(구글 드라이브와 같이)를 제공한다.

 

  • 깃(Git)에 원격(remote)저장소 호스팅을 지원하는 웹 서비스이며 GitHub를 통해 Git에 저장된 파일 버전을 웹상의 저장소에 업로드 하여 다른 이들과 공유할 수 있다.

 

  • 개발자들간의 협업이 가능하게 하는 서비스 이다.

 

  • Git의 확장된 기능들을 제공한다.

 

 

 [ '깃(Git)'과 '깃허브(GitHub)'의 차이점 ] 

 

  • Git은 로컬에서 버전 관리 시스템을 운영하는 방식이고, GitHub는 저장소를 깃허브에서 제공해주는 클라우드 서버를 이용한다는 것(원격 저장소, 온라인)이 이 둘의 차이점이다.

 

  • 개인작업 등 폐쇄적인 협업일 경우 Git만 사용해도 가능하며, 오픈소스를 공유하고 협업을 하며 사람들과 공유할 경우 GitHub를 사용한다고 보면 된다.

 

  • 일단 Git으로 로컬 저장소에 작업 내용을 저장한 뒤, 해당 내용을 GitHub에 업로드하는 형식으로 사용한다. 이 세 과정이 커밋(Commit), 푸쉬(Push), 풀(Pull)이다.

 

 

 [ 깃(Git) 용어 정리 ] 

  • 작업 트리(Work Tree) : 우리가 흔히 말하는 '폴더'를 말한다.
  • 인덱스(Index) : 커밋을 실행하기 전 저장소와 작업트리 사이에 존재하는 공간이다. ('커밋'은 '작업 트리'에 있는 변경 내용을 저장소에 바로 기록하는 것이 아니라 그 사이 공간인 '인덱스'에 파일 상태를 기록하게 되어 있다. 인덱스(가상 공간) 덕분에 작업 트리 안에 있는 커밋이 필요 없는 파일들을 커밋에 포함하지 않을 수 있고, 파일에서 내가 원하는 일부 변경 사항만 인덱스에 등록해 커밋할 수 있다.)
  • 커밋(Commit) : Git(로컬 저장소)에 파일을 추가하거나 변경 내용을 저장하는 작업
  • 푸쉬(Push) : GitHub(또는 원격 저장소)에 파일을 추가하거나 변경 내용을 저장하는 작업
  • 풀(Pull) : GitHub(또는 원격 저장소)에서 파일을 다운로드 하는 작업
  • 브랜치(branch) : 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능. 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있다. 처음 저장소를 만들면 Git은 바로 'master'라는 브랜치를 만들어 둔다.
  • 머지(Merge) : 브랜치는 다른 브랜치와 병합(Merge)한다. 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해 새로운 버전으로 만들어 낼 수 있다. 여러 명이서 동시에 작업을 할 때에 다른 사람의 작업에 영향을 주거나 받지 않도록, 먼저 메인 브랜치에서 자신의 작업 전용 브랜치를 만든다. 그리고 각자 작업을 진행한 후, 작업이 끝난 사람은 메인 브랜치에 자신의 브랜치의 변경 사항을 적용한다. 

 

 

 

 

< 참고 >

 

- https://backlog.com/git-tutorial/kr/intro

- https://codevang.tistory.com/217

 - https://imgeeae.tistory.com/5

- https://git-scm.com/book/ko