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에 코드를 올리는 과정
- 내 컴퓨터 프로제그 폴더에 '여기에서 Git을 쓸거다!'라고 명령 git init
- 즐겁게 코딩
- 내가 변경한 파일 중 올리길 원하는 것만 선택 git add
- 선택한 파일들을 한 덩어리로 만들고 설명 적어주기 git commit -m "첫페이지 제작"
- Github 사이트에서 프로젝트 저장소 만들기(블로그 만드는 거랑 동일)
- 내 컴퓨터 프로젝트 폴더에 Github 저장소 주소 알려주기 git remote add
- 내 컴퓨터에 만들었던 덩어리 Github에 올리기 git push
02. 환경 설절하기 - Git 설치(CLI 환경 구축)
03. 환경 설정하기 - Github, VSCode
Ch02. 익히기 (feat. CLI)
01. Git 초기화와 로컬 저장소
- 원하는 폴더에 Git 초기화를 하면 그때부터 가.능 git init
- Git 초기화를 하면 .git이라는 숨겨진 폴더가 만들어진다. 이걸 로컬저장소라고 한다.
- 로컬 저장소에 내가 만든 버전 정보, 원격 저장소 주소 등이 저장된다.
- 원격 저장소에서 내 컴퓨터 코드를 받아오면 로컬 저장소가 자동으로 생긴다.
- 한 폴더에 하나의 로컬 저장소만 유지해야 한다.
- 로컬 저장소 생성 실습
- 내 컴퓨터에 Boxitng-cat 폴더 생성
- Git Bash로 만든 폴더에 들어가기 cd Desktop/webstudy/boxiting-cat
- git init으로 로컬 저장소 생성 git init --> ls -al(.git파일 확인)
02. 첫번째 버전 만들기
- 하나의 버전이 생성 commit
- 커밋으로 만들길 원하는 파일만 선택 add
- 버전 생성 실습
- VS Code에서 README.md, index.html 파일 생성
- 원하는 파일만 선택하기 git add README.md
- 메세지를 달아 커밋으로 만들기 git commit -m "프로젝트 설명 파일 추가"
- 생성한 커밋 보기 git log
- 커밋 이모저모
- 커밋은 '의미 있는 변동사항'을 묶어서 만든다.
- 버튼 클릭 버그를 고치는데 5가지 파일을 수정했다면 그 5가지를 묶어서 하나의 커밋을 만든다.
- 동료 개발자 혹은 미래의 내가 '버튼 클릭 버그'를 고치는데 어떤 파일을 수정했는지 손쉽게 파악 가능
- 커밋 메세지 적는게 귀찮아도 시간 조금이라도 들여주세요. 나중에 후회하지 않게 됩니다.
- 커밋은 기차처럼 쌓인다.
- 맨 처음 파일에서
- 라이브러리 연동하고
- 버그 고치고
- 테스트 짜고...
03. 만든 버전 GitHub에 올리기
- 로컬 저장소와 원격 저장소
내 컴퓨터의 로컬 저장소에서 버전관리가 완벽하게 되고 있다.
이제 GitHub에 올려서 다른 사람들과 함께 버전관리를 할테야!
- 원격 저장소 GitHub에서 만들고 커밋 푸시하기
- GitHub에 로그인해서 Boxiting 저장소 생성
- 내 컴퓨터 boxiting-cat 폴더에 GitHub 저장소 주소 알려주기 git remote add origin http://github.com/아이디/이름.git
- 만든 커밋 푸시하기 git push origin master
- Github 사이트에서 올라간 커밋확인
04. 다른 사람이 만든 저장소 받아오기
- 원격 저장소를 내 컴퓨터에 받아오기 : 클론(clone)
- 원격 저장소에 커밋을 올렸다.
- 신입 개발자가 이 저장소를 본인 컴퓨터에 받아오고 싶어한다.
- clone을 하면 원격 저장소의 코드를 내 컴퓨터에 받아올 수 있다.
- 로컬저장소(.git 폴더)도 자동으로 생긴다.
- 그 와중에 고양이가 새로운 버전 '고양3'을 만들어 원격 저장소에 push하면
- 업데이트된 데이터는 pull을 통해 받아올 수 있다.
- 원격 저장소를 내 컴퓨터에 받아오기 실습
- 내 컴퓨터에 boxiting-oct 폴더를 만드고 Github의 Boxiting 저장소 받아오기 git clone http://github.com/아이디/이름.git .
- app.js 파일 생성 후 git add . -> git commit -m "수식어추가" -> git push origin master
- Github에서 새 커밋 확인하기
- 원격 저장소의 변경사항 내 컴퓨터로 받아오기
- 내 컴퓨터에 boxiting-cat 폴더로 이동 후 app.js 없는거 확인
- pull 며영어로 문어가 새로 올린 커밋 git pull origin master
- 새로 생긴 app.js 확인
Ch03. 다지기 (feat. GUI)
00. Ch3에서 배울 내용
- Git Gui인 소스트리로 로컬 저장소 추가하기
- add와 commit이 무엇인지 스테이지 개념과 함께 이해
- 브랜치(branch_로 평행세계 나누기
- 머지(merge)로 두 브랜치 합치기
- 두 브랜치가 충돌(conflict)났을 때 해결하기
- 예의바른 병합 요청(Pull request) 보내기
- 남의 저장소 통째로 복사하기: 포크(Fork)
01. 소스트리로 GUI Git 다지기
1. 소스트리 설치
2. 저장소 추가
02. 그림으로 배우는 Add와 Commit
- Git에서의 커밋이란?
1. 변경 사항의 모음(X), 하나의 최종 코드모음(O)
2. 다만 기존 커밋과 비교해서 변경된 파일이 아니면 '변경되지 않았다'고만 저장해서 용량이 무겁지 않다.
- (고양이 1 파일은 변경되지 않았으니까 3번째 버전에선 완전하게 저장 안하고 '변경되지 않았다'고만 기록)
- SVN은 바로 이전 커밋과의 변경사항만 저장
- 그래서 커밋당 용량은 더 가볍지만 한 버전을 보려면 맨 처음 커밋부터 계산해야한다. -> 속도 느림
- Git은 바로 이전 커밋만 보면 된다. -> 속도 빠름
- 요약
- Git으로 추적하는 파일의 4가지 상태 (추적안됨)(수정없음)(수정함)(스테이지됨)
- 작업공간에 있는 (수정함)(추적안됨) 파일을 스테이지로 올려 (스테이지됨)으로 변경한다.
- 커밋을 하면 (수정없음) 상태로 돌아가서 다시 파일을 수정할 수 있다.
03. GUI로 add,commit,push
1. boxiting-cat 파일 수정 후 add, commit, push 하기
2. boxiting-oct를 소스트리에 추가하고 pull 받아오기
04. 평행세계 나누기 - 브랜치(branch)
git push origin master
이 명령어는 master 브랜치(기본으로 만들어져 있음)에 커밋을 푸시해라라는 뜻이다. (*HEAD: 내가 지금 작업하는 로컬 브랜치를 가리킴)
- 브랜치 만들기 git branch
- 만든 브랜치로 이동하기 git checkout cat
- cat 브랜치에 커밋을 추가하면? master 브랜치는 아직 과거 커밋을, cat브랜치는 새 커밋을 가리킴
- master로 이동하고, oct브랜치 만들고 커밋, master 브랜치의 최신 커밋을 기점으로 oct 브랜치, cat 브랜치가 나뉘어짐
- 브랜치 생성 실습
- [boxiting-cat 저장소] master에서 feat/main-page 브랜치 생성
- 커밋 추가
- [boxiting-oct 저장소] pull 받기
- master에서 feat/comment 브랜치 생성
- 커밋 추가
05. 두 버전 합치기 - 머지(merge)
master 브랜치의 최신 커밋에(base) oct 브랜치의 최신 커밋(compare)을 합치려고 한다.
- 먼저 base가 될 master 브랜치로 이동
- compare 브랜치인 oct를 나와 합치고 싶다라고 명령 git merge oct
- 합쳐진 결과는 문어A 커밋(문어A는 고양4 + a), oct랑 master 브랜치 모두 문어A를 가리킨다.
- 머지 실습
- [boxiting-cat 저장소] master 브랜치로 이동
- feat/main-page] 브랜치와 현재 브랜치(master)를 머지
- master 브랜치에 feat/main-page의 최신 커밋이 반영된걸 확인
06. 합치다가 충돌이 났어요
Case 1: 빨리감기된 머지 (충돌X)( master에 oct를 합침) - 문어 + 모자 쓴 문어 = 모자 쓴 문어
Case 2-a : 새로운 커밋 만들어지는 머지 (merge commit) - 꽃을 든 문어 + 모자 쓴 문어 = 꽃들고 모자 쓴 문어
Case 2-b : 만약에 충돌이 났다면? base와 compare를 merge하면 변경된 두가지 사항을 보여줌 --> 판단 후 수정
- 머지, 컴플릭트 해결 실습
- [boxiting-oct 저장소] feat/comment로 이동 후 '스파링 좋아요' 수정
- master에 feat/comment 수정본 머지( 머지 커밋 생성 확인)
- [boxiting-cat저장소] feat/main-page로 이동 후 ' 스파링 싫어요' 수정
- master에 feat/main-page 수정본 머지(컨플릭트)
- 컨플릭트 해결
07. 저장소 통째로 복제하기
- 포크(fork) : 저장소를 통쨰로 복제
- 고양&문어의 Boxiting 저장소를 통째로 너구리의 계정에 복제해와서
- 그 저장소(내꺼)에 자유롭게 커밋, 푸시를 하고
- 내 저장소의 브랜치와 고양&문어 저장소의 브랜치를 머지해달라고 요청
의의 | 편리한점 | 불편한점 | |
브랜치 | 하나의 원본저장소에서 분기를 나눈다 | 하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다. | 다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다. |
포크 | 여러 원격저장소를 만들어 분기를 나눈다. | 원본저장소에 영향을 미치지 않으므로 마음껏 코드를 수정할 수 있다. | 원본저장소의 이력을 보려면 따로 주소를 추가해줘야한다. |
- 포크 실습
- Github에 새로운 계정만들기(너구리 포크 실습용)
- Boxiting 저장소 포크
- 포크한 저장소 클론
- 소스트리에서 새 계정 추가 및 디폴트 계정으로 설정 (도구 -> 옵션 -> 인증) (호스팅 서비스 : Github, 인증 : Basic,
- 좋아요 기능 만들고 커밋, 푸시
- Github에서 커밋 확인
08. 내 코드를 머지해주면 안되겠니
- 풀 리퀘스트 :이 커밋이랑 저 커밋을 합치는걸 허락
- 머지하고 싶은 두 브랜치를 선택하고 (base, compare)
- 어떤 변경을 했는지 제목과 내용에 쓴다.
- 단일 저장소에서 보낼 수도 있고, 이렇게 포크한 저장소에서도 보낼 수 있다.
- 풀 리퀘스트로 머지 요청 보내기
- 코드를 함께 작성하는 팀원이 있다면, 최대한 직접 머지하는건 피하고 모든 머지를 풀 리퀘스트를 통해서 해라
- 동료가 내 풀 리퀘스트(PR)을 보고 코드를 리뷰할 수 있다.
- 동료의 PR에 수정이 필요하면 댓글을 달아 change request를 보낼 수 있다.
- 오픈소스에 PR을 보낼때는 '기여 안내문서(contribution guideline)'을 반드시 참고해야한다.
TIP: 브랜치 관리하기
- 보통 feat/기능이름 으로 한 사람이 개발하는 기능 브랜치를 만든다(혹은 fix/버그이름, hotfix/급한버그)
- 작업이 끝나면 dev (혹은 master) 브랜치로 PR을 보낸다.
- dev 브랜치에서 큼지막한 작업이 모두 머지되면 releade (혹은 latest) 브랜치로 머지시키고 이를 실서버에 배포한다.
- 직접 커밋은 feat(혹은 fix,hotfix)브랜치에만 한다
- dev나 master, release브랜치에는 직접 커밋하지 말고 머지만 한다.
- 풀 리퀘스트 실습
- 너구리가 포크한 저장소에서 고양이 & 문어 저장소로 풀리퀘스트 보내기
- 고양이 아이디로 로그인해서 풀 리퀘스트 수락 후 머지하기
09. 리뷰
Ch1,2에서 나온 궁금점
- 커밋 객체에는 무엇이 저장되나요? 변경사항이 아닌 하나의 최종 코드 모음
- 두 사람이 병렬로 커밋을 만들고 싶으면 어떡하나요? branch
- 두사람이 만든 버전을 합칠 수 있나요? merge
- 남이 만든 오픈소스에는 어떻게 기여할 수 있나요? 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) 알아보기
- rebase : 묵은 커밋을 새 커밋처럼 조작하고 싶다면
- amend : 깜빡하고 수정 못한 파일이 있어, 방금 만든 커밋에 살짝 추가
- cherry-pick : 저 커밋 하나만 떼서 지금 브랜치에 붙이고 싶어요
- reset : 옛날 커밋으로 시간을 돌리고 싶어요
- reverse : 이 커밋의 변경사항을 되돌리고 싶어요
- stash : 변경사항을 잠시 킵해두고 싶어요. 아직 커밋을 안 만들래요
'Programming > Git' 카테고리의 다른 글
깃 크라켄 사용하는법 (0) | 2022.07.13 |
---|---|
GitHub Issue, PR Template 적용하는법 (0) | 2022.07.13 |
[2월 우아한테크세미나] 우아한 스프링 부트 (0) | 2021.02.20 |
VS Code에서 Git과 GitHub 연동하기 (0) | 2021.02.01 |
[생활코딩] Git1 (0) | 2021.01.30 |
댓글