Git이란?

Git (깃) 

  • 리눅스 개발자인 리누스 토발즈에 의해 개발된 분산 버전 관리 시스템
  • 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율한다.
  • 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용되기도 한다.

 

 

Git 은 형상 관리 도구의 일종이다 

형상 관리란? 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것

 

형상 관리 도구 종류

  • CVS : 1980년대 만들어진 형상관리 툴
  • SVN : 2000년에 CVS 대체하기 위해 만들어 졌으며 현재까지도 사용
  • GIT : 매우 빠른 속도와 분산형 저장 시스템으로 SVN보다 많은 기능을 지원

SVN 와 GIT 작동방식

  • SVN : 중앙 집중식 소스코드 관리 방식
  • GIT : 분산 소스코드 관리 방식 >> 복구에 용이하다.

 

 

Git 개념 

1) 영역

  • working directory
    • 현재 작업하고 있는 공간
    • Git가 관리 하에 있으나, 아직 추적( track )하고 있지 않은 상태
  • index
    • stage 또는 staging area라고 하며, 준비 공간
    • Git이 추적하고 있으며, 버전으로 등록되기 전 상태
  • repository
    • 2가지 의미로의 저장소
      • 본인 PC에 존재하는 저장소 : local repository
      • Github, Gitlab 같은 원격 저장소 : remote repository

 

영역 개념

2) Flow

  • git init
    • .git 폴더를 생성
    • .git 폴더가 있어야 파일을 추적할 수 있으며, Git과 관련된 작업이 가능함
  • git add
    • working directory의 변경된 작업 파일을 staging area로 추가시키는 작업
  • git commit
    • staging area의 내용을 local repository에 확정
  • git push
    • local repository(로컬 저장소)의 내용을 remote repository(원격 저장소)로 업로드 하는 작업
  • git pull
    • remote repository(원격 저장소)의 내용을 local repository(로컬 저장소)로 다운로드 하는 작업
  • git clone
    • .git을 포함한 remote repository의 파일들을 local repository로 복사하는 것

    • github에서 zip 파일로 받으면 .git 폴더가 없다는 것이 명령어와의 차이점

위에서 살펴본 영역과 명령어를 통해 flow를 그려보면 다음과 같습니다.

Flow 개념

 

3) 협업 - 병합

  • git branch
    • 독립된 working directory를 의미

    • 브랜치를 통해 프로젝트 참여자마다 브랜치를 가져서 독립된 작업 공간 확보

    • 테스트 및 백업 등의 용도로 사용 가능

  • head

    • 포인터를 의미하며, 현재 작업 중인 branch를 가르킨다.

  • merge

    • 해당 이슈 관계자들이 상의하여 수동으로 충돌을 해결해야 함.

    • 따라서 작업 내용이 겹치지 않도록 분리시키는 것이 중요

    • 2개의 branch에서 작업한 다른 내용을 하나로 합치는 것을 말하며, 현재 브랜치를 기준으로 병합

    • 만약 두 branch가 같은 파일의 같은 곳을 수정할 경우, 충돌( merge conflict ) 발생

협업 Flow

 

Git의 장점 

git의 장점으로는 다음과 같이 5가지를 들 수 있다. 

  • 처리 속도가 빠르다.
  • 일시적인 작업에 대한 이력 관리가 쉽다.
  • 브랜치(branch), 머지(merge)가 쉽다.
  • 장소에 구애받지 않고 협업이 가능하다.
  • Repository의 완전한 복사본을 로컬 장비에 보관이 가능하다. (중앙 집약 관리시스템과의 차별성)

 

 

 

참고 : https://victorydntmd.tistory.com

'Knowledge' 카테고리의 다른 글

소프트웨어 개발 방법론  (0) 2019.08.15
API , Restful  (0) 2019.08.14
프로그래밍 언어 종류 10가지  (2) 2019.08.10
DNS  (0) 2019.08.01
절대경로 vs 상대경로  (0) 2019.08.01