[Git] upstream, origin 개념과 Git 객체에 대한 이해

Nine·2022년 2월 26일
0

Git

목록 보기
2/4

오늘의 목적

Git에 대한 이해 없이 맹목적으로 깃 명령어만 입력하는 제 자신을 봤어요.

그러다 conflict가 발생했는데 git에 대한 이해가 부족하다보니 구글링을 통해 해결하는 것에도 한계가 있더라구요. Git을 공부할 때가 되었구나!

  • 지금의 나는..
    - add, commit, push를 하긴 하지만 기계적으로 사용해요.
    - upstream, origin이 뭔지 남에게 설명할 정도가 되지 못해요.

upstream, origin 뭐야?

  • Git을 물 줄기라고 생각해봅시다. 그렇다면 말하기 쉽죠
  • upstream : (상대적) 상류
  • origin : 원천

  • 관계를 표현하기 위한 말이예요. 절대적인 개념이 아닙니다.
  • 어디를 기준으로 두느냐에 따라 상류, 하류가 달라져요.
  • 즉, 상대적인 개념인거죠!

upstream

  • 로컬에서 원격 저장소에 push하려고 할 때 이런 메세지 보신 적 있을 거예요.
git push -u origin main 
  • -u 는 --set-upstream의 약자예요.
  • 나의 상류, 부모, ... 등 상하 관계를 설정하는거죠!

add, commit, push?

이제는 Git의 객체에 대해 이해해야할 때 입니다. 더 이상 미룰 수 없다..

Git의 객체

  • blob : 파일

  • tree : blob을 묶어서 관리(디렉토리 구조와 유사)

  • commit : 저장 단위, tree+blob+메타정보

  • tag : 커밋에 대한 참조, 설명


직접 확인하기

git init

git init
  • .git안의 빈 깃 저장소를 초기화했습니다.

  • .git 디렉토리가 생성되네요?

.git 폴더 이게 깃의 로컬 저장소입니다.
우리가 작업하던 공간은 working directory이고
실제 로컬 저장소는 .git 이예요.

tree .git
  • 위 명령어로 .git의 내부 구조를 살펴봐요.

object라는 객체가 있네요?


git add

echo "hello world" > test.js // 파일 생성해보기
git add test.js
  • add를 하고 나서 살펴보니

  • 23이라는 객체가 생겼네요.
  • blob 객체가 생긴 거예요.

add 를 하면 Git이 해당 파일을 지켜보게 됩니다. 즉 관리하는 대상이 되는 거죠! 그러니 객체를 생성해요.


git commit

git commit -m "first commit"

  • 커밋을 하고보니 54,e6이라는 객체가 2개 생성되었어요.

  • tree객체와 commit 객체가 생성된 거예요.

  • commit은 작업 디렉토리 스냅샷입니다. 마치 게임에서 세이브 포인트라고 생각하면 되겠습니다!

  • 커밋 명령어를 통해 객체들의 상하관계가 생기게 된다고 생각하시면 되겠습니다.

add, commit 왜 분리했을까요?

만약 변경된 사항들만 저장했다고 생각해볼까요?

  • 😀저장용량 측면에서는 이득이겠죠.

  • 😣하지만 비교 알고리즘으로 전으로 돌아거는 등의 연산 비용이 굉장히 커질 것입니다.

그래서 Git은 속도적인 측면을 고려하여 통째로 파일을 저장해요.

  • 대신 tree 객체를 통해 관계를 참조하여 최적화를 한거죠😀

add, commit 또한 이런 원리에 의해서 분리된 것입니다.


profile
함께 웃어야 행복한 개발자 장호영입니다😃

0개의 댓글