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

DoyleHWorks·2024년 10월 18일
0

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

  • Push & Pull -- Git Remotes! (1~8) level remote<num>
    • Clone Intro
    • Remote Branches
    • Git Fetchin'
    • Git Pullin'
    • Faking Teamwork
    • Git Pushin'
    • Diverged History
    • Locked Main

git clone

  • git clone <repository URL>: 원격 저장소(Remote Repository)를 로컬로 복제한다.
    • 주로 처음 협업 프로젝트에 참여하거나, 새로 작업을 시작할 때 원격 저장소를 로컬로 복제하는 데 사용한다.
    • 원격 저장소의 모든 파일과 브랜치가 로컬로 다운로드되고, origin이라는 기본 원격(remote)이 자동으로 설정된다.

Remote Branches & Remote Repositories

Remote Branches (원격 브랜치)

  • Remote Branches: 원격 저장소에 존재하는 브랜치들.
    • 보통 origin/main, origin/feature-branch 같은 형태로 나타난다.
    • git clone으로 저장소를 복제하면 원격 브랜치들이 로컬에도 트래킹 브랜치로 설정되지만, 직접 변경하거나 커밋할 수 없다. (커밋해보면 HEAD만 움직임)
  • 원격 브랜치는 실제로는 로컬에 있다. 원격 브랜치라고 불리긴 하지만, 원격 저장소의 상태를 로컬에서 추적하는 브랜치이다.
    • 원격 저장소의 변경 사항을 반영할 때마다 로컬의 원격 브랜치가 업데이트된다.
    • 원격 브랜치는 읽기 전용이다. 직접 수정하거나 작업할 수 없고, 변경하려면 로컬 브랜치를 생성한 후 작업해야 한다.

Remote Repositories (원격 저장소)

  • Remote Repositories: 프로젝트의 중앙 저장소. 팀원들이 각자 로컬에서 작업한 후, 변경한 사항을 공유하고 병합하기 위해 사용한다.
    • git remote -v:현재 설정된 원격 저장소 목록을 확인할 수 있다.
    • origin이라는 이름이 기본적으로 설정된다. (git clone으로 복제된 원격 저장소)
    • git remote add <name> <url>로 새 원격 저장소를 추가할 수 있다.

git fetch & git pull

git fetch

  • git fetch: 원격 저장소에서 최신 변경 사항(커밋, 브랜치 등)을 가져오되 , 로컬 작업 브랜치에는 병합하지 않고 유지한다. (다운로드와 비슷한 개념)

git pull

  • git pull: 원격 저장소의 최신 커밋을 가져와서 로컬 브랜치에 병합한다. (git fetchgit merge의 조합)
    • git pull --rebase를 사용하면 fetchrebase 하게 된다.

git fetch는 충돌 가능성을 줄이기 위해 수동으로 병합 과정을 거치고 싶을 때 사용한다.
git pull은 신속하게 원격 변격 사항을 반영하고 싶을 때 사용한다.

git push

  • git push: 로컬에서 작업한 변경 사항을 원격 저장소로 업로드한다.
    • 로컬 브랜치의 커밋을 원격 저장소의 해당 브랜치에 업로드한다.
    • push할 때는 내가 작업한 브랜치가 원격 저장소에서 최신 상태에서 확인한 후, 최신 상태가 아니라면 git pull로 먼저 병합을 해야 충돌을 방지할 수 있다.
    • 다른 사람이 먼저 해당 브랜치에 push했다면 git push가 거부될 수 있다. (이 경우 최신 상태를 병합 후 push해야됨)
    • argument가 없는 기본 동작은 push.default 옵션의 설정값에 따라 달라진다. 해당 설정값은 Git 버전에 따라 기본값이 다르기에, 미리 체크해두면 좋다.
      • nothing: 아무것도 푸시하지 않음. 명시적으로 브랜치를 지정해야만 푸시가 이루어짐.
      • current: 현재 체크아웃된 로컬 브랜치를 동일한 이름의 원격 브랜치에 푸시함.
      • upstream: 현재 로컬 브랜치의 upstream 브랜치(로컬 브랜치와 연결된 원격 브랜치)에 푸시함. (주로 git pull에 설정된 원격 브랜치)
      • simple: upstream과 거의 비슷하지만, 로컬 브랜치 이름과 원격 브랜치 이름이 동일한 경우에만 푸시함. Git 2.0 이후 기본 설정임.
      • matching: 로컬에 있는 모든 브랜치를 원격 저장소의 동일한 이름의 브랜치와 일치시켜 모두 푸시함. Git 2.0 이전의 기본 설정임.
      • mirror: 모든 참조(ref)를 푸시함. 매우 위험할 수 있으며, 일반적인 상황에서는 사용하지 않는 옵션임.
profile
Reciprocity lies in knowing enough

0개의 댓글