동기화와 여러 저장소

페치, 풀, 푸시

풀

드롭다운에서 고르는 세 가지 모드가 있어요. 기본, fast-forward만, 그리고 리베이스예요. 로컬 변경은 풀 전후로 자동 스태시됐다가 복원되니까, 지저분한 트리 때문에 막히는 일은 없어요.

아무것도 추적하지 않는 브랜치

git pull 은 페치 다음에 머지를 하는 것이고, 그 머지는 어디에 합칠지 — 브랜치의 업스트림 — 를 알아야 해요. 로컬에서 만든 브랜치나 추적 없이 체크아웃한 브랜치에는 그것이 없습니다. 페치는 그래도 성공해서 갱신된 origin/* 레퍼런스가 길게 지나가고, 그다음 git 이 "There is no tracking information for the current branch" 로 멈춥니다. 아무것도 당겨오지 않았고 망가진 것도 없어요. 뒤쪽 절반에 대상이 없었을 뿐입니다.

Gitcito 는 이 오류를 읽고 수리를 버튼으로 제시하며, 원격에 이미 브랜치가 있는지에 따라 어느 쪽을 낼지 고릅니다.

원격에 있음 연결하고 풀 — 업스트림을 <원격>/<브랜치> 로 설정한 뒤 요청한 풀을 실행합니다. ⌘Z 로 되돌릴 수 있고, 되돌리면 추적이 다시 풀립니다.
아직 없음 브랜치 푸시 — 평범한 푸시이며, 가는 길에 업스트림도 설정합니다.

제시되는 원격은 origin 이 있으면 그것, 없으면 목록의 첫 번째입니다. 어느 경우인지는 네트워크가 아니라 원격 추적 레퍼런스에서 읽으므로, 답은 방금 실행된 페치를 반영해요.

푸시

강제 푸시는 언제나 --force-with-lease를 써요. 마지막으로 확인한 이후 원격이 움직였다면 거부하는 안전한 쪽이에요. 보호된 브랜치를 강제로 푸시할 때는 확인을 물어봐요(목록은 저장소 설정 톱니바퀴에 있어요).

강제 푸시 전에 보호된 브랜치가 요구하는 확인

원격이 없을 때

푸시, 풀, 페치에는 갈 곳이 필요해요. 원격이 하나도 없는 저장소 — 갓 만든 git init, origin을 지운 클론 — 에서는 그 버튼들이 아무 일도 안 하거나, 빈 페치를 성공으로 쳤습니다. 이제는 경고와 함께 원격 추가가 열려서 URL을 붙이거나 호스트에 저장소를 만들 수 있어요. 추가하면 시작한 동작이 이어집니다. 푸시는 현재 브랜치를 공개하고, 풀은 페치한 다음 풀하고, 페치는 페치만 해요.

백그라운드 자동 페치는 가져올 게 없으면 조용히 있어요. 시계에 맞춰 대화상자를 열지 않습니다.

원격이 하나가 아닐 때

푸시 버튼은 브랜치의 업스트림을 겨냥해요. 그 옆의 화살표는, 저장소에 원격이 둘 이상이면 이런 것들도 제안해요.

원격 하나에 푸시 원격 하나를 고르세요 — 포크, 미러, 배포 대상
N개 원격 전부에 푸시 원격마다 한 번씩, 순서대로
모든 태그를 푸시할 대상 git push <remote> --tags, 로컬 태그 전부를 한꺼번에

같은 두 동작이 사이드바의 각 원격 행에도 있어요. 이런 질문이 떠오를 때 대개 여러분이 있는 자리가 거기거든요.

하나가 거부당해도 나머지가 취소되지는 않아요. 포크와 그 업스트림에 푸시하는 경우가 딱, 한쪽은 거부하고 다른 쪽은 그래도 통과해야 하는 상황이에요. 그래서 원격 하나하나가 따로 보고해요. 성공한 것들은 토스트 하나에 이름이 모이고, 실패한 것은 각각 자기 토스트를 받아 git이 말한 이유를 함께 보여 줘요.

브랜치의 업스트림을 정하는 것은 목록의 첫 번째 원격뿐이에요. 브랜치의 업스트림은 하나뿐이고, 마지막으로 푸시한 원격이 여러분이 추적시키고 싶은 원격인 것도 아니니까요.

두 경로 모두 평범한 푸시와 똑같은 검사를 거쳐요. 보호된 브랜치 확인과 비밀 감시요. 두 원격에 발행하는 건 노출이 두 배가 되는 일이지, 주의를 절반으로 줄여도 되는 일이 아니에요.

체크아웃하지 않은 브랜치

git pull은 HEAD만 움직입니다. 대부분의 클라이언트가 브랜치를 따라잡히려면 먼저 체크아웃하라고 하는 이유가 그것입니다. Gitcito는 그러지 않습니다. 사이드바에서든 그래프의 배지에서든 로컬 브랜치를 우클릭하면 <브랜치> 풀과 <브랜치> 푸시가 나오고, 둘 다 체크아웃된 브랜치가 아니라 그 브랜치에 작용합니다.

<브랜치> 풀 체크아웃 없이 로컬 ref를 업스트림까지 패스트포워드합니다. 작업 트리는 건드리지 않습니다. ⌘Z로 되돌릴 수 있습니다 — 되돌리면 브랜치가 원래 자리로 돌아갑니다.
<브랜치> 푸시 그 브랜치의 평범한 푸시. 툴바 버튼과 같은 보호 브랜치 확인과 시크릿 가드가 적용됩니다.

아무것도 추적하지 않는 브랜치에서는 풀이 비활성화됩니다 — 가져올 곳이 없습니다. 지금 서 있는 브랜치에서는 둘 다 일반 풀로 넘어가며, 작업 트리도 갱신됩니다.

알아둘 한계: 업스트림과 갈라진 브랜치는 그 사실을 알리며 거부됩니다. 갈라짐을 화해시키는 것은 머지나 리베이스이고 둘 다 작업 트리가 필요하므로, 그 경우만은 여전히 체크아웃이 듭니다. 원격이 푸시를 거부하면 서 있지 않은 브랜치에도 강제 푸시는 제안되지만, "풀 후 재시도" 경로는 같은 이유로 제안되지 않습니다.

페치

가져오기 는 툴바에서 풀 옆에 자기 버튼을 갖고 있어요. 모든 원격에서 가져오고 정리하므로 origin/* 레퍼런스와 앞/뒤 카운트가 모두 최신이 되고 — 브랜치도 작업 트리도 건드리지 않습니다. 내 작업을 움직이지 않고 남들이 무엇을 했는지 보고 싶을 때 누르는 버튼이에요.

여러분이 정한 간격으로 도는 백그라운드 자동 페치(설정 → 일반)도 있어요. 가져오기 버튼에 마우스를 올리면 그 아래로 경과 시간이 스르르 나타나고 — 4분 전 — 십오 분이 넘었으면 호박색이 됩니다. 툴바 자리는 전혀 차지하지 않아요. 버튼으로 손을 뻗을 때만 떠오르는 물음에 답하는 것이니까요. FETCH_HEAD 에서 읽으므로 터미널에서 돌린 git fetch 도 여기서 돌린 것과 똑같이 셉니다.

재작성된 히스토리를 발견한 페치는 그 사실을 말해 줘요. 토스트가 브랜치 이름을 알려 주고, 그 행에 표시가 생겨서 누르면 예전에 가리키던 바로 그 커밋에서 그동안 바뀐 것이 열려요.

여러 저장소를 한꺼번에

  • 그룹 탭은 자기 하위 트리 전체를 전부 페치 / 전부 풀 할 수 있어요.
  • 미션 컨트롤은 작업 공간 전체에 걸쳐 그 일을 하고, 실제로 뒤처진 저장소만 골라 풀 수도 있어요.

원격

사이드바에서 원격을 개별로 추가하고, 수정하고, 제거하고, 페치할 수 있어요. 브랜치 행에는 원격별 존재 배지가 붙어 있어서, 어느 원격이 그 브랜치의 사본을 갖고 있는지 한눈에 볼 수 있어요.

원격이 없을 때의 페치, 풀, 푸시는 빈 성공 대신 같은 원격 추가 대화상자를 열어요. 페치, 풀, 푸시를 보세요.

함께 보기: 미션 컨트롤 · 호스팅과 풀 리퀘스트

GitHub에서 이 번역 개선하기