git ... 그게 뭔데 ,,, ,,, ?
git은 버전 관리 시스템의 한 종류입니다. ^^
아래처럼 파이널 프로젝트 만들고 싶지 않다면 따라오쇼
git,, 나도 그거 하려는데 .. 어떻게 하면 되는데 .. .!!! !!!
git을 하려면 초기에 세팅되어야 하는 정말 많은 과정이 있는데 ...
나중에 취업해서 초기 세팅할 때 기억용으로 간략하게 적어보겠다.
아래 과정은 터미널
앱을 통해 코드를 작성한다.
일련의 과정이 끝나면 터미널 대신 iTerm
을 사용할 예정쓰
Homebrew
는 명령어 한 줄로 프로그램을 설치/제거할 수 있는 프로그램이다.
맥북을 사용하는 개발자라면 ! 설치 필수라는 말씀이다 ~ !
git
역시 Homebrew를 통해 설치하고 관리할 예정이니 천천히 따라오쇼
brew -v
Cask
설치brew install cask
iTerm
은 맥의 공식 터미널을 대신하여 사용할 수 있는 가상 터미널 애플리케이션이다.
iTerm을 사용하면 가독성이 좋게 터미널을 꾸밀 수 있다. 개발자라면 터.꾸 놓칠 수 없지 !
iTerm 역시 Homebrew
를 통해 설치한다. 만능 Homebrew 👍
zsh
은 터미널에 명령어를 입력하고 실행할 수 있는 셸(Shell)이라는 프로그램이다. 자동완성, 히스토리 기능, 테마 설정 등의 기능을 제공한다.
oh my zsh
는 zsh를 더 쉽게 사용할 수 있게 돕는 플로그인이다.
iTerm
설치brew install --cask iterm2
zsh
, oh my zsh
설치brew install zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
git
설치brew install git
git -v
brew link --overwrite git
NVM
은 Node Version Manager다.
Node.js를 설치하고 여러 버전을 관리하는 데 도움을 주는 도구다.
Node.js
는 자바스크립트를 서버 측에서 실행할 수 있게 해주는 환경이다.
여러 프로젝트에서 다양한 Node.js 버전을 사용해야 할 때 NVM은 특히 유용하다.
NVM
설치brew install nvm
nvm -v
2-2. nvm 버전이 확인되지 않고 command not found 메시지가 나타날 경우,vi ~/.zshrc
파일 하단에 아래 명령 추가#NVM
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
iTerm
에 추가source ~/.zshrc
Node
설치nvm install 20.10.0
Node
버전 확인nvm list
git
을 좀 배우고 싶은데 ... 본론에 들어가기 전에 알아야 할 게 넘나리 많다.
git을 CLI 방식으로 사용할 예정이라, CLI 주요 명령어를 자주 사용한다.
그래서 간략하게 CLI가 무엇인지 알아보자 !
CLI
Command Line Interface, 텍스트 명령어를 입력하여 컴퓨터와 소통GUI
Graphical User Interface, 사용자가 그래픽 요소(버튼, 창, 아이콘 등)를 마우스를 사용해 조작NUI
Natural User Interface, 사용자가 일상 생활에서 익숙한 동작이나 제스처(시리야~, 스마트폰 터치 등)를 사용하여 컴퓨터와 상호 작용아래 주요 명령어는 특히 정말 많이 사용된다.
터미널에 아래의 별거 없는 명령어만 냅다리 치고 있어도 스벅에서 "웅성웅성 개발잔가봐 ... !"의 개발자가 될 수 있다.
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용, 계층 구조로 폴더/파일 확인Visual Studio Code의 터미널의 기본 쉘을 zsh로 설정
(mac의 경우 따로 설정하지 않아도 기본 설정 되어 있음)
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 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
Working Directory
코드 작성, 수정하는 곳Staging Area (index)
변경된 파일 중, 다음 버전으로 저장할 파일을 선택하는 곳Repository (HEAD)
선택한 변경 사항들을 기록하고, 이전 버전과의 변경 내역을 저장하는 곳Remote
여러 사용자들과 협업하고 코드를 공유Git을 사용할 때 Git flow 이해가 필요하다.
add, commit 명령어를 통해 flow를 이동할 수 있다.
현재 파일이 어떤 영역에 있는지 명확하게 인식해야만 ! 오류없이 Git을 1000% 활용할 수 있다. git status
명령어를 통해 현재 상태를 확인하며 오류를 줄여보자 !
git add
Working Directory -> Staging Area 이동git commmit
Staging Area -> Repository 이동git push
Repository -> Remote 이동오늘 특강을 통해 Git에 대해 명확히 이해할 수 있었다 !
그동안 flow에 대한 이해 없이, 냅다 add, commit, push만 했었다.
이젠 명령어를 사용했을 때 해당 파일이 어떤 영역에 있는지 알게 되었다 !
내일 두번째 특강이 진짜 찐인데 ...
내일도 한번 잘 정리해서 Git 척척박사가 되어야겠다 !