본문 바로가기
Programming/Git

처음 배우는 Git & Github

by 안녕주 2021. 2. 22.

Ch01. 환경설정하기

01. 버전 관리가 뭔가요

-1) Git이란?

ko.wikipedia.org/wiki/%EA%B9%83_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

 

깃 (소프트웨어) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 깃저장소 생성, 파일 추가, 원격 동기화를 표시하는 명령 줄 세션원저자리누스 토르발스[1]개발자주니오 하마노(Junio Hamano), 리누스 토르발스 등[2]안정화 버전2.

ko.wikipedia.org

분산 버전관리 시스템이다.

 

-2) 버전관리란?

코딩할 때 마다 Ctrl + Z를 눌러 이전 상태로 되돌리는 것이 아니라 원하는 시점마다 깃발을 꽂고(버전을 만들고) 이들 간에 자유롭게 돌아다닐 수 있다.

내가 만든 버전 뿐 아니라 동료가 만든 버전으로 이동할 수 있고, 동료와 내 버전을 비교해서 최신본으로 코드를 업데이트를 할 수 있다.

 

-3) Git을 쓰려면?

저장할 공간만 있다면 어디서나 사용가능 

 사용법은 1. CLI  2. GUI 로 작동

 

-4) Github에 코드를 올리는 과정

  1. 내 컴퓨터 프로제그 폴더에 '여기에서 Git을 쓸거다!'라고 명령  git init
  2. 즐겁게 코딩
  3. 내가 변경한 파일 중 올리길 원하는 것만 선택  git add
  4. 선택한 파일들을 한 덩어리로 만들고 설명 적어주기  git commit -m "첫페이지 제작"
  5. Github 사이트에서 프로젝트 저장소 만들기(블로그 만드는 거랑 동일)
  6. 내 컴퓨터 프로젝트 폴더에 Github 저장소 주소 알려주기  git remote add
  7. 내 컴퓨터에 만들었던 덩어리 Github에 올리기  git push

 

 

02. 환경 설절하기 - Git 설치(CLI 환경 구축)

03. 환경 설정하기 - Github, VSCode


Ch02. 익히기 (feat. CLI)

01. Git 초기화와 로컬 저장소

  1. 원하는 폴더에 Git 초기화를 하면 그때부터 가.능 git init
  2. Git 초기화를 하면 .git이라는 숨겨진 폴더가 만들어진다. 이걸 로컬저장소라고 한다.
  3. 로컬 저장소에 내가 만든 버전 정보, 원격 저장소 주소 등이 저장된다.
  4. 원격 저장소에서 내 컴퓨터 코드를 받아오면 로컬 저장소가 자동으로 생긴다.
  5. 한 폴더에 하나의 로컬 저장소만 유지해야 한다.

- 로컬 저장소 생성 실습

  1. 내 컴퓨터에 Boxitng-cat 폴더 생성
  2. Git Bash로 만든 폴더에 들어가기 cd Desktop/webstudy/boxiting-cat
  3. git init으로 로컬 저장소 생성 git init --> ls -al(.git파일 확인)

 

02. 첫번째 버전 만들기

  1. 하나의 버전이 생성 commit
  2. 커밋으로 만들길 원하는 파일만 선택 add

- 버전 생성 실습

  1. VS Code에서 README.md, index.html 파일 생성
  2. 원하는 파일만 선택하기 git add README.md
  3. 메세지를 달아 커밋으로 만들기 git commit -m "프로젝트 설명 파일 추가"
  4. 생성한 커밋 보기 git log

- 커밋 이모저모

  1. 커밋은 '의미 있는 변동사항'을 묶어서 만든다.
  2. 버튼 클릭 버그를 고치는데 5가지 파일을 수정했다면 그 5가지를 묶어서 하나의 커밋을 만든다.
  3. 동료 개발자 혹은 미래의 내가 '버튼 클릭 버그'를 고치는데 어떤 파일을 수정했는지 손쉽게 파악 가능
  4. 커밋 메세지 적는게 귀찮아도 시간 조금이라도 들여주세요. 나중에 후회하지 않게 됩니다.

- 커밋은 기차처럼 쌓인다.

  1. 맨 처음 파일에서
  2. 라이브러리 연동하고
  3. 버그 고치고
  4. 테스트 짜고...

 

03. 만든 버전 GitHub에 올리기

- 로컬 저장소와 원격 저장소

내 컴퓨터의 로컬 저장소에서 버전관리가 완벽하게 되고 있다.

이제 GitHub에 올려서 다른 사람들과 함께 버전관리를 할테야!

 

- 원격 저장소 GitHub에서 만들고 커밋 푸시하기

  1.  GitHub에 로그인해서 Boxiting 저장소 생성
  2. 내 컴퓨터 boxiting-cat 폴더에 GitHub 저장소 주소 알려주기 git remote add origin http://github.com/아이디/이름.git
  3. 만든 커밋 푸시하기 git push origin master
  4. Github 사이트에서 올라간 커밋확인

 

04. 다른 사람이 만든 저장소 받아오기

- 원격 저장소를 내 컴퓨터에 받아오기 : 클론(clone)

  1. 원격 저장소에 커밋을 올렸다.
  2. 신입 개발자가 이 저장소를 본인 컴퓨터에 받아오고 싶어한다.
  3. clone을 하면 원격 저장소의 코드를 내 컴퓨터에 받아올 수 있다.
  4. 로컬저장소(.git 폴더)도 자동으로 생긴다.
  5. 그 와중에 고양이가 새로운 버전 '고양3'을 만들어 원격 저장소에 push하면
  6. 업데이트된 데이터는 pull을 통해 받아올 수 있다.

 

- 원격 저장소를 내 컴퓨터에 받아오기 실습

  1. 내 컴퓨터에 boxiting-oct 폴더를 만드고 Github의 Boxiting 저장소 받아오기 git clone http://github.com/아이디/이름.git .
  2. app.js 파일 생성 후  git add .  ->  git commit -m "수식어추가" -> git push origin master
  3. Github에서 새 커밋 확인하기

- 원격 저장소의 변경사항 내 컴퓨터로 받아오기

  1. 내 컴퓨터에 boxiting-cat 폴더로 이동 후 app.js 없는거 확인
  2. pull 며영어로 문어가 새로 올린 커밋 git pull origin master
  3. 새로 생긴 app.js 확인

Ch03. 다지기 (feat. GUI)

00. Ch3에서 배울 내용

  1. Git Gui인 소스트리로 로컬 저장소 추가하기
  2. add와 commit이 무엇인지 스테이지 개념과 함께 이해
  3. 브랜치(branch_로 평행세계 나누기
  4. 머지(merge)로 두 브랜치 합치기
  5. 두 브랜치가 충돌(conflict)났을 때 해결하기
  6. 예의바른 병합 요청(Pull request) 보내기
  7. 남의 저장소 통째로 복사하기: 포크(Fork)

01. 소스트리로 GUI Git 다지기

1. 소스트리 설치

2. 저장소 추가

 

02. 그림으로 배우는 Add와 Commit

- Git에서의 커밋이란?

1. 변경 사항의 모음(X), 하나의 최종 코드모음(O)

2. 다만 기존 커밋과 비교해서 변경된 파일이 아니면 '변경되지 않았다'고만 저장해서 용량이 무겁지 않다.

  1. (고양이 1 파일은 변경되지 않았으니까 3번째 버전에선 완전하게 저장 안하고 '변경되지 않았다'고만 기록)
  2. SVN은 바로 이전 커밋과의 변경사항만 저장
  3. 그래서 커밋당 용량은 더 가볍지만 한 버전을 보려면 맨 처음 커밋부터 계산해야한다. -> 속도 느림
  4. Git은 바로 이전 커밋만 보면 된다. -> 속도 빠름

- 요약

  1. Git으로 추적하는 파일의 4가지 상태 (추적안됨)(수정없음)(수정함)(스테이지됨)
  2. 작업공간에 있는 (수정함)(추적안됨) 파일을 스테이지로 올려 (스테이지됨)으로 변경한다.
  3. 커밋을 하면 (수정없음) 상태로 돌아가서 다시 파일을 수정할 수 있다.

 

03. GUI로 add,commit,push

1. boxiting-cat 파일 수정 후 add, commit, push 하기

2. boxiting-oct를 소스트리에 추가하고 pull 받아오기

 

04. 평행세계 나누기 - 브랜치(branch)

git push origin master 

이 명령어는 master 브랜치(기본으로 만들어져 있음)에 커밋을 푸시해라라는 뜻이다. (*HEAD: 내가 지금 작업하는 로컬 브랜치를 가리킴)

 

  1. 브랜치 만들기 git branch
  2. 만든 브랜치로 이동하기 git checkout cat
  3. cat 브랜치에 커밋을 추가하면? master 브랜치는 아직 과거 커밋을, cat브랜치는 새 커밋을 가리킴
  4. master로 이동하고, oct브랜치 만들고 커밋, master 브랜치의 최신 커밋을 기점으로 oct 브랜치, cat 브랜치가 나뉘어짐

- 브랜치 생성 실습

  1. [boxiting-cat 저장소] master에서 feat/main-page 브랜치 생성
  2. 커밋 추가
  3. [boxiting-oct 저장소] pull 받기
  4. master에서 feat/comment 브랜치 생성
  5. 커밋 추가 

 

05. 두 버전 합치기 - 머지(merge)

master 브랜치의 최신 커밋에(base) oct 브랜치의 최신 커밋(compare)을 합치려고 한다.

  1. 먼저 base가 될 master 브랜치로 이동
  2. compare 브랜치인 oct를 나와 합치고 싶다라고 명령 git merge oct 
  3. 합쳐진 결과는 문어A 커밋(문어A는 고양4 + a), oct랑 master 브랜치 모두 문어A를 가리킨다.

- 머지 실습

  1. [boxiting-cat 저장소] master 브랜치로 이동
  2. feat/main-page] 브랜치와 현재 브랜치(master)를 머지
  3. master 브랜치에 feat/main-page의 최신 커밋이 반영된걸 확인

 

06. 합치다가 충돌이 났어요

Case 1: 빨리감기된 머지 (충돌X)( master에 oct를 합침)  -  문어 + 모자 쓴 문어 = 모자 쓴 문어

Case 2-a : 새로운 커밋 만들어지는 머지 (merge commit)  -  꽃을 든 문어 + 모자 쓴 문어 = 꽃들고 모자 쓴 문어

Case 2-b : 만약에 충돌이 났다면?  base와 compare를 merge하면 변경된 두가지 사항을 보여줌 --> 판단 후 수정 

 

- 머지, 컴플릭트 해결 실습

  1. [boxiting-oct 저장소] feat/comment로 이동 후 '스파링 좋아요' 수정
  2. master에 feat/comment 수정본 머지( 머지 커밋 생성 확인)
  3. [boxiting-cat저장소] feat/main-page로 이동 후 ' 스파링 싫어요' 수정
  4. master에 feat/main-page 수정본 머지(컨플릭트)
  5. 컨플릭트 해결

 

07. 저장소 통째로 복제하기

- 포크(fork) : 저장소를 통쨰로 복제

  1. 고양&문어의 Boxiting 저장소를 통째로 너구리의 계정에 복제해와서
  2. 그 저장소(내꺼)에 자유롭게 커밋, 푸시를 하고
  3. 내 저장소의 브랜치와 고양&문어 저장소의 브랜치를 머지해달라고 요청
  의의 편리한점 불편한점
브랜치 하나의 원본저장소에서 분기를 나눈다 하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다. 다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다.
포크 여러 원격저장소를 만들어 분기를 나눈다. 원본저장소에 영향을 미치지 않으므로 마음껏 코드를 수정할 수 있다. 원본저장소의 이력을 보려면 따로 주소를 추가해줘야한다.

 

포크 실습

  1. Github에 새로운 계정만들기(너구리 포크 실습용)
  2. Boxiting 저장소 포크
  3. 포크한 저장소 클론
  4. 소스트리에서 새 계정 추가 및 디폴트 계정으로 설정 (도구 -> 옵션 -> 인증) (호스팅 서비스 : Github, 인증 : Basic,
  5. 좋아요 기능 만들고 커밋, 푸시
  6. Github에서 커밋 확인

 

08. 내 코드를 머지해주면 안되겠니

- 풀 리퀘스트 :이 커밋이랑 저 커밋을 합치는걸 허락 

  1. 머지하고 싶은 두 브랜치를 선택하고 (base, compare)
  2. 어떤 변경을 했는지 제목과 내용에 쓴다.
  3. 단일 저장소에서 보낼 수도 있고, 이렇게 포크한 저장소에서도 보낼 수 있다.

- 풀 리퀘스트로 머지 요청 보내기

  1. 코드를 함께 작성하는 팀원이 있다면, 최대한 직접 머지하는건 피하고 모든 머지를 풀 리퀘스트를 통해서 해라
  2. 동료가 내 풀 리퀘스트(PR)을 보고 코드를 리뷰할 수 있다.
  3. 동료의 PR에 수정이 필요하면 댓글을 달아 change request를 보낼 수 있다.
  4. 오픈소스에 PR을 보낼때는 '기여 안내문서(contribution guideline)'을 반드시 참고해야한다.

TIP: 브랜치 관리하기

  1. 보통 feat/기능이름 으로 한 사람이 개발하는 기능 브랜치를 만든다(혹은 fix/버그이름, hotfix/급한버그)
  2. 작업이 끝나면 dev (혹은 master) 브랜치로 PR을 보낸다.
  3. dev 브랜치에서 큼지막한 작업이 모두 머지되면 releade (혹은 latest) 브랜치로 머지시키고 이를 실서버에 배포한다.
  4. 직접 커밋은 feat(혹은 fix,hotfix)브랜치에만 한다
  5. dev나 master, release브랜치에는 직접 커밋하지 말고 머지만 한다.

풀 리퀘스트 실습

  1. 너구리가 포크한 저장소에서 고양이 & 문어 저장소로 풀리퀘스트 보내기
  2. 고양이 아이디로 로그인해서 풀 리퀘스트 수락 후 머지하기

09. 리뷰

Ch1,2에서 나온 궁금점

  1. 커밋 객체에는 무엇이 저장되나요? 변경사항이 아닌 하나의 최종 코드 모음
  2. 두 사람이 병렬로 커밋을 만들고 싶으면 어떡하나요? branch
  3. 두사람이 만든 버전을 합칠 수 있나요? merge
  4. 남이 만든 오픈소스에는 어떻게 기여할 수 있나요? fork, pull request

1. Git을 사용하는 방법은 CLI와 GUI

2. git init, git add, git commit, push

3. git branch, git merge

4. fork, pull request 

 

 


git 심화 기능 (rebase, cherry-pick, reset, revert, git-flow) 알아보기

  1. rebase : 묵은 커밋을 새 커밋처럼 조작하고 싶다면
  2. amend : 깜빡하고 수정 못한 파일이 있어, 방금 만든 커밋에 살짝 추가
  3. cherry-pick : 저 커밋 하나만 떼서 지금 브랜치에 붙이고 싶어요
  4. reset : 옛날 커밋으로 시간을 돌리고 싶어요
  5. reverse : 이 커밋의 변경사항을 되돌리고 싶어요
  6. stash : 변경사항을 잠시 킵해두고 싶어요. 아직 커밋을 안 만들래요

댓글