본문으로 바로가기

git이란?

category 기타 2019. 7. 15. 17:47
728x90

깃(Git/git)이란? 


프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템의 형상 관리 도구 중 하나. 

쉽게 설명하자면 여러 명의 개발자가 특정 프로젝트를 자신의 컴퓨터로 협업하여 개발하면서 버전을 관리할 수 있는 시스템이다.

 

Git 사용시 장점


  • 소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능
  • 브랜치를 이용해 개발한 뒤, 본 프로그램에 합치는 방식(Merge)으로 개발 진행 가능
  • 분산 버전 관리 이기때문에 인터넷이 연결되지 않은 장소도 개발을 진행할 수 있고, 중앙 저장소가 소멸해도 원상복구 가능
  • 팀이 아닌 개인 프로젝트라도 Git을 통해 버전 관리를 하면 체계적인 개발이 가능하며 프로그램이나 패치를 배포하는 과정도 간단해진다. 

 

공식적인 Git의 특징


Distributed development

전체 개발 이력을 각 개발자의 로컬로 복사본을 제공하고 변경된 이력을 다시 하나의 저장소로 복사한다.  이러한 변경점은 추가 개발 지점을 가져와, 로컬 개발 지점과 동일하게 병합(merge) 할 수 있다.

 

Strong support for non-linear development

신속하고 편리한 branch 및 merge  지원, 비선형 개발 이력을 시각화하고 탐색할 수 있는 도구 지원

 

Efficient handling of large projects

Git은 매우 빠르고, 대형 프로젝트나 이력이 많은 작업에 합리적. 정상급 오픈소스 버전 관리 시스템보다 장기간의 수정내역을 매우 효율적인 압축을 사용

 

Cryptographic authentication of history

Git이력은 성공한 개발이력의 commit에 의해 개정명으로 저장됨. 배포될 경우 그것을 모르고 예전 버전으로 변경하는 것은 불가능, 그리고 그것들을 암호화가 가능

 

Toolkit design

UNIX의 전통에 따라서 Git은 C로 작성된 많은 소규모의 도구 모음. 그리고 많은 스크립트 들이 기능 보강을 제공한다.  Git은 새로운 기발한 작업을 위한 손쉬운 사용과 쉬운 스크립팅을 위한 도구를 제공한다.

 

Git사용을 위한 주요 용어


저장소(Repository)

 

소스코드가 저장된 여러개의 branch가 모여있는 디스크 상의 물리적인 공간을 의미

Git은 원격저장소(Remote repository)와 로컬 저장소(Local repository)로 나뉨

-- 작업시--

원격 저장소 -> 로컬 저장소 소스복사(Clone) -> 변경한 소스코드 commit -> commit 한 코드 로컬 저장소 저장 -> push후 원격 저장소 저장


체크아웃(checkout)

 

특정 시점이나 브랜치의 소스코드로 이동하는 것을 의미. 대상은 브랜치, 커밋, 그리고 태그. 체크아웃을 이용해 과거 시점으로 소스코드 이동 가능


스테이지(stage)

 

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


커밋(commit)

 

작업한 내용을 로컬 저장소에 저장하는 과정. 각각의 커밋은 의미 있는 변경 단위이고, 변경에 대한 설명을 커밋 로그로 남김 하나의 커밋은 하나의 주제로 묶을 수 있는 변경 단위


태그(Tag)

 

커밋의 임시 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표를 태그라 칭함. 태그가 붙여진 커밋은 commit ID 대신 태그명을 이용해 쉽게 체크아웃이 가능 


푸시(push)

 

로컬 저장소의 내용 중 원격 저장소에 반영되지 않은 커밋을 원격 저장소로 보내는 과정


풀(Pull)

 

푸시와 반대로 원격 저장소에 있는 내용 중 로컬 저장소에 반영되지 않은 내용을 가져와서 로컬 저장소에 저장하는 과정을 의미. 이것을 이용해서 다른 팀원이 변경하고 푸시한 내용을 나의 로컬 저장소로 가져올 수 있음

푸시 과정에서 충돌(collision)이 일어나서 푸시가 거절된 경우, 풀을 이용해서 원격 저장소의 변경 내용을 반영후 다시 푸시를 진행


브랜치(branch)

 

커밋을 단위로 구분된 소스코드의 타임라인에서 분기해서 새로운 커밋을 쌓을 수 있는 가지를 만드는 것, 혹은 그 가지를 의미

브랜 치중에 개발에 주축이 되는 브랜치를 마스터 브랜치(master branch)라 부르고 모든 브랜치는 마스터 브랜치에서 분기해서 최종적으로 다시 마스터 브랜치에 병합(Merge)되며 개발이 진행. 


병합(Merge)

 

브랜치와 반대되는 개념으로, 하나의 브랜치를 다른 브랜치와 합치는 과정을 의미

두 개의 브랜치를 합쳐 하나의 브랜치를 만드는 3-Way merge가 모든 병합 작업의 기본으로 병합이 대상인 두 브랜치는 주종관계가 성립. 표현은 'A브랜치를 B브랜치에 병합'과 'B브랜치를 A브랜치에 병합'의 작업은 서로 다른 작업

병합은 커밋의 한 종류로 일반적인 커밋은 조상이 하나이지만, 병합은 조상 커밋이 둘 이상으로 3-Way merge는 '서로 다른 두 커밋으로부터 하나의 새로운 커밋을 생성하는 작업'을 뜻한다. 

충돌(collision)이 발생 시 병합이 일시정지되고 충돌 부분을 수정하거나 merge tool을 이용해서 충돌을 해결 후 계속 진행

728x90

'기타' 카테고리의 다른 글

한번쯤은 들어봤을 개발언어 10가지  (0) 2019.08.09
절대경로 and 상대경로  (0) 2019.08.06