Published on

Git 정리하기

글쓴이

    📌 목차

    Git
    • Git 이란?
    • Git 세팅하기
    • Github Workflow

    Git?

    버전 관리 시스템

    코드의 'snapshot'을 기준으로 프로젝트의 히스토리를 관리할 수 있는 툴이다. Git은 이 스냅샷을 commit 단위로 기록하며, 각 commit은 고유한 해시값을 가진다.

    그리고 commit 기준으로 굉장히 많은 일을 할 수 있다.

    기본적으로는 코드의 자취를 기록하는 역할을 하지만, commit 기준으로 그 commit에 매핑된 태그를 태깅하여 GPG, 정식 버전 등의 의미를 부여할 수 있고, commit 해시 값을 가져와 특정 시점의 코드를 가져와서 현재 코드에 적용할 수도 있다.

    Git이 적용된 프로젝트는 하나의 나무가 된다.

    main branch가 주 흐름을 가진 branch가 되며, 프로젝트 내용을 변경할 때 추가적인 branch를 따서 구현하기 때문이다. 구현이 완료되면 해당 branch를 주 브랜치에 merge하는 방식으로 프로젝트 소스가 관리된다.

    프로젝트 소스가 수정될수록 나무의 가지는 여러개가 되고, 나무는 더 울창해진다. 그렇다면 울창해진 나무는 필연적으로 히스토리가 복잡해질 수 밖에 없다.

    프로젝트 히스토리를 잘 관리하기 위해선 어떻게 해야할까?

    깃 저장소를 관리하는 방법이나 문화는 프로젝트별로 아주 다르지만,
    일단, 작업의 단위인 commit의 메세지와 작업내용을 명확히 해야한다는 말이 많다. CDD(Commit Message Driven Developmnet)를 주장하는 분이 있을 정도이다.

    commit 메세지 첫번째 줄에 작업의 주제를 명확히 명시할 수 있는 것이 좋다. 보통은 commit 메세지 컨벤션이 있다. 예시

    Git 세팅하기

    내 경우에는 homebrew를 사용해 git을 설치했다.

    brew install git
    

    git을 설치하고 나면 홈폴더에 .gitconfig 파일이 생성된다. 아래 명령어를 치면 현재 git 과 관련된 세팅을 볼 수 있다.

    git config --list
    

    사용자 관련 세팅

    git config --global user.name "Tina"
    
    git config --global user.email "migujeong@gmail.com"
    

    에디터관련 세팅

    vscode를 주로 사용하기 때문에 vscode 를 키고 cmd + shift + o 를 누르고, code 를 타이핑, shell 추가 옵션을 누르면 터미널에서 code . 명령어를 통해 현재 디렉토리를 vscode로 바로 열수 있다.

    .gitconfig vscode에서 수정하기

    git config --global core.editor "code --wait"
    

    windows 와 mac간 개행 호환성 설정하기

    윈도우와 맥의 개행 문자가 다르기 때문에 수정하지 않은 경우에도 다른 운영체제에서는 수정하였다고 인식될 수 있기 때문이다.

    윈도우라면

    git config --global core.autocrlf true
    

    맥이라면

    git config --global core.autocrlf input
    

    별칭 만들어서 git 명령어 간략하게 만들기

    별칭을 만드는 이유는..절약(?)을 위함이다. 하루에 git 명령어를 약 50번쯤 친다 가정하면 1년 18250번의 타이핑에서 아주 많은 타이핑을 절약(?) 할수 있다.`

    git config --global alias.st status
    git config --global alias.ct commit
    git config --global alias.ps push
    

    Github Workflow

    혼자서 작업을 한다면 상관없을 수도 있지만, 결국 Git은 협업을 잘하기 위한 도구이다. 가상의 상황을 가정해 정리해보려 한다.

    1. 이미 존재하는 프로젝트라 clone을 받았다.

    git clone https://github.com/foo/bar.git
    

    + 새로운 프로젝트라면 프로젝트 init

    git init  
    

    ls -arthl 명령어를 통해 숨겨진 .git 파일을 확인할 수 있다.

    1-1. 새로운 브랜치를 딴다.

    git switch -c bar_branch 
    

    2. bar.js, bar2.js 에 대한 수정을 완료했다.

    2-1. 수정사항을 확인한다.

    git diff
    

    + 수정사항을 초기화하고 싶다. (로컬에 기록은 되어있다.)

    git stash
    

    2-2 수정사항이 반영된 파일들을 확인한다.

    git status
    

    2-3. 수정사항을 로컬 무대에 올린다.

    staging area가 따로 있어서 2번의 반영작업을 거치게 된다.

    방법1) 모든 파일을 올린다.

    git add -A
    

    방법2) 현재 폴더의 파일을 올린다.

    git add .
    

    방법3) 특정 확장자만 올린다.

    git add *.js
    

    그외에도 다양한 옵션이 있다.

    2-4 수정사항을 로컬 저장소에 반영한다.

    방법1) 커밋 메세지 옵션을 단다.

    git commit -m "[Fix] bar기능 NPE 에러 해결"
    

    방법2) 커밋 메세지를 쓰는 파일로 반영한다.

    git commit -F commit_message
    

    3. 로컬 저장소의 내용을 원격 저장소에 반영한다.

    git push origin bar_branch
    

    Reference