학습 자료

깃허브에 올리기 — 창고에 택배를 부칩니다


Article

집에서 짐을 부친다고 해봅니다. 상자에 물건을 담아 테이프까지 붙여놨습니다. 그런데 이 상자는 방에 그대로 있습니다. 어디로 보낼지 주소를 안 적었기 때문입니다. 주소를 적고 기사에게 넘기는 순간 비로소 상자가 움직입니다.

지금 우리 상황이 딱 이렇습니다. 5강부터 13강까지 상자를 예닐곱 개 쌓았습니다. 커밋 말입니다. 그런데 전부 내 컴퓨터 안에 있습니다. 오늘 할 일은 두 가지입니다. 주소를 적고, 부칩니다.

3강에서 미뤄뒀던 이야기입니다

3강에서 깃과 깃허브는 다른 물건이라고 했습니다. 내 방 책상과 회사 창고라고 했습니다. 오늘 그 둘을 잇습니다.

지금 저장소가 두 개 있습니다

내 컴퓨터의 저장소

5강에서 git init 으로 만든 것

  • 커밋 예닐곱 개가 쌓여 있다
  • 인터넷이 끊겨도 다 된다
  • 컴퓨터가 고장 나면 같이 사라진다
  • 남에게 보여줄 방법이 없다

깃허브의 저장소

오늘 만들 것 — 아직 비어 있다

  • 인터넷 어디서든 열린다
  • 내 컴퓨터가 고장 나도 남는다
  • 주소만 주면 남이 볼 수 있다
  • 내가 부치기 전까지는 아무것도 없다
같은 이름이지만 다른 물건이다. 둘을 잇는 게 오늘의 전부다

이름이 둘 다 저장소라 헷갈립니다. 그래서 이 편에서는 깃허브 쪽을 원격 저장소라고 부릅니다. 멀리 있는 저장소라는 뜻입니다.

창고에 칸부터 만듭니다

부칠 곳이 있어야 부칩니다. 깃허브에서 빈 저장소를 하나 만듭니다.

깃허브에서 새 저장소 만들기
  1. 01

    깃허브에 로그인한 뒤 오른쪽 위 + 를 누릅니다

    목록에서 New repository 를 고릅니다

  2. 02

    Repository name 에 이름을 적습니다

    여기서는 my-first-repo 로 합니다. 띄어쓰기 대신 붙임표를 씁니다

  3. 03

    Public 을 고릅니다

    누구나 볼 수 있는 저장소입니다. 아직 비밀이랄 게 없고, 20강에서 웹페이지로 만들려면 필요합니다

  4. 04

    아래 체크박스는 전부 그대로 둡니다

    Add a README file 을 켜지 않습니다. 이유는 바로 아래에 있습니다

  5. 05

    Create repository 를 누릅니다

    만들고 나면 안내 문구가 가득한 화면이 나옵니다. 거기 적힌 주소만 쓰면 됩니다

저장소 이름은 나중에 바꿀 수 있다. 지금 완벽하게 정하려고 시간 쓰지 않는다

주소를 적습니다 — remote add

터미널로 돌아옵니다. 4강에서 배운 cd 로 저장소 폴더에 들어간 상태여야 합니다.

git remote add origin 주소 를 조각내면
조각
git remote원격 저장소를 다루는 명령
add새로 하나 등록한다
origin그 주소에 붙일 별명. 관례로 첫 원격은 origin 이라 부른다
https://github.com/...방금 만든 저장소의 주소
origin 은 문법이 아니라 별명이다. 다른 이름도 되지만 다들 origin 을 쓴다

주소를 매번 치기 귀찮으니 별명을 붙여두는 겁니다. 휴대폰에 번호를 저장해 두고 이름으로 거는 것과 같습니다. 등록했으면 제대로 들어갔는지 확인합니다.

Git Bash
  • $ git remote add origin https://github.com/내계정/my-first-repo.git
  • $ git remote -v
  • origin https://github.com/내계정/my-first-repo.git (fetch)
  • origin https://github.com/내계정/my-first-repo.git (push)

두 줄이 나오면 성공입니다. 가져올 때(fetch)와 보낼 때(push) 쓸 주소가 각각 표시된 것뿐이라 주소는 같습니다. 아무것도 안 나오면 등록이 안 된 것이고, 다른 주소가 나오면 이미 등록된 게 있는 겁니다.

부치기 전에 이름표를 답니다

13강에서 말한 대로 memo.mdREADME.md 로 바꿉니다. 깃허브가 저장소를 열 때 자동으로 펼쳐주는 이름이 README.md 라서입니다.

이름 바꾸고 커밋하기
  1. 01

    깃에게 이름을 바꾸겠다고 말합니다

    탐색기에서 바꿔도 되지만, 이렇게 하면 깃이 바로 알아챕니다

    git mv memo.md README.md
  2. 02

    git status 로 확인합니다

    이름이 바뀐 파일 하나가 담긴 상태로 보입니다

  3. 03

    커밋합니다

    git mv 는 담기(add)까지 해줘서 바로 커밋하면 됩니다

    git commit -m "메모 파일을 README 로 이름 변경"
이름만 바꿨는데 커밋을 하나 쓰는 게 아깝지 않다. 10강 기준대로 한 가지 일이니 한 커밋이다

부칩니다 — push

이제 한 줄이면 끝납니다.

지금까지 만든 길
  1. 작업 폴더파일을 고친다
  2. 커밋addcommit 으로 기록을 쌓는다 (6강)
  3. 깃허브push 로 쌓인 커밋을 통째로 보낸다
push 는 파일이 아니라 커밋을 보낸다. 안 한 커밋은 안 간다
첫 push
  1. 01

    명령을 칩니다

    origin 이라는 별명의 저장소로, master 라는 가지를 보낸다는 뜻입니다

    git push -u origin master
  2. 02

    로그인 창이 하나 뜹니다

    깃허브 계정으로 로그인하라는 창입니다. 브라우저가 열리면서 물어보기도 합니다

  3. 03

    로그인하고 기다립니다

    숫자가 올라가는 줄이 몇 개 지나가고 끝납니다

  4. 04

    깃허브 저장소 화면을 새로고침합니다

    파일 목록이 생기고, 그 아래에 README.md 내용이 펼쳐져 있습니다

Git Bash
  • $ git push -u origin master
  • Enumerating objects: 21, done.
  • Counting objects: 100% (21/21), done.
  • Writing objects: 100% (21/21), 2.14 KiB | 1.07 MiB/s, done.
  • To https://github.com/내계정/my-first-repo.git
  • * [new branch] master -> master
  • branch 'master' set up to track 'origin/master'.

숫자는 파일 개수에 따라 달라집니다. 볼 것은 마지막 두 줄입니다. [new branch] 는 깃허브에 없던 가지가 새로 생겼다는 뜻이고, set up to track 은 앞으로 이 둘을 짝으로 기억하겠다는 뜻입니다.

-u 가 하는 일
언제쳐야 하는 명령
-u 를 붙인 첫 pushgit push -u origin master
그다음부터 계속git push — 이게 전부다
짝을 한 번 기억시켜 두는 옵션이다. 안 붙여도 되지만 그러면 매번 뒤를 다 쳐야 한다

master 라는 이름이 눈에 걸릴 수 있습니다. 5강에서 저장소를 만들 때 깃이 지어준 첫 가지 이름입니다. 깃허브는 새 저장소에 main 이라는 이름을 권하지만, 비어 있는 저장소에 master 를 처음 올리면 그 이름 그대로 만들어집니다. 이름이 다르다고 문제가 생기지는 않습니다. 가지 이야기는 21강에서 제대로 합니다.

부쳤는지 확인합니다

Git Bash
  • $ git status
  • On branch master
  • Your branch is up to date with 'origin/master'.
  • nothing to commit, working tree clean

up to date with 'origin/master' — 내 컴퓨터와 깃허브가 같은 지점에 있다는 뜻입니다. 6강부터 봐온 git status 에 줄이 하나 늘었습니다. 이제부터 이 명령은 내 상태와 창고 상태를 같이 알려줍니다.

여기서 막히는 사람이 꽤 있습니다

push 가 한 번에 되면 다행입니다. 그런데 로그인 창에 아이디와 비밀번호를 넣었는데 안 받아주거나, 영어로 된 거부 메시지가 세 줄쯤 나오는 경우가 있습니다. 학원 공용 컴퓨터에서는 오히려 이쪽이 더 흔합니다.

그건 뭘 잘못해서가 아닙니다. 깃허브가 몇 해 전에 규칙을 바꿔서 그렇습니다. 다음 두 강이 통째로 그 이야기입니다. 지금 안 되더라도 여기서 멈추지 않습니다.

정리하면

  • 저장소는 이제 두 개입니다. 내 컴퓨터의 것과 깃허브의 원격 저장소입니다
  • 깃허브에서 저장소를 만들 때 Add a README file 을 켜지 않습니다. 켜면 첫 push 가 막힙니다
  • git remote add origin 주소 로 창고 주소를 적어둡니다. origin 은 문법이 아니라 별명입니다
  • 이 명령은 조용히 성공합니다. 반응이 없다고 다시 치면 이미 있다는 에러가 납니다
  • git remote -v 로 등록됐는지 확인합니다. 같은 주소가 두 줄 나오면 정상입니다
  • git mv memo.md README.md 로 이름을 바꿉니다. 깃허브가 자동으로 펼쳐주는 이름이 README 입니다
  • git push -u origin master 로 부칩니다. -u 덕분에 다음부터는 git push 치면 됩니다
  • push 는 파일이 아니라 커밋을 보냅니다. 커밋 안 한 것은 안 올라갑니다
  • 올린 뒤 git statusup to date with 'origin/master' 가 뜨면 창고와 같은 상태입니다

다음 15강은 방금 그 로그인 창 이야기입니다. 깃허브 비밀번호를 정확히 쳤는데도 거부당하는 일이 실제로 벌어집니다. 몇 해 전부터 비밀번호로는 push 를 못 하게 막혔기 때문입니다. 대신 쓰는 게 토큰인데, 집 열쇠 대신 택배 보관함 임시 비밀번호를 받아 쓰는 것과 비슷합니다. 발급받아서 저장해 두는 것까지 한 강에 끝냅니다.

깃허브에 올리기 — 창고에 택배를 부칩니다 — 디코드랩(DCODELAB)