Git, 그게 뭔데 (1)

소정·2023년 12월 28일
1

멋쟁이사자처럼

목록 보기
12/20
post-thumbnail

git ... 그게 뭔데 ,,, ,,, ?
git은 버전 관리 시스템의 한 종류입니다. ^^
아래처럼 파이널 프로젝트 만들고 싶지 않다면 따라오쇼


초기 세팅 for mac

git,, 나도 그거 하려는데 .. 어떻게 하면 되는데 .. .!!! !!!
git을 하려면 초기에 세팅되어야 하는 정말 많은 과정이 있는데 ...
나중에 취업해서 초기 세팅할 때 기억용으로 간략하게 적어보겠다.

아래 과정은 터미널 앱을 통해 코드를 작성한다.
일련의 과정이 끝나면 터미널 대신 iTerm을 사용할 예정쓰

1. Homebrew

Homebrew는 명령어 한 줄로 프로그램을 설치/제거할 수 있는 프로그램이다.
맥북을 사용하는 개발자라면 ! 설치 필수라는 말씀이다 ~ !

git 역시 Homebrew를 통해 설치하고 관리할 예정이니 천천히 따라오쇼

  1. Homebrew 페이지에서 설치 코드를 복사하여 터미널에 복사한다.
  2. 비밀번호는 mac 비밀번호 입력 !
    (비밀번호 입력시 화면의 변화가 없으니 담담하게 비번을 입력하시오)
  3. 설치 확인
    brew -v
  4. Cask 설치
    brew install cask  

2. iTerm2

iTerm은 맥의 공식 터미널을 대신하여 사용할 수 있는 가상 터미널 애플리케이션이다.
iTerm을 사용하면 가독성이 좋게 터미널을 꾸밀 수 있다. 개발자라면 터.꾸 놓칠 수 없지 !
iTerm 역시 Homebrew를 통해 설치한다. 만능 Homebrew 👍

zsh터미널에 명령어를 입력하고 실행할 수 있는 셸(Shell)이라는 프로그램이다. 자동완성, 히스토리 기능, 테마 설정 등의 기능을 제공한다.
oh my zsh는 zsh를 더 쉽게 사용할 수 있게 돕는 플로그인이다.

  1. iTerm 설치
    brew install --cask iterm2
  2. zsh, oh my zsh 설치
    brew install zsh  
    sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

3. Git

  1. git 설치
    brew install git
  2. 설치 확인
    git -v
  3. 최신 버전으로 변경
    brew link --overwrite git

4. NVM

NVMNode Version Manager다.
Node.js를 설치하고 여러 버전을 관리하는 데 도움을 주는 도구다.

Node.js는 자바스크립트를 서버 측에서 실행할 수 있게 해주는 환경이다.
여러 프로젝트에서 다양한 Node.js 버전을 사용해야 할 때 NVM은 특히 유용하다.

  1. NVM 설치
    brew install nvm
  2. 설치 확인
    nvm -v
    2-2. nvm 버전이 확인되지 않고 command not found 메시지가 나타날 경우,
    vi ~/.zshrc 파일 하단에 아래 명령 추가
    #NVM
    export NVM_DIR=~/.nvm
    source $(brew --prefix nvm)/nvm.sh
  3. iTerm에 추가
    source ~/.zshrc
  4. Node 설치
    nvm install 20.10.0
  5. Node 버전 확인
    nvm list

CLI

CLI가 뭔데 ...

git을 좀 배우고 싶은데 ... 본론에 들어가기 전에 알아야 할 게 넘나리 많다.
git을 CLI 방식으로 사용할 예정이라, CLI 주요 명령어를 자주 사용한다.
그래서 간략하게 CLI가 무엇인지 알아보자 !

  • CLI Command Line Interface, 텍스트 명령어를 입력하여 컴퓨터와 소통
  • GUI Graphical User Interface, 사용자가 그래픽 요소(버튼, 창, 아이콘 등)를 마우스를 사용해 조작
  • NUI Natural User Interface, 사용자가 일상 생활에서 익숙한 동작이나 제스처(시리야~, 스마트폰 터치 등)를 사용하여 컴퓨터와 상호 작용

CLI 주요 명령어

아래 주요 명령어는 특히 정말 많이 사용된다.
터미널에 아래의 별거 없는 명령어만 냅다리 치고 있어도 스벅에서 "웅성웅성 개발잔가봐 ... !"의 개발자가 될 수 있다.

  • pwd print working directory, 현재 작업중인 폴더 확인
  • mkdir Make Directory, 폴더 생성
  • cd Change Directory, 디렉토리 이동
  • ls List Segments, 디렉토리 및 파일 목록 출력
    ls -al 폴더 목록을 출력할 때 숨겨진 항목을 포함하여 사용 권한, 소유자, 그룹, 크기, 날짜 등 상세 정보를 함께 표시
  • touch 빈 파일을 생성
  • echo 간단한 내용이 들어있는 파일을 생성
    예시 : echo 'let me = "Frontend Developer"' > js/index.js
  • cat Concatenate, 파일 내용 확인
  • rm Remove, 파일/(비어있지 않은)디렉토리 삭제
  • rmdir Remove Directory, 디렉토리 제거
  • mv Move, 파일/디렉토리 이동 및 이름 변경
  • cp Copy, 파일/디렉토리 복사
    cp -r 디렉터리와 그 내용을 모두 복사
  • take mac용, 폴더 생성 후 이동
  • tree mac용, 계층 구조로 폴더/파일 확인

Git

Git CLI 방식으로 사용하기

  1. Visual Studio Code의 터미널의 기본 쉘을 zsh로 설정
    (mac의 경우 따로 설정하지 않아도 기본 설정 되어 있음)

  2. Git 환경 설정

    # Git 사용자 ID
    git config --global user.name "ID"
    # Git 사용자 Email
    git config --global user.email email@gmail.com
    # Git Default Editor 설정 (Visual Studio Code)
    git config --global core.editor "code --wait"
    
    # windows와 Mac OS의 공백문자(줄바꿈) (Carriage return, Lind Feed)
    # Windows 환경
    git config --global core.autocrlf true
    # Mac OS 환경
    git config --global core.autocrlf input
    
    # 로컬 환경에서 git init 명령을 통해 Git 저장소를 초기화하면 기본 브랜치가 main이 되도록 설정 
    git config --global init.defaultBranch main

Git 명령어

  • git init 저장소 생성

  • git status 현재 상태 확인

    # 변경된 파일명이 빨간색으로 보일 경우 Working Directory 상태
     # 변경된 파일명이 초록색으로 보일 경우 Staging Area 상태
     # nothing to commit, working tree clean의 경우 변경 내용이 없음을 나타냄
  • git diff 파일의 변경내용 비교하기

    # difftool을 사용하여 파일의 변경내용을 비교
    git config --global -e
    [diff]
        tool = vscode
    [difftool "vscode"]
        cmd = code --wait --diff $LOCAL $REMOTE
  • git add 파일의 변경 사항을 index(Staging Area)에 추가

  • git restore <file> 작업 내용 취소

    # Working Directory에 변경 내용을 취소할 경우(Tracked File) 
    git restore <file>
    # Staging Area에 변경 내용을 Working Directory로 되돌릴 경우
    git restore --staged <file>
  • git rm --cached <file> 한번도 커밋을 하지 않은 파일을 Working Directory로 이동

  • git commit 파일의 변경 사항에 대한 이력 생성

    # 커밋 하기
    git commit -m "커밋 메시지"
    
    # 마지막 커밋 메시지 수정
    git commit --amend
    # VS Code에 COMMIT_EDITMSG 창에 수정할 커밋 메시지 입력 후 창 닫기
  • git rebase -i <hash> 특정 커밋 수정

    # pick -> reword로 수정한 후 커밋 메시지 수정
    reword <hash> "수정할 커밋 메시지"
  • git log 커밋 이력 확인

    # Log를 한줄, 그래프 형태로 보기
    git log --oneline
    git log --oneline --graph
    
    # Log가 많을 경우 모두 출력하고자 할 때
    git config --global core.pager cat
    # 
  • git checkout HEAD~ 과거 커밋 이력 확인

    # 이전 2개의 커밋으로 이동
    git checkout HEAD~2
    # 특정 커밋으로 이동
    git checkout <hash>
    # 마지막 커밋으로 복귀
    git checkout main
  • git branch 브랜치 생성 및 이동

    # likelion이라는 브랜치를 생성
    git branch likelion
    # likelion이라는 브랜치로 이동
    # checkout 명령이 여러 기능을 가지고 있기때문에 Git 2.23.0 버전에서는 
    # 브랜치 이동을 위한 기능으로 switch 명령이 추가 됨 (checkout, switch 모두 사용 가능)
    git checkout likelion
    git switch likelion
    # main 브랜치로 복귀
    git switch main
  • git reset HEAD~ 이전 상태로 복원(이력 제거)

    # 이전 2개의 커밋으로 돌아가기 (--mixed : default)
    # 커밋 기록은 삭제되지만 Working Directory에 변경 사항은 남김
    git reset HEAD~2
    # 커밋 기록은 삭제되지만 Working Directory와 Staging Area에 변경 사항은 남김
    git reset --soft HEAD~2
    # HEAD~2 커밋으로햣 복원되며 이후에 변경된 커밋 기록은 모두 삭제
    git reset --hard HEAD~2
  • git remote 리모트(Remote) 브랜치

    # 리모트 브랜치 조회
    git remote -v
    # 리모트 브랜치 추가
    git remote add origin <https://github.com/ID/REPOSITORY>
    # 리모트 브랜치 삭제
    git remote remove origin
    git remote rm origin
  • git push 로컬의 변경 이력을 리모트로 전송

    # 로컬의 main 브랜치의 변경 이력을 리모트 main 브랜치로 보내기
    git push origin main
  • git pull 리모트의 내용을 로컬에 반영 (fetch + merge)

    # 리모트 main 브랜치의 변경 이력을 로컬 main 브랜치로 가져오기
    git pull origin main
    
    # rebase 방식의 merge를 사용하지 않음
    git config --global pull.rebase false
    
    # fast-forward only 옵션 사용하지 않음
    git config --global --unset pull.ff
    
    # 서로 관련 기록이 없는 두 저장소의 병합을 허용하기
    git pull origin main --allow-unrelated-histories
  • git merge 브랜치 병합하기

    # develop 브랜치를 main 브랜치에 병합
    git merge develop
    
    # 충돌(conflict) 시 mergetool을 활용해 해결
    # config 설정에 mergetool 추가
    git config --global -e
    [merge] 
    tool = vscode
    [mergetool "vscode"] 
    cmd = code --wait $MERGED

Git flow

  • Working Directory 코드 작성, 수정하는 곳
  • Staging Area (index) 변경된 파일 중, 다음 버전으로 저장할 파일을 선택하는 곳
  • Repository (HEAD) 선택한 변경 사항들을 기록하고, 이전 버전과의 변경 내역을 저장하는 곳
  • Remote 여러 사용자들과 협업하고 코드를 공유

Git을 사용할 때 Git flow 이해가 필요하다.
add, commit 명령어를 통해 flow를 이동할 수 있다.

현재 파일이 어떤 영역에 있는지 명확하게 인식해야만 ! 오류없이 Git을 1000% 활용할 수 있다. git status 명령어를 통해 현재 상태를 확인하며 오류를 줄여보자 !

  1. git add Working Directory -> Staging Area 이동
  2. git commmit Staging Area -> Repository 이동
  3. git push Repository -> Remote 이동

오늘 특강을 통해 Git에 대해 명확히 이해할 수 있었다 !
그동안 flow에 대한 이해 없이, 냅다 add, commit, push만 했었다.
이젠 명령어를 사용했을 때 해당 파일이 어떤 영역에 있는지 알게 되었다 !

내일 두번째 특강이 진짜 찐인데 ...
내일도 한번 잘 정리해서 Git 척척박사가 되어야겠다 !

profile
" 퍼블리셔에서 프론트엔드로 Level up 중 =3 "

0개의 댓글