Git

양세희·2022년 5월 12일
0
post-thumbnail

코딩을 배우다 보면 Git, Github라는 단어를 자연스럽게 들어봤을 것이다.
그래서 오늘은 개발자에게 너무 편리하고, 중요한 Git에 대해 다뤄보려고 한다.

Git이란 무엇인가?

깃은 2005년에 리누스 토르발스에 의해 개발된 '분산 버전관리 시스템(Distributed Version Control Systems-DVCS)'으로, 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 파일에 대한 작업을 조율하는데 사용된다.
즉, 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때, 소스 코드를 관리하는데 주로 사용된다.

버전관리? 왜 필요한가?

그럼 버전관리는 왜 필요한걸까? 우리가 발표를 위해 PPT를 만들었다고 가정해보자.
완성했다고 생각했는데 수정할 부분이 생겨서 1차 수정을 하고, 후에 계속해서 수정을 하면 우리는 '발표-최종1', '발표-최종2', '발표-진짜최종' 이런 식으로 파일을 저장할 것이다.

이 방법도 각 버전의 파일을 복사, 저장, 백업하는 버전 관리의 하나의 방법이긴 하지만, 효율적이지 못하고 어떤 파일이 가장 최근의 파일인지 알아보기가 어렵다는 단점이 있다.

더 나아가서 이 발표가 개인 발표가 아니라 팀 프로젝트라고 한다면, 철수가 본인 담당 파트를 유리가 만든 '최종2' 파일이 아닌 '최종1' 파일에 업데이트를 할 경우, 유리가 다시 파일을 수정해야 하는 번거로운 일이 발생한다. 그런데 만약 팀원이 둘이 아니라 100명, 1000명, 그 이상이라면? 이런 방법으로 버전관리를 할 경우 그 과정이 매우 복잡하고 비효율적일 것이다.

개발 프로젝트를 진행할 때 이런 버전관리를 돕는 시스템이 바로 깃(Git)이다.

Git의 장점

인터넷 연결이 되지 않은 곳에서도 개발을 진행할 수 있으며, 분산 버전관리이기 때문에 중앙 저장소가 삭제되어도 원상복구가 가능하다. 그래서 실수로 코드를 삭제하거나 잃어버려도 깃을 이용해서 다시 복구할 수 있다.

서브버전(Subversion SVN)과 비교

  1. SVN = 중앙서버 업로드 (직관적) / Git = 로컬저장소 저장 후 서버 업로드
  2. SVN = 동시 업로드시 충돌 가능성 많음 / Git = Branch와 Merge를 통해 충돌 가능성 낮음
  3. SVN = 모든 작업에 네트워크가 사용되어 속도 느림 / Git = 작업은 로컬에서, 업로드만 네트워크를 사용해 속도 빠름
    +Git = 히스토리 관리 기능이 잘 제공되어, 히스토리 관리가 용이

Git의 기본 용어

-Repository: 저장소. 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장, 작업자가 변경한 모든 히스토리를 확인 가능

-Working Tree: 작업 트리. 파일 수정, 저장 등의 작업을 하는 디렉터리

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

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

-Head: 현재 작업중인 Branch를 가리킴

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

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

Git 기본 명령어

git help: 도움말 기능. 가장 많이 사용하는 21개의 깃 명령어를 출력한다. 사용법이 궁금한 명령어에 대해 'git help [궁금한 명령어]'를 타이핑하면, 해당 깃 명령어의 설정과 사용에 대한 도움말이 출력된다.

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

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

-git branch: 새로운 브랜치 생성. 여러 사람과 협업할 때, 이 명령어로 새로운 브랜치를 만들고 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 생성하고 완성 후 협업자의 branch 혹은 main과 merge 한다.

-git add: 'staging 영역'에 변경내용 추가. 다음 commit 명령 전까지 변경분을 staging 영역에 보관하여 변동내역을 저장한다.

  • git add [업로드 하고싶은 파일 혹은 디렉토리 경로]
    -> 해당 파일 혹은 디렉토리 변경 내용 staging area 등록

  • git add .
    -> 현재 디렉토리 모든 변경 내용 staging area 등록 (상위X)

  • git add -A
    -> 작업 디렉토리 모든 변경 내용 staging area 등록

  • git add -p
    -> 터미널에서 staging area로 넘길 파일 선택 가능

-git commit: 깃의 가장 중요한 명령어. staging area에 있는 내용은 "커밋 메시지"를 반영한 수정본 파일의 묶음이다.

-git log: 커밋 내역 확인

-git push: 로컬 컴퓨터에서 서버로 변경사항을 "push"

-git pull: 서버 저장소로부터 최신 버전을 "pull" (서버 저장소의 데이터를 가져와 현재 branch와 merge)
-> 작업 도중에 기존 작업 내용은 유지하면서, 최신 코드로 업데이트 할 때 사용한다.

-git clone: 서버 저장소의 데이터를 로컬 컴퓨터로 복사한다. (서버 저장소의 데이터를 그대로 가져오고, 작업중이던 내역이 있다면 덮어쓰긴 된다.)
-> 프로젝트에 처음 투입될 때 사용한다.

-git checkout: 작업하지 원하는 브랜치로 이동한다.
-> git checkout Gaga: Gaga 브랜치로 이동
-> git checkout -b 가가: '가가'라는 브랜치 생성 후 가가 브랜치로 이동 (생성, 이동 동시에)

-git merge: 개별 branch에서 마친 작업을 master branch로 병합한다.

깃허브(Github)란 무엇인가?

깃허브는 분산 버전 컨트롤 소프트웨어 깃을 기반으로 소스 코드를 호스팅 하고, 협업 지원 기능들을 지원하는 마이크로소프트의 웹서비스이다.

가장 인기있는 소스 코드 호스팅 서비스이자 소프트웨어 개발 플랫폼이다.

오픈소스의 경우 무료로 서버를 제공하고 2019년부터 Private 소스들도 무료 업로드가 가능해졌다.

깃퍼브에서는 코드 호스팅 서비스 외에도 다양한 기능들을 제공하고 있다.

깃 저장소를 원격에서 관리할 수 있을 뿐만 아닐 협업이 가능하도록 웹 서비스로 이슈 트랙커를 제공하고 있다.

또한 저장소를 자신의 계정에 복사할 수 있는 포크 기능과 코드 변경 사항 반영을 요청하는 풀리퀘스트 기능은 오픈 소스의 기본적인 협업 방식으로 자리잡았다.

깃으로 사용할 수 있는 기능을 웹 인터페이스로 사용할 수 있으며, 저장소 관련 통계, 저장소 위키, 정적 웹사이트 호스팅, 패키지 호스팅, 지속적 통합을 제공하는 깃허브 액션 등의 서비스를 제공하고, 깃허브 데스크탑과 깃허브 포 모바일로도 서비스를 이용할 수 있다.

개인용으로 사용할 수 있을 뿐만 아니라 팀 단위나 비지니스로 사용할 수 있는 엔터프라이즈 플랜도 제공하고 있다. 엔터프라이즈 플랜의 경우 서비스형과 설치형을 모두 제공하고 있다.

0개의 댓글