Post

프로그래머스, Git 정리

프로그래머스, Git 정리

Git 등장 배경

  • Linus Torvalds가 처음 배포 → 지옥에서 온 정보 관리자
  • 버전 관리 시스템을 사용하지 않는 버전 관리의 문제점 대두
    • 소스 코드 관리, 의존 패키지, 라이브러리…

→ 따라서, 버전 관리가 되는 시스템을 개발해야 함.

  1. 변경된 내용이 기록되어야 함
  2. 특정 시점을 명명해야 함 (reference, tag, version 등의 형태로)
  3. 수정 내역을 추적해야 함
  4. 이전 상태로 되돌릴 수 있어야 함

Git

  • 비교적 최근에 등장한 버전 관리 시스템 (2005)
  • 분산 버전 관리 시스템
  • 많은 기능 제공, 대중화 → 사실상의 표준
  • 대부분의 경우에서 합리적
    • But, 대규모 코드 베이스를 다루는 경우, 발생하는 성능 문제
  • 잘 변하지 않는 도구로 → 잘 다룰 수 있으면 좋음.



Git 시작 전

Git GUI Clients

다양한 GUI 클라이언트를 사용할 수 있다.

Git - GUI Clients

  • GitKraken
  • Sourcetree
  • Github Desktop
  • IDE 내장(VS code, WebStorm 등..)

Git 설치

실습을 위한 Git 설치 진행
Git - Downloading Package

Git Bash 사용

  • pwd: 현재 위치의 경로
  • ls: 현재 위치의 하위 내역 확인



Git 시작

Git 설정

1
2
3
4
git config --global user.email 이메일주소
git config --global user.name 사용자명

git config --global --list # 전역변수 목록 확인
  • 확인 이미지

    Image

Git 저장소 생성

  • 폴더를 하나 생성하여, git 초기화 실시
  • 상태를 확인하면, main으로 브랜치가 생성됨
1
2
3
4
5
mkdir 저장소명
cd 저장소명

git init    # git 초기화
git status  # git 저장소 상태 확인
  • 확인 이미지

    Image

Commit

  • 의미있는 변화
  • 예) 해당 저장소 내에, 파일 하나 생성.
    • 확인 이미지

      Image

      Image

  1. 변경사항 담기(추가)

    1
    2
    
     git add .          # 지금까지의 변화를 모두 담음
     git add 특정파일명 # 특정파일의 변화만 담음
    
    • 확인 이미지

      Image

      Image

  2. 커밋
    메시지와 함께 커밋을 진행할 수 있음

    1
    2
    3
    
     git commit -m "커밋 메시지 입력"
        
     git log # 커밋 기록 확인
    
    • 확인 이미지

      Image

      Image

  • addcommit구분해서 동작하는 이유

    Staging Area을 사용하여, 현재 상태를 담고 커밋한다.
    Image
    즉, 모든 파일의 변경사항을 구분해서 커밋하기 위함이다.

Branch

  • 작업의 분기점
  • 사용 예시
    • 새로운 작업 시작 전
    • 이 시점을 백업하고 싶을 때
    • 새로운 버전 출시 전
      1. 브랜치 확인
        생성했던 브랜치 목록과 선택된 브랜치가 무엇인지 확인 가능
    1
    
      git branch
    
    • 확인 이미지

      Image

  1. 브랜치 생성

    1
    2
    3
    
     git branch 새로운브랜치명
        
     git branch # 브랜치 확인
    
    • 확인 이미지

      Image

  2. 브랜치 전환

    1
    2
    3
    
     git switch 전환할브랜치명
        
     git branch # 브랜치 확인
    
    • 확인 이미지

      Image

  3. 정돈된 기록(log) 확인

    1
    
     git log --graph --oneline
    
    • 확인 이미지

      Image

Merge

  • 나뉘어진 분기 통합
    1. 원하는 브랜치 선택
    1
    2
    3
    
      git switch 전환할브랜치명
        
      git branch # 브랜치 확인
    
    • 확인 이미지

      Image

  1. 브랜치 병합

    1
    2
    3
    
     git merge 병합브랜치명 대상브랜치명
        
     git log --graph --oneline # 기록 확인
    
    • 확인 이미지

      Image

      Image

  2. 대상 브랜치 삭제

    1
    2
    3
    
     git branch --delete 대상브랜치명
        
     git log --graph --oneline # 기록 확인
    
    • 확인 이미지

      Image

Conflict (충돌)

  • 발생 이유

    동일한 영역이 서로 다른 시간에 수정될 때

  • 예) 충돌을 위한 브랜치 생성
    • 확인 이미지

      Image

  • 브랜치 충돌 상황 생성

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      git branch a
      git branch b
        
      git switch a  # index.html 수정 후 진행
      git add .
      git commit -m "index.html 타이틀 추가"
        
      git switch b  # index.html 수정 후 진행
      git add .
      git commit -m "index.html 파일 내용 추가"
        
      git log --graph --oneline --all # 모든 브랜치의 기록 확인
    
    • 확인 이미지

      Image

  • 브랜치 충돌을 위한 각각의 브랜치 main에 병합 → 충돌 발생!

    1
    2
    
      git merge a # 기존 병합
      git merge b # 새로운 병합
    
    • 확인 이미지

      Image

      Image

      Image

      Image

    ⇒ 어떤 것을 병합할지를 선택하면 됨! (다양한 옵션 존재!)

  • 직접 상황 선택도 가능
    1. 병합 취소

      1
      
       git merge --abort
      
    2. 기존 병합 후, 다음 병합도 진행

      1
      
       git merge --continue
      



Git 명령어 파레토 법칙

커멘드 중 20%가 사용량의 80% 차지

  • init, clone, status, log, add, commit, branch, checkout(switch)
  • push, pull, merge, rebase, revert, reset
This post is licensed under CC BY 4.0 by the author.