[iOS 사전캠프] Git: Git Remotes Part 2

DoyleHWorks·2024년 10월 20일
0

학습 사이트의 아래 레벨에 해당되는 내용이다.

  • To Origin And Beyond -- Advanced Git Remotes! (1~8) level remoteAdvanced<num>
    • Push Main!
    • Merging with remotes
    • Remote Tracking
    • Git push arguments
    • Git push arguments -- Expanded!
    • Fetch arguments
    • Source of nothing
    • Pull arguments

git이 pull/push를 처리하는 방식

  • pull operation: o/main에 커밋이 다운로드된 후 main 브랜치에 병합(merge)된다. 병합 대상은 이 연결에서 결정이 된다.
  • push operation: main 브랜치의 작업이 원격 main 브랜치 (로컬에서는 origin/main으로 보임)으로 push된다. push의 목적지는 mainorigin/main의 연결에 따라 결정된다.

clone이 정말 의미하는 것

  • clone operation: 원격 저장소에 모든 브랜치에 대해서 원격 브랜치를 만든다. 그런 후 원격 저장소에서 활성화되어있는 브랜치(보통 main)를 트래킹하는 로컬 브랜치를 만든다. clone이 끝난 후 로컬 브랜치 하나가 주어지지만, 궁금하다면 원격 저장소에 있는 온갖 브랜치를 탐색할 수도 있다.
  • 이 과정에서 git이 원격 브랜치의 이름을 origin/main과 같이 자동으로 설정하여 tracking property도 함께 부여하지만, 원한다면 어떤 브랜치를 어떤 이름으로 트래킹할지 직접 설정할 수도 있다.
    • e.g. local에 totallyNotMain이 remote의 main 트래킹하게 하기
    git checkout -b totallyNotMain origin/main
    // taollyNotMain이 origin/main을 참조로 사용
    • 이 상태로 totallyNotMainpush하거나 pull할 수 있다.
      • push: remote의 main이 업데이트됨
      • pull: local의 origin/main과 함께 업데이트됨
    git branch -u origin/main totallyNotMain
    // totallyNotMain이 origin/main을 트래킹하게 함
    // totallyNotMain이 check out 되어있으면 git branch -u origin/main도 가능

Push arguments

git push {remote} {place}

git push origin main
// 아래는 위 명령어에 대한 해석 
  • 내 저장소의 "main" 브랜치로 가서 모든 커밋을 가지고, "origin" 원격 저장소에 있는 "main" 브랜치로 가서 그 브랜치에 없는 커밋을 모두 둔 다음 알려줘
    • {place}main을 놓음으로써 git이 커밋을 어디서 어디로 가져갈지 알려준 것
    • 두 저장소 사이를 동기화하는 "장소" 또는 "위치"인 셈이다.
    • {place}에 참조할 위치를 알려줬으니, checkout되어있는 위치는 무시하게 된다.

{place} = {source}:{destination}

git push origin <source>:<destination>
// 옮기는 곳의 출처와 목적지도 마음대로 할 수 있다.
  • colon refspec ({source}:{destination})
    • git이 알아들을 수 있는 위치를 Refspec이라 한다. (main, HEAD~1 등)
  • {destination}에 원하는 브랜치 이름을 넣으면 자동으로 만들어준다.
    • e.g. git push origin main:newBranch

Fetch arguments

  • push arguments와 매우 유사하다. 같은 방식의 개념이지만 방향이 반대일 뿐이다.
  • {source}: 원격 저장소 안의 위치 / {destination}: 로컬 저장소 안의 위치
  • checkout된 브랜치에 커밋에는 fetch할 수 없지만, 그 밖의 경우라면 이 명령어를 통해 직접 로컬 브랜치에 fetch할 수 있다. (fetch는 기본적으로 병합 없이 다운로드만 한다)
  • 이 경우에도 역시 {destination}에 원하는 브랜치 이름을 넣으면 자동으로 만들어준다.
  • git fetch에 아무런 arguments가 없는 경우, 원격 저장소의 모든 커밋을 원격 브랜치에 다운로드한다.

{source} of 'nothing'

  • git은 {source} 파라미터를 두 가지 방법으로 요상하게 사용할 수 있다.
    • git push origin :side
      • 원격에 side 브랜치를 삭제한다.
    • git fetch origin :bugFix
      • 로컬에 bugFix 브랜치를 생성한다.

Pull arguments

  • git pull은 결국 git fetchgit merge가 합쳐진 것이기에, 위의 arguments들과 다를 게 없다.
    • e.g. git pull origin foo = git fetch origin foo; git merge origin/foo
    • e.g. git pull origin bar:bugFix = git fetch origin bar:bugFix;git merge bugFix
  • git pullmerge 부분에서 {destination} 부분만 참조하는 걸 알 수 있다.

사이트 클리어 🥳

커밋의 시각화가 Git Branching을 이해하는 데 상당히 도움되니 재방문하여 복습하는 것도 좋을 것 같다.
실제로 Git을 통해 작업할 때 시각화를 도와주는 툴이 여러 개 있다고 하는데, 고마운 팀원으로부터 GitKraken을 추천 받았다. 무료 버전과 유료 버전은 Public 저장소만 적용 가능한지, Public과 Priviate 저장소 둘 다 적용 가능한지의 차이라고 한다.

profile
Reciprocity lies in knowing enough

0개의 댓글