[Git 01] Overview

4 minute read

지옥에서 온 정보 관리자 Git

  • 최근 git 을 사용해야 하는 일이 많이 있는 것을 보고 공부해야겠다는 생각이 들었다.
  • 중요성을 알면서도 미뤘다가 머리아파졌다 ㅎㅎ 하지만 늦었다고 생각했을 때가 가장 빠른 때이다.
  • Let's git it!!!!

[1] Introduction

2000만 줄의 코드를 12,000명의 개발자가 26년 동안 오픈소스 방법으로 프로그램을 제작하였다고 생각해보자.
그것은 이른바 ‘지옥’ 이다. 이러한 지옥에서 태어난 소프트웨어가 리눅스(LINUX) OS이다.

  • 리눅스의 창시자 리누스 토발즈Linus Torvalds는 리눅스를 제작하는 과정에서 겪게 된 우리가 상상하기 힘든 복잡한 코드지옥에서 벗어나기 위해서 ‘분산형 버전관리 시스템(DVCS)’인 git을 만들었다.

    git

  • 오늘날 git에서는 리눅스 뿐만 아니라 수많은 소스코드가 관리되고 있어, 다채로운 ‘지옥’과 함께하게 되었다.
  • 소스코드도 결국에는 ‘문서’이다. git은 소스코드 관리 뿐만 아니라 모든 종류의 문서를 관리하는 데에 사용된다. 즉, 소프트웨어 엔지니어만을 위한 툴은 아니다.
  • 하지만, 혼자서 혼자를 위한 문서 관리를 하는 사람들은 그다지 복잡하지 않은 ‘천국’에 있다고 생각하기 떄문에 git의 필요성을 못 느끼게 된다.
  • 이들에게는 git이 어렵기 때문에 지옥처럼 보일 것이다. 그러나 결국 천국에 있다고 생각하는 그들도 시간이 지나면 지옥을 맛보게 된다.
  • 지옥을 맛보는 것보단, 지옥보단 덜 복잡한 git을 사용하여 정보를 관리하여 천국에 있는 것이 나을 것이다.

[2] git의 3대 목적

Why git?

  • 간단하게 세가지를 먼저 기억하면 된다. 버전관리, 백업, 협업 (이 순서대로 차례대로 이해해야 한다.)
  • 앞에 있을수록 쉽고, 그것만으로도 할 수 있는 일이 많다. 뒤로 갈수록 기하급수적으로 어려워진다.

[2]-1 버전관리 (Version)

  1. git이 없다면?? 대략 이런 일이 일어날 것이다.

- 그렇다. 인간은 완벽하지 않다. 여기서도 우리가 실수를 해서 옛날 버전으로 돌아올 수도 있다는 것을 예측했다고 가정하자.  
- 저장할 때마다 숫자를 매겨가며 다른 이름으로 저장을 해보았다. (`졸업논문2.hwp`, `졸업논문3.hwp`)
    - 하지만 파일을 편집할 때마다 매번 복사하는 일은 번거롭기도 하고 여기서도 실수할 가능성도 많다.
    - 작업이 장기화 되고, 복잡해져서 파일이 1000개까지 늘어난다면..?
    - 게다가! 숫자를 쓰는 것만으론 무엇을 작업했는지 모를 것이다.
- 또한, 여러 명이 파일을 공유해가며 협업을 하는 과정을 생각해보면, 동시에 편집하는 바람에 다른 사람이 먼저 변경하고 있던 내용을 지워버릴 수도 있다.  
- 상상만 해도 지옥의 문턱에 다 온 것 같다.  
- 따라서, 우리는 각각의 변화마다 수정 내역과 일시를 기록하고 싶을 것이다. 그것이 바로 **git**의 역할이다!!  
  1. git을 데리고 오면??

    versions
    - .git 이라고 불리는 버전들을 저장하는 숨김 디렉토리가 생긴다.
    - commit을 통해 버전을 생성해준다. (퇴근), (다음날 출근) 작업 후에 commit한다. (퇴근) … 반복…

    • 이처럼 git은 버전 사이에 변경사항을 History에 잘 보여주기 때문에, 굳이 파일 이름명을 바꿔가며 버전관리를 할 필요가 없어졌을 뿐만 아니라 무엇이 바뀌었는지 비교까지 해준다.

    • 하지만 우리는 한 개의 파일만 작업하지 않는다. 여러 파일(image도 가능)을 한꺼번에 commit도 가능하다.

      commit

    • Commit 메시지는 이력을 남기는 작업이기 때문에, 다른 사람들이 확인하기 쉽도록 명료하게 남겨야 한다. 아래의 git에서 권장하는 메시지 형식을 따르는 것이 좋다.

      1번째 줄 : 커밋 내의 변경 내용을 요약
      2번째 줄 : 빈 칸
      3번째 줄 : 변경한 이유

  • 이런식으로 git의 유무를 비교해보면 git을 사용하면 얼마나 버전관리를 세련되게 할 수 있는지 볼 수 있다.

[2]-2 백업 (Back-up)

  • 로컬 저장소(내 컴퓨터)에 파일을 저장하면 언젠가는 파일이 유실된다. (언제 컴퓨터가 고장날 지 모르고, 언젠간 확실히 고장난다.)
  • 정보를 잃지 않기 위해 다른 저장소에 복제하는 것이 백업이다.
  • 이러한 백업을 ‘원격으로’ 지원해주는 사업자들이 있다. 가장 대표적인 서비스가 github이다.

    깃헙

  • 내 컴퓨터에 있는 로컬 저장소가 모든 디렉토리 및 파일, 구조가 동일하게 github에 생기게 된다.
  • 로컬에서 작업 후 commit을 한 후에 push를 하면 github과 같은 원격 저장소에 push(저장)되어, 구글 드라이브나 드랍박스와 같은 동기화 서비스와 동일한 효과를 낼 수 있다.
    backup

  • 다른 컴퓨터에서 작업을 하려면 github에서 pull로 프로젝트를 당겨 다운로드를 하여 작업한다. 그리고 다시 원격저장소에 push 해주어 동기화해준다.
  • 즉, 백업은 다른 사람과 협업을 하기 위한 징검다리 역할을 한다.

[2]-3 협업 (Collaboration)

  • 앞서 보았듯이, 백업을 하면 협업을 할 준비가 다 되어 있다는 것이다.
    • my 를 partner로 바꿔주면 똑같다! 동료와 서로 주고 받으면서 일을 하는 것이다. repo
  • 하지만, 동료와 같은 파일의 같은 부분을 수정을 했으면 어떻게 될까?
    • 나중에 업로드하는 사람에게 다시 처리하라고 경고를 주어, 덮어쓰지 않도록 교통정리를 해주는 역할을 하는 것이 git이다.

[3] git의 종류

  • 자동차에는 세단, suv, 트럭, 버스 등 여러가지 종류의 자동차가 있는 것처럼 자동차는 ‘제품’이 아니라 ‘제품군’의 개념을 가지고 있다.
  • 이처럼, git도 제품군으로, 여러가지 종류의 git 프로그램을 가지고 있다.
    • Github.com에서 만든 Github desktop (Simple)
    • Windows 탐색기 기반의 TortoiseGit (Windows only)
    • Atlassian 사의 Sourcetree(Advanced)
    • 원조 git 프로그램 CLICommand line interface 기반의 git (Addddddddvanced)
  • 수준에 맞는 프로그램을 선택하여 버전관리를 해보자!

Reference

Leave a comment