Git 활용하기

6 분 소요

좋다고 생각되는 Git 사용 방법들을 공유해본다. 여러 가지 툴이나 방법들을 찾아보았고, 사용 목적에 따라 바꾸거나 섞어 쓰는 편이다. 아래 나열한 항목들은 모두 내가 직접 사용해봤다.

설명을 참고해서 자기 자신에게 제일 편한 방법을 찾아 사용하는걸 추천한다. 여러 추천 글들을 보고 사용해보면서 느낀건데, 아무리 남들이 좋다고 해도 내 손에 익은게 최고다.

일반적인 작업들을 할 때

Git client들 중 하나 이상을 선택해서 사용한다. 나는 다음과 같은 과정을 거쳤다.

  1. Git 문서를 보며 터미널 환경에서 연습
  2. 화면을 예쁘게 보기 위해 Git GUI client(SmartGit, GitKraken, …)를 찾아서 사용
  3. 터미널 환경을 기본으로 사용하고, 보고 싶은 화면이 있을 때만 다른 툴들을 사용

GUI client는 아래와 같은 단점들이 있어 터미널 환경으로 복귀했다.

  1. GUI client 프로세스 하나를 항상 띄워놓아야 한다.

    터미널 환경에서는 터미널을 띄워두어야 하지 않냐고 반박할 수 있지만, VSCode처럼 integrated terminal 환경을 제공하는 개발 툴을 사용하면 해결된다.

    또, 터미널에서 다른 명령어도 사용할 수 있으니 항상 개발툴 하나, 터미널 하나를 띄워두는 편이라 굳이 하나를 더 띄워서 번거롭게 신경쓰고 싶지 않기도 했다.

  2. 메뉴로 제공하지 않는 기능은 사용할 수 없다.

    이건 치명적이다. 옛날에 GitKraken을 설치했다가 삭제한 이유였다(최신 버전에서는 개선된걸로 보인다).

    기능을 메뉴로 제공한다 해도 메뉴가 어디 있는지 찾기 힘들다면 적어도 그 기능을 실행할 때는 사용할 필요가 없는 툴이라고 생각한다.

  3. 명령어 커스터마이징이 어렵다.

    터미널 환경에서는 명령어 조합으로 간단하게 할 수 있는 일들도 번거롭게 일일히 클릭해야 한다.

    예를 들어, REST API를 활용해서 Gerrit Code Review에 리뷰어 여러 명을 한번에 추가하거나, git merge할 때 내가 원하는 규칙과 포맷에 맞춰 commit message를 작성하는 일들은 터미널 환경 스크립트를 만들어서 간편하게 해결할 수 있다.

하지만, 예쁜 UI 하나만으로도 GUI client를 사용해볼 가치는 충분하다고 생각한다.

Git

git-logo

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

  • Platforms: Windows, Mac, Linux
  • Price: Free

공식 Git으로 터미널, GUI 환경 모두 제공한다. 터미널 환경을 위해서 설치했고, GUI 기반 환경은 SmartGit이나 GitKraken이 UI가 더 좋았다.

빠르고 간편하게 사용할 수 있어 터미널 환경에 적당한 설정을 추가해서 주력으로 사용하고 있다.

하지만 작업에 따라 화면을 더 예쁘게 보고 싶을 때가 있어 그럴 때만 다른 툴들을 섞어서 사용한다.

tig

tig-main-diff-view

Tig is an ncurses-based text-mode interface for git.

  • Platforms: Windows, Mac, Linux
  • Price: Free

tig는 ncurses 기반으로 개발된 Git client다.

git log, git blame 등 화면들을 터미널 환경에서 좀더 예쁘게 보고 싶을 때 사용한다.

다양한 기능과 화면을 제공하므로 단축키 몇 개에만 익숙해지면 tig 하나로 왠만한 Git 기능들을 모두 이용할 수 있다.

SmartGit

smart-git-preview

Get your commit done.

SmartGit is a Git client with support for GitHub Pull Requests+Comments and SVN.

It runs on Mac OS X, Windows and Linux.

  • Platforms: Windows, Mac, Linux
  • Price: $79/user / Free for non-commercial use

SmartGit은 GUI client다.

다양한 기능들과 예쁜 UI를 제공하는 강력한 GUI client다.

특히, 기본 내장 diff 화면 스타일이 마음에 든다. 여러 GUI client를 찾아보았지만 이런 스타일을 찾기 힘들었다.

Free for non-commercial use 가격 정책이라 회사에서 무료로 사용할 수 없다는 점이 가장 아쉽다.

GitKraken

git-kraken-preview

The most popular Git GUI for Windows, Mac AND Linux

  • Platforms: Windows, Mac, Linux
  • Price: Free for non-commercial use
  • Pro Features: Support, Merge Conflict Editor, Multiple Profiles, GitHub Enterprise Integration, Commercial Use, Offline License Server

GitKraken은 GUI client다.

UI가 매우 예쁘다. SmartGit과 비교하자면, UI는 더 예쁘지만 기능은 아쉽다.

대신 Release Notes를 보면 릴리즈 주기가 빠르고, GitKraken Pro 페이지를 보면 사용하고 있는 회사도 많아 보인다.

Commercial Use and Additional Features를 위해선 GitKraken Pro를 사용해야 하고, 사용자 수에 따라서 가격이 다르다.

환경설정

bash-git-prompt

bash-git-prompt-preview

bash-git-promptbash prompt에서 git 기본 정보들(branch name, status, …)을 미리 볼 수 있게 해준다.

Oh My Zsh.bashrc 파일 직접 수정과 같은 방법을 사용해보았으나 Oh My Zsh는 속도가 느렸고, .bashrc 파일 직접 수정은 환경 설정이 번거로웠었다.

bash-git-prompt는 아래와 같은 명령어 두 줄로 간단하게 설치할 수 있고, 설정도 매우 간단하며 속도도 빨랐다.

cd ~
git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt --depth=1

누가 고친건지 추적할 때

git blame 기능으로 마지막에 누가 고친건지 추적할 수 있는데, 터미널 환경에서는 아래와 같이 검색하기도 힘들고 syntax highlight 미지원으로 보기도 힘들다.

$ git blame -L 12,22 simplegit.rb
^4832fe2 (Scott Chacon  2008-03-15 10:31:28 -0700 12)  def show(tree = 'master')
^4832fe2 (Scott Chacon  2008-03-15 10:31:28 -0700 13)   command("git show #{tree}")
^4832fe2 (Scott Chacon  2008-03-15 10:31:28 -0700 14)  end
^4832fe2 (Scott Chacon  2008-03-15 10:31:28 -0700 15)
9f6560e4 (Scott Chacon  2008-03-17 21:52:20 -0700 16)  def log(tree = 'master')
79eaf55d (Scott Chacon  2008-04-06 10:15:08 -0700 17)   command("git log #{tree}")
9f6560e4 (Scott Chacon  2008-03-17 21:52:20 -0700 18)  end
9f6560e4 (Scott Chacon  2008-03-17 21:52:20 -0700 19)
42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 20)  def blame(path)
42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 21)   command("git blame #{path}")
42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 22)  end

여러 사람들과 함께 고치는 코드라면 꼭 필요한 기능인데 편하게 검색할 수 있고 예쁘게 표시되어야 한다고 생각한다.

tig

tig-blame-view

Tig is an ncurses-based text-mode interface for git.

  • Platforms: Windows, Mac, Linux
  • Price: Free

tig는 위에서도 설명했지만 preview image를 보면 git blame 화면을 얼마나 편하게 볼 수 있는지 알 수 있다.

터미널 환경에서 간편하게 실행할 수 있고, Enter키를 누르면 해당 커밋의 git log까지 같이 한번에 볼 수 있다.

GitLens

git-lens

GitLens supercharges the built-in Visual Studio Code Git capabilities.

  • Platforms: VSCode (Windows, Mac, Linux)
  • Price: Free

VSCode는 요즘 애용하고 있는데, GitLens는 여러 extension 중에서도 아주 유용하다.

Preview image를 보고 있으면 더이상 자세한 설명은 필요없다.

차이점을 예쁘게 보고 싶다.

git diff 기능으로 차이점을 간단하게 볼 수 있지만, 수정량이 조금만 많아져서 한 눈에 보기 힘들다.

한 커밋에 너무 많은 수정을 하는 것 자체가 바람직하지 않은 일일 수 있지만, 여러 커밋 사이에 변경된 차이를 한번에 보고 싶을 때도 있으니 알아두면 유용하다.

기본 git diff 화면에서 보여주는 format처럼 표시하는 툴들은 많지만, 아래에서 소개하는 스타일처럼 직관적으로 표시하는 툴들은 너무나 적어 아쉽다.

Git difftool + meld

meld-preview

Meld is a visual diff and merge tool targeted at developers.

  • Platforms: Windows, Mac(not official), Linux
  • Price: Free

git difftoolmeld를 연동해서 사용할 수 있다. 참고로, -d | --dir-diff 옵션은 구버전에서 지원하지 않을 수 있으니 git을 최신 버전으로 업데이트하자.

git difftool -t meld -d

alias로 짧게 만들거나 git config에 추가하여 간단하게 사용할 수 있게 만들면 편하다. 이 방식의 장점은,

  1. 터미널 환경에서 필요할 때만 바로 실행할 수 있으니 간편하다.
  2. working tree를 기준으로 차이점을 보고 있다면 meld 내에서 수정한 부분들이 바로 working tree에 반영된다.
  3. git diff의 다양한 옵션들을 여전히 사용할 수 있고 특정 커밋간 비교도 쉽다.

SmartGit

smart-git-diff

Get your commit done.

SmartGit is a Git client with support for GitHub Pull Requests+Comments and SVN.

It runs on Mac OS X, Windows and Linux.

  • Platforms: Windows, Mac, Linux
  • Price: $79/user / Free for non-commercial use

위에서 설명했던 SmartGit의 차이점 화면이다.

GUI client라서 리비전 그래프의 비교하고 싶은 커밋 두 개를 선택하면 차이점을 빠르고 간편하게 예쁘게 볼 수 있다.

그래도, 알고 사용하자.

아무리 툴이 좋다지만, 기본적인 개념 정도는 잡고 시작하는게 맞다고 본다.

Git book

Git - Book 정독을 추천하지만, 주관적으로 중요하다고 생각하는 목차는 아래와 같다.

  1. 1.3 시작하기 - Git 기초, 1.6 시작하기 - Git 최초 설정

  2. 2.1 Git의 기초 - Git 저장소 만들기부터 끝까지 따라해보면 좋다.

  3. 3.1 Git 브랜치 - 브랜치란 무엇인가부터 끝까지 훑어보는 느낌으로 본다.

    개념잡기에 좋다.

    3.6 Git 브랜치 - Rebase 하기는 익숙하지 않으면 어려워보이니 따라해보면 좋다.

  4. 4.1 Git 서버 - 프로토콜, 4.9 Git 서버 - 또 다른 선택지, 호스팅

    Git 서버 설정하는 내용인데, 이미 좋은 서비스들이 많이 나와있기 때문에 정말 만에 하나 필요할 때만 봐도 좋은 내용같다.

  5. 5.1 분산 환경에서의 Git - 분산 환경에서의 워크플로부터 끝까지 봐두는 편을 추천한다.

    프로젝트를 진행하면서 필요한 내용들은 아니지만, 오픈소스 프로젝트에 기여하는 방법은 Pull request에 설명되어 있다.

  6. GitHub은 워낙 공식 홈페이지 설명이 잘 되어있어 필요없어 보이는 부분이다.

  7. 7.1 Git 도구 - 리비전 조회하기부터 끝까지 가볍게 훑는 느낌으로 보는걸 추천한다.

    모두 다 활용하기 위해서라기보단, 일단 봐두면 나중에 필요할 때 생각나서 찾아볼 때가 있는 절이다.

  8. 8.1 Git맞춤 - Git 설정하기만 보길 추천한다.

    좀더 대규모 팀이 되어 이런저런 정책이 필요할 때를 위한 내용들이다.

  9. Git을 다른 버전관리시스템(SVN, P4, …)과 연결하는 방법에 대한 내용들이다. 필요할 때 봐도 될듯하다.

  10. 10.1 Git의 내부 - Plumbing 명령과 Porcelain 명령부터 끝까지 Git이 어떻게 구현되었는지 궁금하다면 보길 추천한다.

    하지만 몰라도 일반적으로 사용하기에는 지장이 없는 내용들이다.

  11. A1은 너무 당연한 내용들로 보인다.

  12. A2는 C, Java 등 다른 언어들에서 어떻게 Git을 사용하는지에 대한 내용들이니 궁금하다면 보자.

  13. A3.1 Git 명령어 - 설치와 설정부터 끝까지 보길 추천한다.

    간단하게 명령어 설명들을 적어놨는데, 복습하는 느낌 겸 이전에 나오지 않았던 명령어 몇개가 있어 괜찮다.

Pull request

GitHub에서 사용하는 Git workflow로, 중요하다고 생각하는 부분이기에 목차를 따로 냈다.

  1. Git - Book: 5.1 분산 환경에서의 Git - 분산 환경에서의 워크플로

    5절 전체 읽어보기 추천한다.

  2. Attlasian git tutorial: Making a Pull Request

    1번 내용을 보고 나서 보면 이해가 쉬울 내용들이다.

  3. GitHub Guide: Understanding the GitHub Flow

    GitHub 오픈소스 프로젝트에 어떻게 기여할 수 있는지 step by step으로 설명하고 있는 GitHub Flow 가이드다.

댓글남기기