호우동의 개발일지

Today :

article thumbnail

썸네일


GUI 환경 대신 굳이 CLI를 사용하는 이유?

  • GUI 프로그램은 CLI 기능 중 자주 쓰는 기능만 모아서 쓰기 편리하게 만든 것
    • GUI는 Git의 모든 기능을 100% 사용할 수 없다.
      Git을 더욱 잘 활용하기 위해 CLI 환경에서 Git을 사용해야 한다.

 


Git 용어

  • 워킹트리(Working Tree) : 사용자가 파일과 하위 폴더를 만들 과 작업 결과물을 저장하는 곳
    • 작업 디렉터리, 작업 폴더가 같은 뜻으로 사용
    • 커밋을 체크아웃하면 생성되는 파일과 디렉터리(공식문서)
    • 작업 폴더에서 [. git] 폴더(로컬저장소)를 뺀 나머지 부분
    • 작업 폴더 : 워킹트리 + 로컬저장소

  • 로컬 저장소 : [. git] 폴더
    • 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장

  • 원격 저장소 : 로컬 저장소를 업로드하는 곳(GitHub)
  • Git 저장소 : Git 명령으로 관리할 수 있는 폴더 전체
    • 엄밀하게는 로컬저장소를 의미하지만 넓은 의미로 작업 폴더를 의미하기도 함
    • 로컬저장소와 Git 저장소를 같은 뜻으로 사용(공식 문서)

 


Git 저장소 초기화

  • git init : 현재 폴더에 Git 저장소를 생성한다.
    • 현재 폴더에. git이라는 숨김폴더가 생성되는데 이는 로컬저장소임을 의미한다.

 


Git 워킹트리 상태 확인

  • git status : Git 워킹트리의 상태를 보는 명령어로 매우 자주 사용
    • 워킹트리가 아닌 폴더에서 실행하면 오류 발생
    • git status -s : 위 명령보다 짧게 요약해서 상태를 보여주는 명령어, 변경된 파일이 많을 때 유용

 


옵션 설정


옵션 종류 및 우선순위

  • 시스템 환경 옵션 : PC 전체의 사용자를 위한 옵션
  • 전역 옵션 : 현재 사용자를 위한 옵션 → 일반적/개인 PC에 사용
  • 지역 옵션 : 현재 Git 저장소에서만 유효한 옵션 → 공용 PC
  • 우선순위 : 지역옵션 > 전역 옵션 > 시스템 옵션

 


옵션 설정 명령어

  • git config --(local/global/system) <옵션명> :지정한 (지역/전역/시스템) 옵션의 내용을 확인
  • git config --(local/global/system) <옵션명> <새로운 값>
    :
    지정한 (지역/전역/시스템) 옵션의 값을 새로 설정

  • git config --(local/global/system) --unset <옵션명> : 지정한 (지역/전역/시스템) 옵션을 삭제
  • git config --list : 현재 프로젝트의 모든 옵션을 확인

 


기본 CLI 명령어


add

  • git add 파일 1 파일 2.. : 파일들을 스테이지에 추가
    • 새로 생성한 파일들은 무조건 add 명령어를 사용하여 스테이지에 올려야 함

 


commit

  • git commit : 스테이지에 있는 파일을 커밋
    • git commit -a : add 명령어를 생략하고 바로 커밋
      • 변경된 파일과 삭제된 파일은 자동으로 스테이징 되고 커밋
      • untracked 파일은 커밋되지 않음

 


push

  • git push [-u] [원격저장소별명] [브랜치이름] : 현재 새로 생성한 커밋들을 원격저장소에 업로드
    • u 옵션 : 브랜치의 업스트림을 등록 → 한번 등록 후에는 git push만 입력해도 됨

 


pull

  • git pull : 원격저장소의 변경사항을 워킹트리에 반영(fetch + merge)

 


fetch

  • git fetch [원격저장소별명] [브랜치이름] : 원격저장소의 브랜치와 커밋들을 로컬저장소와 동기화
    • 옵션을 생략하면 모든 원격저장소에 소 모든 브랜치를 가져옴

 


merge

  • git merge 브랜치이름 : 지정한 브랜치의 커밋들을 현재 브랜치 및 워킹트리에 반영

 


스테이징 취소하기

  • git reset [파일명] : 스테이지 영역에 있는 파일들을 스테이지에 내린다. (언스테이징)
    • 워킹트리의 내용은 변경되지 않음
    • 옵션 생략할 경우 : 스테이지의 모든 변경사항을 초기화
    • 스테이지에서 내릴 때 가장 많이 사용하는 명령어
    • 리셋 모드 옵션을 안 주면 mixed reset

 


CLI로 커밋 log 살펴보기

  • git log : 현재 브랜치의 커밋 이력을 보는 명령어
    • git log -n <숫자> : 전체 커밋 중 최신 n개의 커밋만 살펴봄
    • --online : 커밋 메시지를 한 줄로 요약해서 보여줌. 생략하면 커밋 정보 자세히 표시
    • --graph : 커밋 옆에 브랜치의 흐름을 그래프로 보여줌(GUI와 비슷)
    • --decorate : 브랜치와 태그 등의 참조를 간결히 표시
    • --all : 옵션이 없는 경우 HEAD와 관계없는 옵션은 보여주지 않음.

CLI로 살펴본 커밋 로그
CLI로 살펴본 커밋 로그

 


SHA1 해시 체크섬

  • Git 커밋은 일반적으로 커밋 아이디인 영문 소문자와 숫자 조합의 40자리 SHA1 해시 체크섬 값을 가짐
  • 전 세계에서 하나뿐인 고유한 값
  • 이 값을 통해 Git은 커밋 객체를 구별할 수 있고, 오류 없이 안전하게 저장되어 있는지 판단 가능
  • 실제로 위 사진의 노란색과 같이 앞의 7자리만 보여줌

 


원격저장소 관련 명령어

 


remote

  • git remote add <원격저장소 이름> <원격저장소 주소> : 원격저장소를 등록
    • 원격저장소는 여러 개 등록 가능하지만 같은 별명의 원격저장소는 중복 불가

  • git remote -v : 원격저장소 목록을 확인
  • 원격저장소 등록 후 --set-upstream 또는 push-u 옵션으로 해당 원격저장소의 master 브랜치를
    로컬저장소의 master 브랜치의 업스트림으로 지정해줘야 함
    • HEAD, 로컬저장소의 master, 원격저장소의 master이 모두 같은 커밋을 가리키게 됨

 


clone

  • git clone <저장소 주소> [새로운 폴더명] : 저장소 주소에서 프로젝트를 복제
    • 저장소 주소가 꼭 원격일 필요 없음 → 로컬저장소의 주소를 복제해도 됨
    • 새로 생길 폴더명을 생략할 시, 프로젝트 이름과 같은 이름의 폴더가 새로 생성
    • 이미 같은 이름의 폴더명이 존재할 시 clone에 실패