요약📚
지난 시간에는 로컬 환경에서 Git을 사용하는 방법과 Github에 대해 간단하게 알아봤었습니다. 이번 시간에는 Github와 연결하고 로컬 환경에 있는 파일을 올리는 방법과 올려져 있는 파일을 내려받아 사용하는 방법에 대해 알아보겠습니다. 그리고 브랜치(branch)에 대한 개념과 만드는 방법에 대해 알아보고 마무리 하겠습니다.
📖Github 계정 생성
다들 가입은 많이들 해보셨을거라고 생각합니다. Github 사이트에 들어가서 계정을 만들어줍니다. 가입에 성공했다면 우선 리포지토리를 만들어야 합니다. 리포지토리 생성 화면을 보겠습니다.
📄리포지토리(Repository)
버전 관리 시스템에서 저장소 또는 리포지터리(repository)는 파일이나 디렉터리 구조의 집합을 위해 메타데이터를 저장하는 자료 구조
리포지토리의 정의를 보면 그래서 뭐지?라는 생각이 드실 수 있는데, 저희는 프로젝트 및 코드를 관리하기 위해서 Github를 사용합니다. 시간이 지나면 지날수록 관리해야할 프로젝트와 코드가 많아지게 되는데 하나의 공간만 사용한다면 찾기가 정말 어려워질 것입니다. 그렇기 때문에 프로젝트 별로 구분하기 위한 것이 리포지토리입니다. 쉽게 생각해 윈도우의 폴더라고 생각하시면 됩니다.
다시 돌아와서 보겠습니다.

생성 화면입니다. 여러 사항들을 입력하라고 나옵니다. 그 중 이름과 설명은 원하는 대로 적으시고, public으로 진행하도록 하겠습니다. readme 파일은 아직 안 만들고 나머지는 기본 세팅으로 시작합니다. 성공적으로 생성했습니다. 그렇다면 무엇을 해야할까요? 다음은 로컬에 있는 파일들을 올리는 작업을 할 것입니다.
잠깐! 로컬에서 Github에 접근하기 위해서 필요한 것이 있는데 바로 토큰입니다. Github에서 어렵지 않게 만들어서 사용할 수 있으니 만들고 넘어가겠습니다.
📄토큰(token)
보안 토큰(Security token)은 전자적으로 제한된 리소스에 액세스하는 데 사용되는 주변 장치이다. 토큰은 비밀번호
와 함께 또는 비밀번호 대신 사용된다.
저희는 personal access token(classic)을 만들어볼건데 자세한 설명은 Github 사이트에 있으니 참고 부탁드립니다. 토큰을 구분하기 위해 이름을 설정하고 토큰의 유지 기간은 자유롭게 설정하셔도 좋은데 무제한은 지양해주시기 바랍니다. 이름과 기간을 고르면 그 아래 scopes(토큰의 사용 범위)를 설정하라고 합니다.
사용할 scopes
- repo 전체
- workflow
- write:packages & delete:packages
- delete_repo
- project
scopes를 설정했다면 생성하면 영어와 숫자가 섞인 뭔가가 나옵니다. 저희는 복사해두고 연동할 때 사용하겠습니다.
🍯tip! 다음에 토큰을 사용하려고 들어갔는데 토큰이 없어졌다구요? 당황하지 마시고 토큰 이름을 누르고 regenerate token을 누르시면 다시 보여주니까 그걸로 이용하시면 됩니다.
이제 진짜로 Github와 연결하고 파일을 올리고 가져오는 것을 해보겠습니다.
📖Github에 올리기(push) & 가져오기(pull)
리포지토리를 들어가보시면 아무런 연결이 되어있지 않기 때문에 아래와 같은 화면이 보입니다.

뭐라 막 써있는데 잘 보시면 친절하게 어떻게 연결하고 파일을 올리는지 알려줍니다. 빨간줄을 잘 보시면 git으로 시작하는 익숙한 명령어가 보입니다. 하나씩 입력해보겠습니다.
잠깐! 그 전에 또 확인해야할 부분이 하나 있습니다. 아래 명령어를 한 번 입력해봅시다.

master라고 떴습니다. master로 사용하셔도 무방하지만 현재 Github는 main으로 사용하고 있기 때문에 앞으로의 작업에서 한단계라도 줄이기 위해서 초기 생성 브랜치의 이름을 main으로 통일하고 가도록하겠습니다. 이 작업을 위해서는 죄송하지만 .git 파일을 제거하고 다시 처음부터 진행해주셔야 합니다.

위 명령어를 입력하고 확인해보니 main으로 바꼈습니다. 자 이제 지난 시간에 했던 깃 초기화부터 첫 commit까지 하시고 다음 단계를 진행하면 되겠습니다.
🍯tip! 왜 이름이 master에서 main으로 사용하고 있는가? master와 slave하면 조금 눈치 채실까요? 노예제도가 없어진 지금 어느 정도 민감할 수 있는 단어이기 때문에 바꼈다고 합니다. 자세한 내용은 참고 블로그를 봐주세요.
먼저 연결되어 있는 리포지토리가 있는지 확인하고 연결하고 확인해보도록 하겠습니다.

잘 연결된 것을 확인할 수 있습니다. 그 다음 단계인 `git branch -M main`의 경우 기존 master로 나오는 브랜치의 이름을 main으로 바꾸는 명령어 입니다. 하지만 저희는 앞에서 미리 main으로 바꾸고 왔습니다. 안 하신 분들만 해당 명령어를 입력해 브랜치의 이름을 바꾸시면 됩니다.

`git push origin master`의 경우 실패한 예시입니다. 현재 Github의 리포지토리에는 master라는 브랜치가 없기 때문에 동작하지 않습니다. 그에 비해 `git push origin main`은 잘 동작하는 것으로 보입니다. 뭐라뭐라하면서 오류가 없이 진행되었습니다. 그렇다면 무엇이 변화가 생겼는지 확인하기 위해서 로그를 봤습니다. 찾으셨을 수도 있지만 기억이 안 나시는 분들을 위해 이전 사진도 가져왔습니다.

commit 어쩌구 (Head -> main) 부분에서 origin/main이 생긴것을 볼 수 있습니다. 또한 Github의 화면도 변했습니다.

성공적으로 올라간 것을 볼 수 있습니다. 앞으로 Github 리포지토리에 올리는 작업을 'push'라고 하겠습니다.
이제 파일이 올라갔으니 내려받는 작업을 해보겠습니다. 여기서는 하나의 가정을 해야합니다. 같은 컴퓨터가 아닌 다른 컴퓨터에서 내려받는 상황이다는 가정을 하겠습니다. 협업하는 상황을 가정하는 것입니다.
내려받기 위한 명령어는 여러 종류가 있지만 우선 `git clone` 명령어를 사용하겠습니다.

clone 명령어를 사용하기 위해서는 원격 저장소의 URL이 필요합니다. 위 사진을 보면 해당 주소가 원격 저장소의 URL입니다. 자 빈 폴더를 만들고 VSCode를 통해 작업을 진행하겠습니다.


clone 명령어를 수행하니까 비어있던 폴더에 새로운 폴더가 생성되었습니다. 성공적으로 Github 리포지토리에서 내려받았습니다. 내용도 같은가 확인을 하면 모두 같은 것을 확인할 수 있습니다. 이제 배웠던 git 명령어를 사용해 다른 변경을 commit하고 push할 수 있습니다. 파일을 추가하고 기존 파일을 변경하고..
잠깐! git 명령어가 동작하지 않습니다. 왜냐하면 현재 VSCode는 상위 폴더에 있기 때문입니다. 이를 바꾸는 방법은 두 가지입니다.
- 터미널에서 cd 명령어를 통해 위치를 변경한다.
- VSCode에서 clone 받은 폴더를 연다.
두 가지 모두 동작하는 방법이지만 직관성을 위해 두 번째 방법으로 진행하겠습니다. 다시 열면 다음과 같은 화면이 나옵니다.

이제 새로운 파일을 만들고 commit과 push까지 해보겠습니다.
🍯tip! GUI로 커밋을 하는 경우 커밋 메시지를 작성하는 창이 뜨는데 간단하게 메시지를 작성하는 방법도 있습니다. 커밋 버튼 위에 메시지를 작성하는 것 입니다.

이번에는 GUI를 사용해 push하는 방법을 알려드리겠습니다. commit을 한 후 나오는 동기화 버튼을 누르면 끝입니다.

이제 Github에 들어가서 변경이 되었나 확인해보겠습니다.

성공적으로 동작한 것을 알 수 있습니다. 그런데 여기서 문제가 있습니다. clone 명령어를 통해 받으면 폴더가 새로 만들어지는데 계속 기존 폴더를 지워야할까요? 아닙니다. `git pull` 명령어를 사용하면 기존 Git 폴더에서 리포지토리에 있는 변경사항을 가져올 수 있습니다. 기존 폴더로 돌아가 작업을 해보겠습니다.

명령어가 제대로 동작하면서 새로운 변경사항인 'newTest.txt' 파일이 생긴 것을 확인할 수 있습니다.
이제 Git을 이용해 버전을 관리하고 저장하며 Github를 이용해 장소에 구애받지 않고 버전을 관리할 수 있습니다.
📖브랜치(branch)
Git의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것
공식 사이트에 언급된 브랜치의 정의이지만 지금 학습은 어떻게 협업할 수 있는지에 대한 포커스를 맞춰가고 있기 때문에 좀 더 가벼운 느낌으로 정리해보겠습니다. 브랜치는 버전 관리의 커서이자 버전의 복사본이라고 할 수 있을 것 같습니다. 복사본이라는 표현을 먼저 살펴보겠습니다. 브랜치를 새로 만들게 되면 현재 버전을 복사해 따로 작업을 진행할 수 있습니다. 복사본은 원하는만큼 만들고 진행할 수 있는데, 이 때 원하는 복사본으로 이동하기 위해서 사용하는 것이 브랜치입니다. 저희가 글을 쓰다가 원하는 곳에 글을 쓰기 위해서는 커서를 이동시킵니다. 이와 같이 원하는 복사본으로 이동해 작업을 하기 위해서 사용하는 것이 브랜치라고 생각하면 됩니다.
📄그렇다면 왜 브랜치를 사용하는가? 한 곳에서 작업하면 되는 것이 아닌가?
맞습니다. 한 곳에서 모든 것을 관리할 수 있습니다. 상상해 보겠습니다. 작업을 할 때 1번 기능은 1번 브랜치에서 2번 기능은 2번 브랜치에서 진행한다면 어떨까요? 조금 더 직관적이고 이어서 작업하기에도 훨씬 편할 것입니다. 또한 협업을 하기 위해서 영희가 영희 브랜치에서 작업하고 철수가 철수 브랜치에서 작업한다면, 각자의 상황을 파악하기 편할 것입니다. 이 외에도 다양한 용도로 사용될 수 있습니다.
이제 실제로 브랜치를 만들고 해당 브랜치로 이동해보겠습니다.


`git branch`명령어를 통해 브랜치 목록을 확인할 수 있습니다. 목록에서 이름 앞 *를 통해 현재 위치한 브랜치를 확인할 수 있습니다. 만약 Git Bash를 이용한다면 ()안에 브랜치가 표시되는 것을 확인할 수 있습니다. `git branch nulzi`명령어로 nulzi라는 이름의 브랜치를 만들고 `git checkout nulzi`명령어를 통해 nulzi 브래치로 이동해보겠습니다. 이동한 뒤 다시 목록을 불러오면 *의 위치가 nulzi 브랜치로 변경된 것을 확인할 수 있습니다. 그리고 이동된 브랜치의 폴더를 살펴보면 이전의 main 브랜치의 내용과 동일한 것을 확인할 수 있습니다. 저희가 배운 모든 git 작업을 이동한 브랜치에서 할 수 있습니다.
📄오늘 사용한 Git 명령어
- git config --get init.defaultBranch : 초기 브랜치 이름 확인합니다.
- git config --global init.defaultBranch 변경이름 : 초기 브랜치 이름을 원하는 이름으로 변경합니다.
- git remote -v : 현재 어떤 원격저장소와 연결되어 있는지 확인합니다.
- git remote add 원격저장소별칭 원격저장소url : 로컬에 있는 Git 환경에 원격저장소(Github 리포지토리)와 연결합니다.
- git remote remove
- git branch -M 이름 : 브랜치의 이름을 바꿔줍니다.
- git push 원격저장소별칭 올리고싶은브랜치 : 로컬의 브랜치의 모든 사항을 Github의 리포지토리로 올립니다.
- git clone 원격저장소url : 원격저장소에 있는 모든 이력을 내려받습니다.
- git pull 원격저장소별칭 내려받을브랜치 : 원격저장소의 변경사항들을 로컬 Git 폴더로 가져옵니다.
- git branch : 브랜치 목록을 보여줍니다. *는 현재 브랜치를 의미합니다.
- git branch 이름 : 이름을 가진 브랜치를 새로 생성합니다.
- git checkout 브랜치이름 : 해당 브랜치로 이동합니다. 브랜치이름 대신 '-(하이픈)'을 사용한다면 이전 브랜치로 이동합니다.
다음 시간에 계속...
출처 & 참고
김송아 강사님의 강의
기본 브랜치명 변경, usingu, 2024.04.10
How to rename master to main in get, Peter Eldritch, 2024.04.10
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
| 프로그래머스 데브코스 2주차 회고 with. TS 웹 풀스택 (0) | 2024.04.15 |
|---|---|
| 프로그래머스 데브코스 5일차 & 1주차 회고 with. TS 웹 풀스택 (0) | 2024.04.12 |
| 프로그래머스 데브코스 4일차 with. TS 웹 풀스택 (0) | 2024.04.11 |
| 프로그래머스 데브코스 2일차 with. TS 웹 풀스택 (1) | 2024.04.09 |
| 프로그래머스 데브코스 1일차 with. TS 웹 풀스택 (1) | 2024.04.08 |