👨‍💻 TIL

TIL4 - 2023.09.23

zunwon 2023. 9. 25. 13:18

Github 특강 - 토스 진유림님

깃허브는 과거의 나와 협업도 가능

 

ch1. Git과 버전 관리

버전 관리란?

Git : 분산 버전 관리 시스템

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

 

git을 사용하는 두 가지 방법

CLI, GUI(vscode 플러그인)

 

GitHub에 코드를 올리는 과정

프로젝트 폴더에 '여기에서 깃을 쓸거다'라고 명령 - git init

즐겁게 코딩

변경한 파일 중 올리길 원하는 것만 선택 git add

선택한 파일들을 한 덩어리로 만들고 설명 적어주기 git commit -m ""

Github 사이트에서 프로젝트 저장소 만들기

내 컴퓨터 프로젝트 폴더에 Github 저장소 주소 알려주기 git remote add

내 컴퓨터에 만들었던 덩어리 Github에 올리기 git push

 

ch2. Git & GitHub 협업 시작하기 feat.CLI

 

git/git bash 설치

1. 내 컴퓨터에 git이 이미 설치 되어있는지 확인

터미널 git

2. 안내가 안되어 있으면 git 설치

 

코드 에디터 - vscode 설치

 

GitHub 가입

Git으로 버전 관리한 코드를 올릴 수 있는 클라우드 서버

 

폴더에서 git으로 버전관리를 하고 싶어

1. 원하는 폴더에서 Git 초기화를 하면 그때부터 가능

git init

2. git 초기화를 하면 .git이라는 숨겨진 폴더가 만들어진다. 이게 로컬 저장소

3. 로컬 저장소에 내가 만든 버전 정보, 원격 저장소 주소 등이 저장된다

4. 원격 저장소에서 내 컴퓨터로 코드를 받아오면 로컬 저장소가 자동으로 생긴다

5.한 폴더에 하나의 로컬 저장소만 유지해야 한다.

 

로컬 저장소 생성 실습

1. 'Boxiting-cat' 폴더 생성

2. git bash로 만든 폴더 들어가기

3. git init으로 로컬 저장소 생성

git 사용자 정보 등록

버전 생성 실습

1.VS CODE에서 README.md,index.html 파일 생성

2.원하는 파일만 선택하기
->git add README.md

3.메세지를 달아 커밋으로 만들기
->git commit -m "프로젝트 설명 파일 추가"

4.생성한 커밋 보기
->git log

커밋은 '의미 있는 변동사항'을 묶어서 만든다.

버튼 클릭 버그를 고치는데 5가지 파일을 수정했다면 그 5가지를 묶어서 하나의 커밋으로 만든다

동료 개발자(혹은 미래의 나)가 '버튼 클릭 버그'를 고치는데 어떤 파일을 수정했는지 손쉽게 파악 가능

커밋 메세지 적는게 귀찮아도 시간 조금이라도 들여주세요. 나중에 후회하지 않게 됩니다

 

원격 저장소 GitHub에서 만들고 올리기

1.  GitHub에 로그인해서 Boxiting 저장소 생성

2. main branch 설정 / 브랜치 = 저장소에 올리는데 어떤 방에 올릴거 인지

3. 내 컴퓨터 Boxiting-cat 폴더에 GitHub 저장소 주소 알려주기

4. 만든 커밋 푸시하기

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

클론(clone)을 하면 원격 저장소의 코드를 내 컴퓨터에 받아올 수 있다.
로컬 저장소(.git 폴더)도 자동으로 생긴다.

원격 저장소의 데이터 가져오기 -> 풀(pull)

원격 저장소의 업데이트된 데이터는 풀 명령어로 받아올 수 있다.

예를 들어 동료 협업자가 로컬 저장소에서 작업 한 내용을 원격 저장소에 push 하였을 때
원격 저장소에 push된 내용을 나의 로컬 저장소에서 pull 하여 받아올 수 있다.

원격 저장소의 데이터를 clone한 로컬 저장소에서도 원격 저장소에 푸시 권한이 있을 경우에는 push를 할 수 있다.

 

1.내 컴퓨터에 boxiting-oct 폴더를 만들고 GitHub의 Boxiting 저장소 받아오기
->git clone https://github.com/joonwonBaek/Boxiting-cat . (.을 붙여주는 이유 -> 현재 파일에서 바로 클론받기 위해

2.app.js 파일 생성 후 add->commit->push

3.GitHub에서 새 커밋 확인하기

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

1.내 컴퓨터의 boxiting-cat 폴더로 이동 후 app.js 없는거 확인

2.풀 명령어로 문어가 새로 올린 커밋 받아오기
-> git pull origin main

3.새로 생긴 app.js 확인

 

 

ch3 둘 이상의 원격 저장소로 협업하기

소스트리 설치 - GUI 환경 구축

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

커밋을 여러줄로 쌓는다 ?

같이 작업하려면 충돌을 피하기 위해서 여러줄로 커밋을 생성한다. (브랜치로 나누어서)

브랜치는 이미 있다.
-> git push main
기본적으로 만들어져 있는 master 브랜치에 커밋을 푸시해라 라는 뜻

브랜치 만들기
->git branch cat (cat 브랜치를 현재 시점에 만들어라)

만든 브랜치로 이동하기
->git switch cat(switch와 checkout의 차이는?)

cat 브랜치에 커밋을 추가하게 되면
master 브랜치는 아직 과거 커밋을,
cat 브랜치는 새 커밋을 가리킴

master로 이동하고 , oct브랜치 커밋을 만들고, 커밋
->master 브랜치의 최신 커밋(고양4)을 기점으로 oct브랜치 , cat 브랜치가 나뉘어짐

 

 

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

1.먼저 base가 될 main 브랜치로 이동

2. compare 브랜치인 oct를 나와 합치고 싶다고 명령
->git merge oct

3.합쳐진 결과는 문어A 커밋
->oct랑 main 브랜치 모두 문어A를 가리킨다.

충돌(conflict) 발생

case1. 빨리감기 된 머지

case2. 새로운 커밋 만들어지는 머지

case3. 만약 충돌이 발생한다면?

머지할 때 두 버전이 같은 곳을 수정했다면 이를 수동으로 고쳐줘야 한다.

충돌이 해결된 머지 생성

포크(fork)

저장소를 통째로 복사하는 것을 말한다

1.고양,문어의 boxiting 저장소를 통째로 너구리의 계정에 복제해와서
2.그 저장소에 자유롭게 커밋,푸시를 하고
3.내 저장소의 브랜치와 고양,문어 저장소의 브랜치를 머지해달라고 요청한다.

브랜치 vs 포크

pull request

ch4. Git 실무 사례

amend :  깜빡하고 수정 못 한 파일이 있어요, 방금 만든 커밋에 살짝 추가 할래요

stash : 변경사항을 잠시 킵해두고 싶어요, 아직 커밋은 안 만들래요

reset : 옛날 커밋으로 브랜치를 되돌리고 싶어요

revert : 이 커밋의 변경사항을 되돌리고 싶어요

cherry-pick : 저 커밋 하나만 떼서 지금 브랜치에 붙이고 싶어요

rebase : 묵은 커밋을 새 커밋처럼 조작하고 싶어요 => conflict가 안나는 상태로 내 커밋 만들기

 

급하게 정리하느라 다시 정리해서 수정해야겠다.....