Git

  1. Git?
  2. Git의 Branch
  3. Git과 Github

 

Git?

분산 버전관리 시스템

  • 코드를 관리하는 데에 있어서 일을 분산
    • 공용 코드 공간을 만들고 각자가 코드를 가져가서 비동기적(순서 상관없이)으로 자신이 작업한 것을
      업로드 하는 구조

\(\Rightarrow\) 독립적으로 작업이 가능하고, 다른 사람이 작업한 것이 있으면 저장소가 갱신이 되고
자신의 코드에 반영해서 작업할 수 있다.

  • 코드의 버전 관리

 

 

 


Git 시작하기

Git 홈페이지에 접속해서 Git 설치

로컬 저장소 생성
다음 명령을 통해 현재 작업중인 디렉토리를 git 저장소로 지정할 수 있음
git init

 

 

 

 


Git 저장소에서 파일의 상태

LOCAL : 로컬 저장소
REMOTE : 원격 저장소 (Github)

  • Working Directory : 커밋에 반영되지 않은 파일들 (unstaged)
  • Staging Area : 커밋을 남길 파일들 (staged)
  • Repository : 커밋된 파일들 (committed)

 

 

 

 


Git 기본 명령어

 

git add

파일을 Staging Area 에 추가
Ex) git add example.py : example.py 를 생성(혹은 수정) 하고, 이를 commit에 반영하고자 추가

 

 

 

git status

Git 프로젝트 내의 파일 상태를 확인

 

 

 

git commit -m

커밋 메시지와 함께 커밋
Ex) git commit -m "add example.py" : "add example.py" 라는 커밋 메시지로 커밋
-m : message 를 남기는 옵션

 

 

 

git log

커밋 기록을 확인 (Author, commitor, Date)

git add example.py  # example.py 파일 추가

git commit -m "add example.py"  # example.py 파일 커밋

 

 

 


Git의 Branch

코드의 흐름을 분산

Branch \(\rightarrow\) 가지치기

개발을 진행하다보면 다음과 같은 일이 생긴다.

  • 새로운 기능을 추가
  • 오류와 같은 이슈가 발생하여 이슈에 대한 수정이 필요

\(\rightarrow\) 가지치기를 통해 코드를 따로 가져와서 코드를 추가하거나 수정한다.

 

 

 

생성하기

git branch <branch_name>
'branch_name'의 이름을 가진 Branch 새로 생성

처음 저장소를 만들면 master라는 branch가 생성되어 있음

git branch -v
존재하는 브랜치 확인

git branch develop  # develop 브랜치 생성 

 

 

 

전환하기

git checkout <branch_name>
현재 작업중인 branch를 'branch_name'으로 전환

git checkout develop  # develop 브랜치로 전환

# example.py 파일 내용 수정 ...

git add example.py

git commit -m "added example.py"  # develop 브랜치에서 커밋을 하게 됨

 

 

 

병합하기

git merge <branch_name>
현재 작업중인 branch를 원하는 'branch_name'에 병합

  1. Branch가 develop인 상태에서 git log를 실행하면 다음과 같은 화면이 뜬다.

+) HEAD는 현재 작업중인 Branch를 가리키는 포인터

 

 

  1. git checkout master, git log 실행

 

 

  1. git merge develop 실행

\(\Rightarrow\) fast-forward 방식으로 masterdevelop가 병합

 

 

  1. git log 실행

\(\Rightarrow\) masterdevelop은 같은 커밋을 가지게 되는 것을 확인

 

 

 

삭제하기

git branch -d <branch_name>
'branch_name` 삭제

  1. git branch -d develop 실행
  2. git log 실행

\(\Rightarrow\) develop 브랜치가 삭제된 것을 확인

 

 

 

 


Git과 GitHub

GitHub : 원격저장소

Github과 연결하기

git remote add <별칭> <원격저장소 주소>

  • <별칭> 에는 주로 'origin'을 사용
  • <원격저장소 주소>는 Github 홈페이지에서 생성한 원격저장소에서 얻을 수 있음

 

 

 

Github에 전달하기

git push <remote_repo_name> <branch_name>
로컬저장소에서 작업하던 정보들을 원격저장소에 전달

  • : 전달받을 원격저장소
  • : 전달할 Branch

로컬 저장소에서는 기본 Branch로 master를 사용하지만, Github에서는 main을 사용

git branch -M main  # 현재 브랜치 이름을 main으로 변경

git push origin main  # 원격저장소에 반영

 

 

 


Github로 과제 제출하기

  1. 과제가 있는 원격 저장소를 자신의 원격 저장소로 Fork한다.
  2. 자신의 로컬 저장소에서 브랜치를 만들어 작업을 진행하고 Push 한다.
  3. 자신의 원격 저장소에서 과제 저장소로 Pull Request 한다.

 

 

1. 원격저장소에서 로컬 저장소로 가져오기

  • : 원격 저장소 주소
  • : 해당 원격 저장소의 파일을 저장할 폴더 이름 (default는 해당 원격 저장소의 이름)
git clone https://github.com/leeyongjoo/programmers_kdt_II.git programmers

 

 

 

브랜치 만들기

git branch -v
git branch week3_김도영
git checkout week3_김도영

 

 

 

Pull Request

pr : Pull Request
Fork 해온 저장소에 수정한 내용을 반영하고 싶다고 요청을 보내는 것

  • base repository : pr을 날릴 대상 / base : 과제가 나왔던 브랜치
  • head repository : pr을 날리고 있는 주체 / compare : 과제를 시도하기 전 브랜치