AIVLE TIL ('23.02.01) - GIT

cjkangme·2023년 2월 1일
0

에이블스쿨

목록 보기
1/81
post-thumbnail
post-custom-banner

오늘 배운 내용

git의 기능

깃은 버전 관리 시스템으로, 각 버전이 만들어진 순간의 스냅샷을 갖고 있다.

이를 통해 버전 간 차이를 쉽게 비교할 수 있다.

github.com은 파일의 내용과 git(버전)을 보관한다.

SSH 인증

SSH란?

SSH는 Secure Shell의 줄임말로, 양 컴퓨터간 통신을 주고 받는 하나의 방법이다.

git의 경우, 내 컴퓨터(local)와 원격저장소(origin) 간 통신을 주고 받기 위해 사용한다.

SSH는 개인키와 공개키 2종류가 존재하며, 이를 통해 통신을 암호화하고, 신뢰할 수 없는 사용자의 접근을 차단한다.
공개키는 모두에게 공개되는 키이며, github가 가지는 키이다.
개인키는 내 컴퓨터에 저장되는 키이며 해킹당하면 큰일난다!

SSH 생성

모든 명령어는 Git bash에서 진행되어야 한다.

  1. 키 생성

bash에 명령어 ssh-keygen을 입력한다.
그러면 특정 디렉토리에 id_rsaid_rsa.pub가 생성될 것이다.
이름에서 알 수 있듯이 pub가 붙은 쪽이 공개키, 나머지는 개인키이다.

  1. github에 공개키 입력

공개키의 디렉토리를 찾아가서, 공개키의 내용을 복사한다.
이후 깃허브의 내 계정 설정에 들어가면 SSH and GPG keys라는 메뉴를 찾을 수 있다.
여기서 새 SSH keys를 등록하면 된다.

SSH 인증키를 가진 사람만 원격저장소에 내 파일을 업로드 할 수 있다.

SSH를 통한 Clone

※ Clone은 SSH 인증키가 없어도 누구나 가능하다.

클론하고 싶은 저장소에서 Code 버튼을 누르면 SSH 소스를 복사할 수 있다.

VS Code의 새 창을 열어 Clone Repository를 클릭한다.

클릭하면 상단의 입력창이 활성화되는데, 여기에 소스를 넣고 마지막으로 컴퓨터에 저장할 위치(디렉토리)를 지정하면 클론이 완료된다.

이름과 이메일 등록하기

git은 버전을 생성할 때, 버전을 생성하 사람의 이름과 이메일을 함께 저장한다.

때문에 최초 1회에 한해서 우리의 이름과 이메일을 등록해야한다.

git config --global user.email <이메일>
git config --global user.name <이름>

--global 옵션을 이용하면 모든 저장소에서 동일한 이메일과 이름을 설정할 수 있다.
만약 저장소 별로 서로 다른 정보를 사용하고 싶다면 이 옵션을 빼면 된다.

git graph

git graph는 VS Code의 익스텐션으로, git 버전 관리를 GUI를 통해 제공한다.

  • main : main 브랜치의 마지막 버전을 가리킨다.
  • main 옆 파란색 동그라미 : 내 컴퓨터의 HEAD 위치를 나타낸다.
    HEAD는 작업 디렉토리가 유래한 버전을 가리킨다.
  • origin : 원격 저장소의 HEAD와 main 위치를 각각 나타낸다.

Add, Commit, Push

Area 개념

  • working directory : 아직 .git에 등록되지 않은 파일로, 현재 작업중인 파일의 영역이다.

  • stage area : 일종의 장바구니와 같다.
    Commit할 준비가 된 파일들을 의미한다.

Add, Commit, Push

  • Add : working directory에 있는 파일을 stage area에 올리는 작업을 의미한다.

  • Commit : stage area에 있는 파일을 내 컴퓨터 저장소(.git)에 올리는 작업이다.

  • Push : 내 컴퓨터의 버전을 원격 저장소에 업로드하는 작업이다.

Checkout

Checkout은 HEAD를 옮기는 작업이다

git graph에서 원하는 버전, 브랜치를 더블클릭하거나, 우클릭->Checkout을 통해 사용할 수 있다.

무언가 버그가 발생했을 때 버그가 난 시점을 찾거나 할 때 사용할 수 있다.

이게 버전관리의 중요성인데, 대부분의 버그는 당장 발견되지 않고 나중에 문제가 되는 경우가 많다.

만약 버전관리가 안되어있다면 모든 코드를 전수조사해야한다.
하지만 버전관리를 통해 checkout을 이용하여 버그가 발생하지 않는 시점을 쉽게 찾을 수 있다.

Merge

서로 다른 브랜치나 서로 다른 버전을 합치는 과정이다.

이때 버전A, 버전B, 버전 A·B의 공통 부모 3개의 버전을 이용한다.

2-way merge

  • 자동 병합이 가능한 경우이다.
  • 버전 A·B의 공통 부모와 버전 A, 버전 B를 각각 비교하여, 버전 A, B중 한쪽만 변경됐을 경우 해당 변경사항을 가져온다.

3-way merge

  • 충돌이 발생해 자동 병합이 불가능한 경우이다.
  • 공통 부모의 같은 파일, 같은 라인을 버전 A, B에서 서로 다르게 수정했을 때 발생한다.
  • Merge Editor를 통해 가져올 버전을 직접 선택해야 한다.

예시


왼쪽부터 공통부모, 버전M, 버전E이다.

  • 1 : 아무곳에서도 변경되지 않았으므로 Merge없이 그대로 가져온다.
  • 2 : 버전E에서만 변경되었으므로 2-way merge로 버전E를 가져온다.
  • 3 : 버전M에서만 변경되었으므로 2-way merge로 버전M를 가져온다.
  • 4 : 양쪽이 서로 다르게 변경하였으므로 3-way merge로 직접 수정해야한다.

  • 3개의 버전 말고도 아예 다른 값을 넣어서 merge하는 것도 가능하다.

반성

일일 TIL이므로 최대한 간결하게 쓰려고 했는데 잘 안됐다.
시간도 많이 잡아먹었고 핵심 내용을 잘 쓴 것 같지도 않다.
별로 도움이 안되는 내용인듯...

내일 TIL은 좀더 컴팩트하고 핵심만 담을 수 있게 무작정 타자를 두들기기 전에 생각을 좀 하고 써야겠다.

post-custom-banner

0개의 댓글