[Session] Git & Github

Danbi Cho·2020년 4월 1일
0

Session

목록 보기
1/9

📌 What You Will Learn
✔️ git/ GitHub 이란? VCS(Version Control System)이란?
✔️ repository 생성 + 관련 명령어(git init, git add remote, git remote -v)
✔️ local repository / remote repository
✔️ git clone vs. git pull 개념 및 차이점
✔️ branch의 개념 + 관련 명령어(branch 생성, branch 이동, branch 제거)
✔️ git staging 설명 + 관련 명령어(add, commit, push)
✔️ conflict는 왜 발생하는가? 어떻게 해결하는가?

Git/ GitHub

Git

  • VCS (Version Control System) 버전 컨트롤 시스템 종류 중 하나

Github

  • Git을 인터넷에서 관리할 수 있는 중앙 시스템 (중앙 서버) 및 프로젝트 전반의 관리 기능을 제공하고 다른 사람들과 공유할 수 있는 웹 기반 솔루션 중 하나

VCS

  • 버전 관리는 여러 파일을 하나의 버전으로 묶어 관리 하는 것
  • 협업을 편리하게 하기 위한 도구, 사용자의 컴퓨터에서 사용하는 것 (로컬 환경)을 말한다.

📌 git과 github는 분리된 환경이고, 로컬 환경과 중앙서버라는 명확한 차이가 있다.

Repository

  • 여러 명의 개발자가 같이 개발을 할 때 기준이 되는 소스가 필요한데, 그 기준이 되는 저장소를 repository라고 한다. (인터넷에서 접근 되기 때문에 편리)

Repository Commands

  • clone
    Github에 있는 코드를 로컬 환경에 다운 받는 것
  • push
    다운 받아 작업한 내용을 중앙 서버에 업로드 하는 것
    내 로컬에 있는 수정 내용을 중앙 서버로 밀어 넣는다는 의미

  • pull
    다른 개발자가 내가 수정한 내용을 다운 받는 것

🤔 소스 코드를 다운 받는데 clone과 pull의 차이는?
clone은 처음 소스를 다운 받을 때만 사용한다. 이미 다운 받은 내용의 변동 사항을 다운 받을 때는 pull을 사용한다. 이 두 가지는 github가 아닌 사용자의 컴퓨터에서 일어나는 것

Local Repository / Remote Repository

  • Local Repository : commit들이 기록 되어 있는 곳 / git commit 명령어를 사용하면 Local Repository에 올릴 수 있다.
    하나의 commit이 하나의 버전의 구분점이 되고, 이전 버전에서 해당 버전으로의 변경 내역이 담겨 있다.
    내 로컬 환경에서 일어나는 작업

  • Remote Repository : 원격 서버에서 관리되는 저장소 / 이 곳에 올라온 commit은 다른 사람들도 참조할 수 있다. (공개된 repository일 경우)

Git Basic

Git을 사용하여 파일 버전 관리할 때 파일은 3가지 상태 중 하나의 상태에 있게 된다.

  • Committed
    Git 기본 상태 중 가장 마지막 상태 / Commit이 된 후 Push를 할 수 있다

  • Modified
    처음 수정이 일어나서 변화를 감지했을 때 / 아직 Commit 되지 않은 상태의 파일

  • Staged
    중간 save
    Modified file에서 한단계 나아가 곧 Commit될 것이라고 mark 해 놓은 상태
    곧 Commit 할 수 있다는 의미
    Commit 하기 전 중간 상태를 저장하고 잘못 수정 됐을 경우 다시 되돌릴 수 있도록 임시 저장하기 위함

Git을 사용한 버전 관리 flow

  1. 소스코드 전체를 다운 (git repository를 checkout)
  2. 소스코드 파일 수정 / 개발
  3. 수정한 파일 stage
  4. 소스파일 수정
  5. 수정 완료 되면 commit

Basic Git Commands

  • git init
    프로젝트를 git repository로 만들기 위한 명령어
    프로젝트(project)는 개발하고자 하는 소스코드들이 있는 디렉토리(파일)
    git init을 해서 git repo로 만들어야 git으로 버전 관리 가능

  • git add
    수정된 파일을 staged된 상태로 옮기기 위한 명령어
    수정을 한 뒤 중간 저장을 하기 위해 commit하기 전에 add를 먼저 해야 한다.
    add를 하지 않으면 commit을 할 수 없다.

  • git commit
    add된 사항들을 하나의 commit으로 만들어 commit 메시지를 부여하고 commit 하는 작업

  • git remote add origin 원격 서버 주소

  • origin이라는 이름으로 원격 저장소 주소를 등록한다.

  • 등록한 다음 부터 origin이라는 이름으로 접속할 수 있다.

  • git diff
    modified 상태에서만 결과물이 나옴 / 수정사항들을 보여 줌

  • git status
    현재 git repository에 있는 상태를 보여 줌

  • git log
    commit 내역을 보여 줌 / commit history라고도 함

  • git rm
    git에 등록된 파일 삭제

  • git mv
    git에 있는 파일을 이동할 때 / 주로 rename할 때 사용

  • git branch
    branch 생성, 삭제 관리

  • git checkout
    branch를 이동할 때

Branch & Merging

Branch

  • git은 commit 내역을 트리 형태로 관리
    기준이 되는 hisroty인 master / 기본적으로 이용하는 소스 가지
  • 소스를 수정하고 싶을 때 master에서 하지 않고 branch를 만들어 작업한다.
  • 이렇게 생성 하는 branch를 feature branch나 기능 branch라고 한다.
  • 기능별로 branch를 만들어 작업하고 끝나면 branch를 삭제하면 좋다.
    (기존에 있는 소스에 영향이 가지 않도록 하고 안전하게 관리하기 위함, 여러 사람이 동시에 master에 수정하면 변동사항에 많은 영향을 받기 때문)

Merging

  • 기존의 소스와 수정 사항 commit을 합치는 과정
  • master branch에 feature branch에 작업한 commit을 병합 하는 것
  • 병합 과정에서 충돌이 생길 수 있다.

충돌(conflict)

  • 에러가 아닌 소스를 수정하고 합치는 과정에서 생기는 것
  • 충돌이 일어났을 때 해당 부분을 git이나 github에서 제공하는 방법을 이용
    (충돌이 일어난 부분을 수정하고 다시 merge를 한다)

pullrequest

  • 권한을 가지고 있지 않는 프로젝트에서 개인 저장소에서 작업한 후, 이 작업을 원본 레포지토리에 반영해 달라고 요청하는 것

    rocal repository에서 작업 후 add -> commit -> push를 통해 내 레포지토리에 작업내용을 업로드한 다음
    Pull Request를 통해 내 작업내용을 원본 레포지토리에 반영해달라고 요청한다.

수정 순서

  • Master branch에서 feature branch를 만들고
  • feature branch에서 수정한 사항이 완료되면
  • 해당 commit을 다시 master branch에 merge
profile
룰루랄라! 개발자 되고 싶어요🙈

0개의 댓글