코드스테이츠 - 3회차 백엔드 부트캠프/Section 1

2022.08.29 월 - Git

곰돌이볼 2022. 8. 29. 09:03

📄 학습내용

버전 관리 시스템의 필요성

  • VCS(Version Control System, 버전 관리 시스템) : 한 명 이상이 프로젝트를 진행할 때 소스코드파일의 버전 및 형상을 관리하기 위한 시스템
  • git은 대표적인 분산형 버전 관리 시스템이다.

 

Git

  • Git : 소스코드 파일의 버전 관리, 백업, 협업을 위한 프로그램
  • Github : git repository를 온라인 저장소에 저장해서 협업 및 관리를 편리하게 해주는 프로그램
  • Git과 Github의 차이점은?
    • Git은 소스코드 파일의 관리를 위한 프로그램이고, Github는 git repository를 온라인 저장소에 올려서 협업을 할 수 있는 프로그램이다. Github 뿐만 아니라 git repository를 온라인 저장소로 올려서 협업할 수 있는 프로그램을 여러가지 있다.
  • Git repository : 폴더나 파일을 저장하는 저장소
  •  Repository
    • local repository : 개인 저장소, 컴퓨터 저장소
      • untracked area : git이 관리하지 않은 영역
      • tracked area : git이 관리하는 영역
        • unstaged area : 작업 공간
          • unmodified : 파일을 수정하지 않은 상태
          • modified : 파일을 수정한 상태
        • staging area
          • staged : commit 가능한 상태
    • remote repository : 온라인 서버 상의 저장소

  • add, commit, push - local repository에서 remote repository로 업로드하는 과정
    • add : commit 전에 unstaged 영역(작업공간)에서 staged 영역으로 파일을 옮기는 작업 
    • commit : 변경사항을 local repository에 올리는 작업
    • push : local repository에 기록한 commit 내용을 remote repository로 업로드하는 작업
  • fork, clone - 다른 사람의 remote repository를 local repository로 다운받는 과정
    • fork : 다른 사람의 온라인 저장소(remote repository)를 내 온라인 저장소(remote repository)로 가져오는 작업
    • clone : 온라인 저장소(remote repository)에 있는 내용은 내 컴퓨터 저장소(local repository)로 가져오는 작업
  • pull, merge - 다른 사람의 변경사항 취합하는 과정
    • pull : remote repository의 변경 사항을 local repository로 가져오는 작업
    • merge : remote repository에서 같은 부분을 수정한 경우, 두 작업한 내용을 합치는 작업

 

환경설정

  • 사용자 정보 : 사용자 이름과 이메일 주소 설정
    • 프로젝트마다 다른 사용자 이름과 이메일을 사용하려면 --global 옵션을 빼기
git config --global user.name "사용자_이름"
git config --global user.email "이메일"
  • 에디터 : commit 메시지를 기록할 때 나오는 텍스트 에디터 설정(nano 또는 vi)
git config --global core.editor nano
git config --global core.editor vi

 

추가 인증 방법 : SSH

  • SSH(Secure SHell) : 비대칭키를 이용한 shell
  • SSH 키 생성하기
ssh-keygen
  • 공개키 복사해서 github에 등록하기
    • github : Setting → SSH and GPG keys에서 Key 등록하기
cat ~/.ssh/id_rsa.pub

 

Git workflow

  • 개인 git workflow : fork → clone → add → commit → push → pull request → merge
  • 협업 git workflow : init → remote add origin → pull → 충동 해결

 

Git 명령어

  • fork : 다른 사람의 remote repository를 나의 remote repository로 옮기는 과정
    • 다른 사람의 remote repository에서 Fork 버튼 클릭 → 나의 remote repository와 프로젝트 이름 설정하기
  • git clone : remote repository의 내용을 복사해서 local repository로 옮기는 과정
git clone remote_reposiroy_https_주소
  • git init : 내가 만든 파일을 tracked area로 들어가게 해주는 명령어, git clone을 한 경우에는 자동으로 .git이 생성되므로 생략되는 과정
git init
  • git remote : remote repository와 연결하는 과정, clone을 한 경우에는 생략가능하지만 다른 사용자를 추가하려면 필요한 과정
// 나의 remote repository를 연결하기
git remote add origin github_repository_주소

// 다른 사람의 remote repository 연결
git remote add 다른사람이름_shortname github_repository_주소
  • git remote -v : 현재 local repository와 연결된 remote repository 목록 확인
git remote -v
  • git status : staging area(add로 commit할 파일)와 untracked files 목록 출력
git status

파일 수정 후 add 전
파일 수정 후 add 후

  • git restore : 복구
// add 전 파일의 변경사항 복원(수정한 파일의 내용은 삭제되고 이전 내용으로 돌아감)
git restore 파일명

// add 후 local repository의 변경사항 폐기(commit 전 staging area에 있는 변경사항 삭제로
// commit을 원할 시 다시 add를 해야함)
git retore --staged 파일명
  • git add : commit을 하기 위해서 파일을 staging area로 올리는 과정
// untracked file을 staging area에 추가
git add 파일명

// staging area에 있는 모든 파일을 한번에 추가
git add .
  • git commit : staging area에 있는 변경사항을 commit해서 local repository에 올리는 과정
git commit -a -m 'commit_message'
// -m 옵션 : commit 메시지 설정
// -a 옵션 : 삭제하거나 수정된 파일만 commit하는 옵션
  • git reset : commit한 후 아직 push하지 않은 경우, commit한 것 취소
// 가장 최근에 commit한 것 취소
git reset HEAD^
  • git push : commit 기록을 remote repository로 업로드하는 과정
// defualt 브랜치
git push origin branch명
EX) git push origin main

// 다른 branch로 push할 때
git push origin default_branch명:다른_branch명
  • git log : commit된 로그, 종료 q
git log
  • pull request & merge : pull request - github 사이트에서 변경 사항을 다른 사람에게 알리는 과정, merge - 다른 사람의 변경사항을 합치는 것
    • Compare & pull request 버튼 클릭 → create pull request → merge
  • git pull : remote repository의 변경사항의 작업 내용 받아오기(자동 merge가 일어남)
git pull 받아올_shorname branch

 

 공부 난이도

깃&깃허브 ☆☆★★★

깃과 깃허브의 차이점을 아는가?

commit과 push가 어떻게 동작되는지 아는가?

 

🎡 페어리뷰

 

🌕 느낀점

  오늘은 깃에 대해서 제대로 공부를 했다. 저장이 안되서 처음부터 다시 쓰고 있지만... 너무 슬프다... 예전에는 잠깐 해봐서 작동 원리도 모르고 그랬는데 공부하니까 내가 대충 알고 있던 것과 너무 달라서 익숙해지는데 하루종일 걸렸다. 그리고 제대로 못한 부분도 많고 해서 주말에 복습을 할 예정이다. 깃허브와 깃 차이를 제대로 인지못해서 헷갈려했는데 오후 줌시간에 멘토님이 말씀해주신 예시를 보고 바로 이해를 했다. 깃허브 말고도 많은 종류가 있다. 이 부분도 알아봐야겠다. 부트캠프하면서 한 번도 막힌다거나 이 정도로 이해가 안된 적이 없었는데 오늘 그래서 조금 힘들었다. 더 강해져야겠다.