깃허브에 올리기 — 창고에 택배를 부칩니다
Article
집에서 짐을 부친다고 해봅니다. 상자에 물건을 담아 테이프까지 붙여놨습니다. 그런데 이 상자는 방에 그대로 있습니다. 어디로 보낼지 주소를 안 적었기 때문입니다. 주소를 적고 기사에게 넘기는 순간 비로소 상자가 움직입니다.
지금 우리 상황이 딱 이렇습니다. 5강부터 13강까지 상자를 예닐곱 개 쌓았습니다. 커밋 말입니다. 그런데 전부 내 컴퓨터 안에 있습니다. 오늘 할 일은 두 가지입니다. 주소를 적고, 부칩니다.
3강에서 미뤄뒀던 이야기입니다
3강에서 깃과 깃허브는 다른 물건이라고 했습니다. 내 방 책상과 회사 창고라고 했습니다. 오늘 그 둘을 잇습니다.
내 컴퓨터의 저장소
5강에서 git init 으로 만든 것
- 커밋 예닐곱 개가 쌓여 있다
- 인터넷이 끊겨도 다 된다
- 컴퓨터가 고장 나면 같이 사라진다
- 남에게 보여줄 방법이 없다
깃허브의 저장소
오늘 만들 것 — 아직 비어 있다
- 인터넷 어디서든 열린다
- 내 컴퓨터가 고장 나도 남는다
- 주소만 주면 남이 볼 수 있다
- 내가 부치기 전까지는 아무것도 없다
이름이 둘 다 저장소라 헷갈립니다. 그래서 이 편에서는 깃허브 쪽을 원격 저장소라고 부릅니다. 멀리 있는 저장소라는 뜻입니다.
창고에 칸부터 만듭니다
부칠 곳이 있어야 부칩니다. 깃허브에서 빈 저장소를 하나 만듭니다.
- 01
깃허브에 로그인한 뒤 오른쪽 위
+를 누릅니다목록에서 New repository 를 고릅니다
- 02
Repository name에 이름을 적습니다여기서는
my-first-repo로 합니다. 띄어쓰기 대신 붙임표를 씁니다 - 03
Public을 고릅니다누구나 볼 수 있는 저장소입니다. 아직 비밀이랄 게 없고, 20강에서 웹페이지로 만들려면 필요합니다
- 04
아래 체크박스는 전부 그대로 둡니다
Add a README file을 켜지 않습니다. 이유는 바로 아래에 있습니다 - 05
Create repository를 누릅니다만들고 나면 안내 문구가 가득한 화면이 나옵니다. 거기 적힌 주소만 쓰면 됩니다
주소를 적습니다 — remote add
터미널로 돌아옵니다. 4강에서 배운 cd 로 저장소 폴더에 들어간 상태여야 합니다.
git remote add origin 주소 를 조각내면| 조각 | 뜻 |
|---|---|
git remote | 원격 저장소를 다루는 명령 |
add | 새로 하나 등록한다 |
origin | 그 주소에 붙일 별명. 관례로 첫 원격은 origin 이라 부른다 |
https://github.com/... | 방금 만든 저장소의 주소 |
주소를 매번 치기 귀찮으니 별명을 붙여두는 겁니다. 휴대폰에 번호를 저장해 두고 이름으로 거는 것과 같습니다. 등록했으면 제대로 들어갔는지 확인합니다.
- $ 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.md 를 README.md 로 바꿉니다. 깃허브가 저장소를 열 때 자동으로 펼쳐주는 이름이 README.md 라서입니다.
- 01
깃에게 이름을 바꾸겠다고 말합니다
탐색기에서 바꿔도 되지만, 이렇게 하면 깃이 바로 알아챕니다
git mv memo.md README.md - 02
git status로 확인합니다이름이 바뀐 파일 하나가 담긴 상태로 보입니다
- 03
커밋합니다
git mv는 담기(add)까지 해줘서 바로 커밋하면 됩니다git commit -m "메모 파일을 README 로 이름 변경"
부칩니다 — push
이제 한 줄이면 끝납니다.
- 작업 폴더파일을 고친다
- 커밋
add→commit으로 기록을 쌓는다 (6강) - 깃허브
push로 쌓인 커밋을 통째로 보낸다
- 01
명령을 칩니다
origin이라는 별명의 저장소로,master라는 가지를 보낸다는 뜻입니다git push -u origin master - 02
로그인 창이 하나 뜹니다
깃허브 계정으로 로그인하라는 창입니다. 브라우저가 열리면서 물어보기도 합니다
- 03
로그인하고 기다립니다
숫자가 올라가는 줄이 몇 개 지나가고 끝납니다
- 04
깃허브 저장소 화면을 새로고침합니다
파일 목록이 생기고, 그 아래에
README.md내용이 펼쳐져 있습니다
- $ 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 를 붙인 첫 push | git push -u origin master |
| 그다음부터 계속 | git push — 이게 전부다 |
master 라는 이름이 눈에 걸릴 수 있습니다. 5강에서 저장소를 만들 때 깃이 지어준 첫 가지 이름입니다. 깃허브는 새 저장소에 main 이라는 이름을 권하지만, 비어 있는 저장소에 master 를 처음 올리면 그 이름 그대로 만들어집니다. 이름이 다르다고 문제가 생기지는 않습니다. 가지 이야기는 21강에서 제대로 합니다.
부쳤는지 확인합니다
- $ 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 status에up to date with 'origin/master'가 뜨면 창고와 같은 상태입니다
다음 15강은 방금 그 로그인 창 이야기입니다. 깃허브 비밀번호를 정확히 쳤는데도 거부당하는 일이 실제로 벌어집니다. 몇 해 전부터 비밀번호로는 push 를 못 하게 막혔기 때문입니다. 대신 쓰는 게 토큰인데, 집 열쇠 대신 택배 보관함 임시 비밀번호를 받아 쓰는 것과 비슷합니다. 발급받아서 저장해 두는 것까지 한 강에 끝냅니다.