[Git] git 기초 (VSCODE)

조성운·2023년 3월 29일
0

Git

목록 보기
1/1
post-thumbnail

Git 연동하기

  • 로컬 저장소 → 원격 저장소 : git remote 진행
  • 원격 저장소 → 로컬 저장소 : git clone 진행(vscode에서 clone repository 후 url 넣어도 된다.)
  • 처음 commit 할 때는 git config —global 로 유저 이름과 메일을 입력해야 한다.

GUI, CLI 모두 사용 가능

  • GUI : vs code의 좌측 옵션 창과 위쪽 bar에 모두 구성되어 있다.
  • CLI : cmd + shift + p 단축키로 원하고자 하는 깃 명령어 검색하면 된다.

원격 저장소와 로컬 저장소

Git은 원격 저장소 (git hub 상의 repository)와 로컬 저장소(유저가 사용하는 컴퓨터) 간의 버전 컨트롤 기능을 제공한다. origin은 원격 저장소를 의미하며, main은 로컬 컴퓨터이다.

(Ref: github.com)

working directory에서 작업한 버전들은 git add를 통해서 staging area에 올린다. 이때 동일한 파일이 기존의 staging area에 존재한다면 덮어쓰게 된다. 이후 git commit을 통해 .git directory로 해당 버전들을 옮기게 된다.


git clone

  • vscode에서 clone respository로 clone 할 수 있다.

git commit

  • git graph extention으로 확인 가능
  • commit을 통해서 변경사항을 버전으로 저장하기 위해서는 local에서 git email, username을 설정해야 한다.
  • commit message 꼭 입력해야 한다.
git config --global user.name nebulajo
git config --global user.email nebulajo98@gmail.com
  • staging area에 위치한 파일들을 (commit msg, name, content, user_email, user_name, 날짜)를 통해 key 값인 commit_id 값을 생성한다.
    • 이후 바로 직전 commit_id(직전에 commit한 버전)가 새롭게 생성된 commit_id를 가리키게 되고
    • HEAD 또한 새롭게 생성된 commit_id를 가리킨다.

git push

  • origin : remote 저장소
  • 좌측 사진에서 원격 저장소(origin)은 right까지의 버전이 존재하고, 로컬 저장소(main)에서는 left4까지 추가로 수정을 하였다. 이때 git commit 후 push를 하게 되면 우측 사진과 같이 main과 origin이 한 줄에 위치한다. 이는 원격 저장소(origin)과 로컬 저장소(main)간의 파일들이 동일하다는 의미이다.


git pull

  • 원격 저장소에 있는 내용을 반영한다. 동기화

git chekout

  • HEAD가 특정 버전의 commit_id를 가리키도록 한다. → 버전 이동
  • master가 가리키는 commit_id로 HEAD의 pointer를 바꾸면 원래 버전으로 돌아간다.
    • 만약 원 상태의 버전으로 돌아가려고 할 때, HEAD가 master가 아니라 master가 가리키는 버전으로 가리키게 되면, 이는 또 다른 상황이다.
    • 해당 상황에서 계속해서 새로운 버전을 commit하게 되면, master는 고정된 채, HEAD만 새롭게 생성한 버전을 따라가게 된다.

git fetch, merge

  • sync : pull, push 한꺼번에 해준다.
  • working directory와 stageing area가 어떤 버전인지 알려준다.
  • 새롭게 생성한 버전을 따라간다.
  • 버전이 새로 생성되는 과정에서 부모 버전은 HEAD가 가리키고 있다. → 이후 부모 버전과 연결한 후 HEAD의 pointer를 새로 생성한 버전으로 옮기게 된다.

git checkout을 통해 이전 버전으로 돌아가려고 할 때 HEAD가 되돌아가려는 이전 버전을 가리키도록 하면 된다. HEAD의 정의 자체가 workding directory, staging are의 버전이기 때문에 HEAD의 point를 되돌아 가려는 버전을 가리키도록 설정하게 된다.

버전(Version)

  • 버전의 정의는 버전이 만들어진 시점의 staging area 스냅샷이다.
  • git add를 통해 staging area로 올려진 시점의 content라고 보면 된다.

동일 시점에 다른 로컬에서 수정하는 경우

git에서 push를 하기 위해서는 push하려는 로컬 저장소에 push 시점의 원격 저장소의 데이터와 동일해야 한다. 따라서 로컬에서 push하려고 할 때 이미 다른 로컬에서 push를 해서 원격 저장소의 데이터가 바껴버린 경우 pull(fetch + merge)을 통해 현재 원격 저장소의 데이터로 동기화 한 후 추가로 수정한 작업을 합쳐야 한다. 즉 원격 저장소를 받은 후 push하려는 시점에 원격 저장소의 정보가 바뀌어버린 경우 해당 정보를 다운받은 상태에서 추가 수정한 부분이 추가된다. 우선순위가 최근 원격 저장소의 정보인 셈이다.

  • left 컴퓨터에서 수정 후 push 하여 원격 저장소가 업데이트 되었는데, 이때 right 컴퓨터에서는 left가 수정하기 이전 파일에서 추가로 수정을 한 경우 right가 push하게 되면 overwritting 될 것 이다. → push를 한 right는 left가 push한 버전을 가지고 있지 않은 상태로 push를 하게 된 것이다. 만약 push가 된다면 left가 작업한 결과들을 없애고 overwritting 될 것 이다.
  • 다음과 같이 error 문구가 발생된다.

  • git pull 해야 한다.
    • right가 overwritting 되지 않는다.
  • left에서 수정된 정보가 pull된 후 right에서 작업한 정보가 추가된 새로운 버전이 생겨났다.

  • fetch로 먼저 진행하는 경우 다음과 같이 갈래가 나가고 이후 merge를 하면 갈래가 하나로 모이는 것을 확인할 수 있다.

로컬 저장소에서부터 작업하는 경우

  • 원격 저장소가 없어도 로컬에서 저장소를 만들 수 있다.

버전을 나누지 않고 복수 작업을 해버렸다. → 복수 작업으로 버전 분리

사용자가 파일을 수정하는 영역은 working directory이며, commit 하기 전, 버전을 만들게 되는데 이들을 stage area에 저장된다. 이후 commit을 하게 되면, repository로 올라가게 된다.

  • 1개의 작업단위(version) → stage area by git add → repository by git commit -n ‘message’

  • 이미 생성된 파일들을 한 번에 commit하지 않고, stage area에 버전을 나눠서 add 한다.

  • + 버튼을 클릭해 changes 폴더에 넣고(stage area로 가는 것!) commit message 입력 후 commit하면 된다.

git checkout

  • head는 현재 working directory가 어느 버전인지 알려준다.

  • checkout은 head를 다른 버전으로 이동할 수 있다. → 현재 working directory를 이전 버전으로 바꿀 수 있다.

  • master는 원래 버저을 의미한다. master로 돌아오려면 master(main)에서 checkout으로 와야한다. 빈 공간에서 checkout하면 안된다.

git remote

  • 로컬 저장소를 빈 원격 저장소에 push하는 것이다.

  • 원격 저장소의 이름은 origin으로 설정한다.

  • command line에서 log를 활용한다.→ git log —oneline
    • 로컬 저장소의 Working directory 즉 head는 master에 있고
    • 원격 저장소 origin 또한 master에 위치한다.


Reference

  • egoing gihub 강의
profile
일단 적을게요

0개의 댓글