Git을 써야 하는 이유

형상관리 버전 관리에서 가장 우수하다고 여겨지는 것은 Git이라 할 수 있을 것이다. Git은 다음과 같은 특징이 장점으로 꼽히고 있다.

  1. 파일 단위로 변경 내용을 추적하며, 스테이지 후 커밋-푸시 과정을 거치며 파일 단위로 업로드할 수 있다.
  2. 중앙 서버 중심이 아니다. 분산 저장을 한다.
    • Git은 분명 원격 서버를 갖고 있지만, 서버와 연결되어 있지 않더라도 로컬 커밋까지는 무난하게 할 수 있다. SVN은 원격 서버 연결을 잃으면 일체의 커밋을 할 수 없다.
    • 로컬에 쌓인 커밋을 추후에 푸시하면, 서버와 동기화가 이뤄진다.
  3. 거의 대부분의 경우 충돌을 유연하게 해결할 수 있다.
  4. 소스 보관 및 복제용으로 활용할 수 있다.
    • Github가 git을 활용한 대표적인 공개 서비스로, 여기에 Public으로 올리면 무료로 소스 코드를 공개한 것이며, 누구든지 clone할 수 있다.
    • Git을 Clone하면 저장소의 역사와 내용이 통째로 복사되어 서버 유무와 무관하게 재업로드하여 역사를 이어갈 수 있다.
  5. 커밋이 용량을 크게 더욱 차지하지 않으며, 언제든지 되돌리거나 다른 커밋을 체크아웃할 수 있다.
    • Branch를 분기하여 사람들마다, 혹은 기능마다 나눠서 준비된 것만을 Merge하면 만들다가 만 기능탓에 컴파일을 할 수 없는 불편한 일이 사라진다.
    • 새로운 기능이 문제를 일으키는 것 같으면, 과거의 커밋을 꺼내올 수 있고, 다른 Branch로 갈아탈 수 있다.
    • Checkout을 하면, 로컬의 파일이 모두 변경되는데 그렇다고 커밋했던 기존의 파일이 사라지는 것 또한 아니다. 프로젝트 폴더 내용을 임시폴더처럼 부담없이 변경할 수 있다.

한편, 형상관리 버전 관리를 경험해보지 않은 사람은 “구글 드라이브나 카카오톡으로 압축하여 공유하면 되지”라고 생각하기 쉽다. 이는 다음과 같은 이유로 피해야 한다.

  1. 같은 파일이 다수 난립하여 선후 관계가 혼란스럽다.
    (최종.zip, 최종.zip (1), 최종-진짜.zip이 쌓여간다고 상상해보자. 극혐)
  2. 프로젝트 파일 전체를 압축하고 복사(업로드/다운로드), 해제하는 불필요한 과정으로 시간 낭비과 수고가 심하다.
  3. 매 순간 무엇을 변경하였는지 불투명하다.
  4. 이전에 되던 기능이 망가진 경우, 그 원인을 찾기란 무척 어렵다.
  5. 누군가 안 된다고 호소할 때, 그 사람의 파일이 최신으로 모든 파일 내용이 일치하는지 알 길이 없다.

Git을 쓰기 위한 준비

Windows 환경에서 Git을 쓰기 위해서는 크게 두 가지 유의할 점이 있다.

  • 클라이언트에서의 고민
    • Git을 명령어로 쓰겠는가?
      • Git 바이너리는 분명 명령 프롬프트나 bash 등에서 작동하는 CLI 앱으로, 사용하기에 불편하지만, GUI에 없는 기능을 쓰기 위해서 꼭 존재해야 한다.
      • 일부 GUI Git은 별도로 바이너리를 넣어줄 필요가 있지만, 대체로 GUI만 쓰는 경우 Git 또한 설치할 필요는 없다. 하지만 위 이유로 둘 다 깔면 좋다.
    • Git을 편하게 쓸 GUI를 선택하자.
      • SourceTree가 한글화 지원과 깔끔한 환경으로 널리 쓰이고 있다. 그러나 기능면에서 아쉬운 점이 있다.
      • GitKraken은 본 글에서 소개할 앱으로, 풍부한 기능과 막강한 시각화를 보여주고 있다. 그러나 영문만을 지원하고 있다.
      • TortoiseGit은 탐색기와 결합이 뛰어나나 기능이 많지 않고 직관적이지 못하다.
      • eclipse의 eGit, Visual Studio의 git 등 내부 소스 관리 플러그인을 활용할 수 있다. 하지만 최소한의 기능만을 제공하며 UI도 직관적이지 못해서 git에 대한 오해를 키울 수 있으며, 충돌 등 문제 해결이 어렵거나 불가능한 경우가 있다. 매우 비추천한다.
  • 서버에서의 고민
    • 누구든지 git 바이너리를 이용하여 git server를 셋팅할 수 있다.
    • github와 bitbucket과 같은 웹 git을 이용할 수 있다.
      • github: Public의 경우 무료. Private는 팀원당 7달러 비용
      • bitbucket: Public 무료. Private도 5명 이내인 경우에는 무료.
    • Synology NAS에 git을 깔아 쓰면 SSH 프로토콜로 접속하여 사용할 수 있다.

Git for Windows 다운로드

Linux 환경에서는 기본적으로 깔려있는 경우가 많고(Ubuntu 등), 필요시에도 단순한 명령으로 설치할 수 있다.

Linux Git 다운로드 페이지

Git을 컴퓨터에서 설정하려면

GUI만 쓴다면 필수 사항은 아니지만 git 커맨드 라인의 사전 설정을 해둘 필요가 있다.

우선 위 링크에서 파일 다운로드를 모두 마치고 설치한다. PATH 설정이 적용되기 위해서는 켜져 있는 명령 프롬프트를 모두 종료한 다음 다시 켜고, 필요한 경우 시스템 재시작도 도움이 된다.

다음과 같은 메시지를 보았다면, 경로가 제대로 등록되지 않은 것이다.

> git
'git' is not recognized as an internal or external command,
operable program or batch file.

이렇게 뜨면 성공한 것이다.

> git
usage: git [--version] [--help] [-C ] [-c name=value]
           [--exec-path[=]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=] [--work-tree=] [--namespace=]
            []

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help ' or 'git help '
to read about a specific subcommand or concept.

이제 기본 사용자 설정을 해보자. 아래 명령 한 번만 내려주면 커맨드 라인에서 git commit시 항상 먼저 설정된다.

> git config --global user.name "My Name"
> git config --global user.email myname@example.com

한 번 쓰면 계속 쓰게 되는 GitKraken

나머지 기능은 이어서 적어보도록 하겠습니다.