깃/깃허브

Thomas·2023년 5월 17일
0
post-thumbnail

출처: 내일배움캠프 강민철 튜터님 강의!
Inflearn: https://www.inflearn.com/course/모두의-깃-깃허브
Book: http://www.yes24.com/Product/Goods/110795446
Github: https://github.com/kangtegong/
Email: tegongkang@gmail.com
Youtube: https://www.youtube.com/@kangminchul/

Git

깃을 사용하는 이유

  • 변경 내역 확인이 쉽다
  • 작업을 쉽게 되돌릴수 있다
  • 협렵하기 쉽다

깃이 관리 하는 버전이란??

유의미한 변화가 결과물로 나온것

EX)
새로운 기능 추가
버그 수정 / 삭제

프로그램 개발이란
유의미한 변화를 쌓아 프로그램을 만들어나가는것

GitHub

깃은 로컬에서 사용하고 있지만 원격 저장소에 저장 할 수도 있다.
Gitlab도 있지만 가장 유명한 원격 저장소는 당연코 gitHub이다.

한마디로 원격 저장소 호스팅 서비스
-> 인터넷 상에서 깃으로 관리한 프로젝트를 관리해주는 서비스

git config

git config --global user.name "name" - > 영어로

git config --global user.name "uiseong sang"

git config --global user.email email-> 깃허브로 가입된 이메일로

git config --global user.email yixing93@naver.com

git config -l (config 목록보기)

git config --unset (config 삭제하기)

git config --unser user.name <이름>
git config --unser user.nemail <이메일>

.git이 있는 디렉토리에 있는 로컬 Git 저장소의 user.name 값을 변경

git config user.name "새로운 사용자 이름"
git config user.name "John Doe"

깃이 관리하는 세 개의 공간

  1. 작업 디렉터리 - working tree(눈으로 볼수 있는 공간)
    -> 버전 관리의 대상이 위치한즌 공간(.git이 있는 디렉터리)
  2. 스테이지 - index (깃이 관리하는 가상 공간)
    -> 다음 버전이 될 후보가 올라가는 공간 (작업 디렉토리에서 변경사항을 선별해서 스테이지로 넘겨준다)
  3. 저장소 (깃이 관리하는 가상 공간)
    -> 버전관리 만들어지고 관리되는 공간
    - 로컬 저장소
    - 원격 저장소

(작업 디렉터리 -> 스테이지)
버전으로 만들고 싶은 변경사항이 있으면 다음 스테이지에 올려준다


작업 디렉터리 -> 스테이지


유의미한 결과만 스테이지로 보내준다


스테이지 -> 저장소

우리는 개발하는 동안 이런 작업을 반복하는 것이다!

  1. 작업 디렉토리에서 변경사항을 만들고
  2. 버전으로 만들고 싶은 변경 사항을 스테이지에 추가해서
  3. 저장소에서 버전을 만든다3. 저장소에서 버전을 만든다

작업 디렉터리 -> 스테이지 (add)

스테이지 -> 저장소 (commit)

하나의 버전이 만들어지는 과정
1. 작업 디렉터리 내에서 변경 사항 생성
2. 스테이지로 git add <파일명>
3. 저장소로 git commit -m "커밋 메세지"

git 명령어 정리

git init

로컬 저장소를 만드는 명령어

.git 숨김폴더가 생기는걸 볼수 있다
안뜨시면 설정 들어가셔서 숨김폴더 보이도록 설정 해주시면 됩니다.

git rm

git rm => 원격 저장소와 로컬 저장소에 있는 파일을 삭제한다.
git rm --cached => 원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에 있는 파일은 삭제하지 않는다

git status

작업 디렉터리 상태를 확인 할 수 있다작업 디렉터리 상태를 확인 할 수 있다

git add, git commit

git add로 파일을 추가해고 git commit 치면
commit 메세지를 치는 창이 뜨는데
첫번째줄은 제목
세번째줄은 본문
넣어주면 된다.

git add . 모든 변경사항을 추가하고 싶을 때

git commit -m "< commit message >" 방법도 있는데
전자 방법(git commit -> 제목 + 본문)이 좀 더 디테일하게 작성해서 더 좋은 방법입니다!!

git log

명령어

git log

commit한 기록 보기

git log -oneline

commit log를 간단하게 한줄로 보는 방법

git log -p(patch)

각각의 커밋의 대한 변경사항을 볼수 있다

git diff

내가 최근에 만든 commit과 현재 작업디렉토리를 비교(어떤 작업을 했는가

단 git add 해주면 git diff에 조회 불가
->작업 디렉터리랑 저장소를 비교하기 떄문에

git diff --staged

스테이지이랑 저장소랑 비교하는법

git diff

순서가 중요 -> 바뀌면 뒤 바뀌는 상황이 나옴...
<이전 커밋> <최신 커밋> 이 순서로 해주면 된다
<#3><#4>
<#2><#3>


Branch

나뭇가지가 가지를 치듯이 버전이 여러갈래로 버전을 만들수 있다.

브랜치는 버전의 분기

브런치가 없을 떄 문제

합칠떄 문제 발생

쇼핑몰 코드
A: 장바구니 기능 추가
B: 주문목록 기능 추가

같은 코드를 다르게 수정한 부분 혼재 == 충돌
-> 충돌 부분 하나 하나 모두 수작업으로 수정 해줘야 함 그래서 충돌 부분 하나 하나 모두 수작업으로 수정 해줘야 함

다른 예시)

요구사항이 쌓을수록 브랜치로 해결을 하기 쉬워진다!

브랜치로 문제 해결하기

브랜치로 버전의 분기를 관리하는 방법

  1. 브랜치를 나눈다

  2. 각자의 브랜치에서 작업한다

  3. (필요하다면) 나눈 브랜치를 합친다

Branch 명령어

체크아웃 되어 있지 않는 상태에서 삭제를 할 수 있다

같은 부분을 다르게 수정한 부분
a.txt에서
10번째 줄에 A는 X B는 Y로 수정했을 경우

서로의 작업과 관련 없는 부분은 충돌없이 병합이 된다!!

하나의 요구사항이 생기면 하나 브랜치를 만들어서 작업한다
두개의 요구사항이면 두개의 브랜치!!


실습

  위에 사진을 직접 보여주기 위함이다  

master에선 foo의 foo_a.txt를 볼수 없다

Head는 포인터(가리키는 것)

master 2번 커밋으로 head 바꿀수 있는데 (권장하지 않음 -> 오류발생할수 있음)

bar 브랜치로 checkout 해주면 bar의 가장 최근 커밋으로 Head가 가르킨다.
체크아웃 -> 해당 브랜치 돌린다


합치면

병합에는 크게 두가지 방법
1. 새로운 커밋을 만들지 않는다 -> 빨리감기 병합
master는 foo가 커밋될동안 가만히 있었고(어떠한 커밋도 없었다) foo를 병합하면 마치 빨리감기하듯 그조 foo 브랜치에서 추가된 커밋을 반영하기만 하면 된다

마스터 브런치로 바꾸고
병합 해주면 Fast-forward(빨리감기)

  1. 새로운 커밋이 만들어지는 병합

실습

2번 방법 환경 만들기

git merge하면 commit하는 창이 뜬다!!


충동 해결하기

상황1:

최종적으로 어떤걸 최종 반영할지 본인이 직접 해결!!(코드를 보고!)

커밋 수정하기
git commit --amend

실습

vi a.txt > a
git add a.txt -
git commit -m "first commit"
git branch foo
git checkout foo
vi a.txt -> b
git add a.txt
git commit -m "ffoo commit"
git checkout master
vi a.txt -> c
git add a.txt
git commit -m "master commit"
git merge foo

master는 c foo는 b 로 되어 있어서 충돌이 일어난다.

충돌이 발생했을 떄 대처법

  1. 충돌을 해결한다(어떤 브랜치의 내용을 반영할지 직접 선별한다)
  2. 다시 커밋한다
profile
Backend Programmer

0개의 댓글