git 이란?

신세원·2020년 10월 3일
1

Git

목록 보기
2/2

1. Git 이란 무엇인가?

Git이란 분산형 버전 관리 시스템(Version Control System) 의 한 종류이며, 빠른 수행 속도에 중점을 둔다.

Git에 대해 자세히 알아보기 전에 버전 관리 시스템은 무엇이고 왜 필요한지에 대해 알아보고 넘어가도록 하자

예를 들어, 우리가 레포트를 제출한다고 가정했을때, 처음에 저장했을때 'report.txt'라고 저장을 했다가

수정을 하면서 'report_final.txt'로 저장하고 또 수정을 거치면서 'report_final_final.txt'...로 수정을 하게 되는 경험이 있었을 것이다.

여기서 이 파일들을 복사,백업,저장 등을 하였고, 이러한 것을 버전 관리라고 부른다.

버전 관리에는 두 가지로 나눠볼 수 있다.

1) 클라이언트 - 서버 모델

  • 하나의 중앙 서버가 존재하며, 여러 클라이언트들은 중앙 서버에서 각자 맡은 파트만 가져와서 작업하고,
    다시 중앙으로 통합하는것
  • 대표적 시스템으로 CVS,Subversion(SVN) 등이 있다.

2) 분산 모델

  • 하나의 중앙 서버가 존재하지만, 여러 클라이언트들은 각자의 컴퓨터 저장소에 중앙 서버의 전체 사본을 가지고 작업하는 것을 의미한다.

  • 대표적으로 git이 있다.

그렇다면 SVNgit의 차이점에 대해 정리해보자

SVNGit 차이점

  1. Git이 SVN과 다른 점은 분산형 관리 시스템이라는 것이다.

  2. SVN: 중앙 서버에 소스 코드와 히스토리를 저장 하는것과 달리
    Git: 소스 코드를 여러 개발 PC와 저장소에 분산해서 저장
    그렇기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며, 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다.

  3. 사본을 로컬에서 관리하기 때문에 Git이 SVN에 비해 훨씬 빠르다.(SVN은 변경 로그 하나 보는 것도 인터넷을 경유해야 한다.)

2. Git의 필요성

이것도 이해하기 쉽게 예를 들어보자.

나와 내 동료가 같은 웹사이트에서 동시에 같은 'A'페이지를 업데이트 하고 있다고 하자.

나는 무언가를 변경하고 저장한 다음 웹사이트에 'A'페이지를 업로드 한다.

그런데 이때 동료가 동시에 'A'페이지에서 작업을 할 때 문제가 발생된다.

만약 확인하지 않고 동시에 작업을 한다면 누군가의 작업은 겹체 쓰여질 것이고 지워질 것이기 때문이다.

Git은 이와 같은 일을 사전에 방지해준다.

나와 동료는 같은 페이지에 각자 수정사항을 업로드 할 수 있고, 두개의 복사본을 저장한다.

Git의 장점들을 정리해보면 아래와 같이 정리할 수 있다.

Git의 장점

  1. 소스 코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다.
    (브랜치를 통해 개발한 뒤, 본 프로그램에서 합치는 방식(Merge)으로 개발을 진행할 수 있다.)

  2. 분산 버전 관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있고,중앙 저장소가 날라가 버려도 원상복구할 수 있다.

  3. 팀 프로젝트가 아닌, 개인 프로젝트일지라도 Git을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다.

3. Git 과 Github 의 관계

일을 하다보면 협업하고 있는 코드를 저장할 서버가 필요하다.

이때 버전 관리 시스템을 지원하는 웹호스팅 서비스(Github)의 기능을 통해 push, pull, request와 같은 이벤트에 반응하여 자동으로 작업을 실행하게 할 수 있다.

4. Git 기본 용어

Git을 사용하기 위해 알아야 할 용어 몇가지가 있다.

  • Repository: 저장소를 의미하며,저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인 할 수 있다.
  • Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.

  • Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치.

  • Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.

  • Head : 현재 작업중인 Branch를 가리킨다.

  • Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다.

  • Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.

5. Git 주요 명령어

깃을 시작하기에 앞서 기본적인 명령어만 살펴보기로 하자.

git init : 깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이것을 입력한 후에야 추가적인 깃 명령어들을 줄 수 있다.

git help : 명령어를 잊어버렸다면 커맨드 라인에 "git help"를 쳐보자. 그럼 21개의 가장 많이 사용하는 깃 명령어들이 나타난다. 좀 더 자세하게 “git help init”이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수도 있다.

git status : 저장소 상태를 체크한다. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.

git clone : 원격 저장소의 저장소를 내 local에서 이용할 수 있게 그대로 복사해 가져온다.

git add : 이 명령이 저장소에 새 파일들을 추가하진 않는다. 대신, 깃이 파일들을 지켜보게 한다. 파일을 추가하면, 깃의 저장소 “스냅샷”에 포함된다.

git commit : 깃의 의미있는 수정 작업이 끝났을 때 마침을 알리는 작업이다. 보통 “git commit -m “Message hear.” 형식으로 사용한다. -m은 명령어의 다음 부분을 메세지로 남긴다는 뜻이다.

git push : 로컬 컴퓨터에서 작업하고 커밋을 깃허브에서 온라인으로도 볼 수 있기를 원한다면, 이 명령어로 깃허브에 변경사항을 "push"한다.

git pull : 로컬 컴퓨터에서 작업할 때, 저장소의 변경된 내용을 로컬(내 컴퓨터) 저장소에 적용하는 작업이다.

git log : 커밋 내역을 확인해보고 싶을 때 사용하는 명령어이다.

git branch :여러 협업자와 작업하고 자신만의 변경을 원한다면 이 명령어로 새로운 브랜치를 만들고, 독립적인 공간을 만든다. 새 브랜치를 “hello”로 지정하고 싶다면 "git branch hello"라고 쓸 수 있다.

git checkout : 독립된 작업 공간인 브랜치를 자유롭게 이동할 수 있다. 만약 master 브랜치를 들여다 보고 싶으면, git checkout master를 사용할 수 있다.

git merge : 브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master 브랜치로 병합할 수 있다. "git merge hello"라고 입력한다면 hello브랜치에서 만든 모든 변경사항을 master로 추가한다.

profile
생각하는대로 살지 않으면, 사는대로 생각하게 된다.

0개의 댓글