본문 바로가기
프로그래밍/Git & Github

2021년 7월 25일 - Github 사용법

by 철제백조 2021. 7. 25.

● 본 공부와 기록은 유튜버 '얄팍한 코딩사전' 님의 "가장 쉬운 Git 강좌 - (하) 혼자작업편"을 기본으로 하였다.

https://www.youtube.com/watch?v=GaKjTjwcKQo 

 

☆ Github란?

→ git들이 모이는 곳으로, 오픈소스 프로젝트 등을 통해 다른 개발자들과 코드를 공유할 수 있는 공간으로 수정이나 조언, 기여 등 다양한 목적으로 사용되는 git의 성지와도 같은 곳이다.

 


 

Github 사용법

 

 

 

git remote add 원격저장소이름 https://github.com/유저네임/레파지토리네임.git
= git remote add 원격저장소이름 저장소주소


git branch -M main

git push -u origin main

 

올바른 SourceTree 등록 상태 예시

가끔 복붙하는 과정에서 https://가 두번 중복되거나
뒷 부분에 https://가 붙어있는 경우가 있으니 주의할 것!

원격 삭제
git remote rm

https://토큰값@리포주소

https://ghp_RxEoXiXSfJFW4WEIHLBYxyhnClfGaW4O5LKp@github.com/StealSwan/Profitable_Web.git 

 

 원하는 위치에 프로젝트를 진행할 폴더를 만든다.

git init으로 Git의 관리 아래 둔다.

git config --global user.name "(내 이름)" git config --global user.email "(내 메일주소)"는 이 컴퓨터에서 한 번 입력했다면 또 입력할 필요는 없다.

마찬가지로 파일들을 만들어 메시지를 작성하고 Commit한다.

 


 

 GitHub 저장소 만들기

https://github.com/

 

GitHub: Where the world builds software

GitHub is where over 65 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

github.com

 깃허브 로그인 - 왼쪽 Repositories 클릭 후 생성한다.

이름과 설명을 적어준다.

Public or Private 중 하나를 선택한다. 선택 후에 얼마든지 수정할 수 있다. 

→ Create Repository를 클릭해 저장소를 생성한다.

 


 Github에 소스코드 올리기

앞서 Git을 통해 만든 프로젝트를 저장소에 올려보자.

 

Ⓐ CLI - VS Code로 하는 방법

git status 입력 후, 모두 commit 되어 있는지 확인한다.

※ 폴더는 소스코드 파일이 있는 그 상위 폴더로 설정해두는 것이 좋다.

빠진 게 있다면 전부 add 해서 commit한다.

전부 commit 되어 있다면 아래와 같은 메시지가 출력된다.

이 상태에서 git remote를 입력한다. 현 폴더에 원격 레파지토리를 확인하는 명령어이다.

아직 설정한 바가 없어 아무것도 출력되지 않는다.

Github에서 만든 레파지토리를 원격저장소로 추가해준다.

아래 페이지에 해당 부분 명령어를 참고할 것이다.

현존하는 레파지토리를 올린다고 번역될 수 있으며, 이 명령어는 이 Github 레파지토리를 이 폴더의 'origin'이라는 원격 저장소로 설정하겠다는 의미이다.

origin은 원하는 이름으로 바꾸어도 된다.

아래의 push 명령어는 폴더의 현 브랜치에 commit된 내용들을 origin이라는 레파지토리에 master라는 이름의 브랜치에 올리겠다는 뜻이다.

전부 복사한 후, CLI에 붙여넣자. 그러면 Github 아이디와 비밀번호를 물어보는 메시지 혹은 창이 팝업되는데 전부 입력해주도록 하자.

입력하면 약간의 시간이 소요되며, 아래와 같은 메시지가 나타난다.

이 컴퓨터(Local)의 마스터 브랜치가 origin이란 원격의 마스터를 추적한다는 메시지이다.

본래 깃허브 페이지를 찾아가 새로고침하면 로컬로부터 푸시한 파일들이 올라와있고, 각 파일들이 어떤 커밋에서 마지막으로 생성되었거나 변경되었는지가 나타나있다.

파일명을 클릭해서 파일 내용을 볼 수도 있고, 커밋 메시지를 클릭해서 해당 커밋에서 어떤 변화들이 있었는지 확인할 수도 있다.

CLI에 다시 git remote를 입력해보면, 이제 추가한 원격 레파지토리의 이름이 나온다.

 

Ⓑ SourceTree로 하는 방법

저장소 - 원격저장소 추가 - URL/경로란에 깃허브 레파지토리 주소 붙여넣기 - 사용자명에 깃허브 유저명 입력

확인 후 마무리하면, 원격(remote) 탭을 펼쳐서 원격 레파지토리의 이름을 볼 수 있다.

푸시를 누르고, 로컬의 마스터 브랜치를 원격 origin의 마스터 브랜치로 올리는 걸로 설정한 뒤, Push를 클릭하면 처음일 경우 password 입력을 요구하고, 푸시를 완료하는 걸 페이지에서 확인할 수 있다.

 dog 파일을 추가한 뒤, 커밋을 하고 git push origin master 입력

error: src refspec master does not match any error: failed to push some refs to 'https://github.com/repo~' 메시지 출력시

https://junheejang.tistory.com/221

 

깃허브에 push 하는 방법과 error : src refspec master does not match any 에러 해결 방법

로컬 저장소에 있는 프로젝트를 깃허브로 push 하는 경우에 다음과 같은 메세지가 뜨는 경우가 발생한다. error: src refspec master does not match any error: failed to push some refs to 'https://github.com..

junheejang.tistory.com

해당 에러는 깃허브에서 pull 없이 push할 경우 기존 내용을 삭제하거나 하는 문제가 생길 수 있기 때문에, 이런 문제를 피하고자 에러 메세지를 발생시키는 것.

 오류 발생시 아래의 코드를 순서대로 재입력한다.

git init

git add .

git commit -m "message"

git config user.name "Username"

git config user.email "Email address"

git remote add origin "github.com/your-repo.git"

git push -u origin master

git push origin master 입력

다시 푸시가 이루어지고, 깃허브에 Dog 파일이 추가된 걸 확인할 수 있다.

이런 식으로 내 컴퓨터에 있는 코드들을 클라우드에 올리듯 저장하고 관리할 수 있는 것이다.

 


 

다루지 않을 파일 설정

 프로젝트를 진행하다보면, git으로 관리하고 깃허브에 올릴 필요가 없거나, 오히려 그래서는 안되는 파일들이 있을 수 있다. 코드를 실행하면 패키지가 다운로드 받아진다거나, 코드대로 빌드되어 자동으로 생성되는 파일들은 어차피 코드만 있으면 그때 그때 실행될 수 있는데 굳이 git에 무리를 주거나 깃허브 용량을 차지할 필요가 없다. 또한 보안적으로 중요한 내용, DB 계정들이 담긴 내용은 오픈소스 프로젝트라도 대중들에게 공개되면 곤란할 것이다.

이럴 때 사용되는 것이, .gitignore 라는 파일이다. 

프로젝트 바로 안쪽 최상위 공간에 .gitignore 파일을 생성한다.

본 폴더에는 숨김 파일로 지정이 된다.

git의 관리에서 제외시킬 파일이나, 폴더, 기타 요소들을 적는 것이다.

새로 secret-animal이라는 파일을 만들고 내용을 name: hodol로 정의한 뒤, git status를 입력하면 .gitignore 파일과 secret-animal이 add할 목록으로 나타난다.

.gitignore에 secret-animal이란 이름을 추가, 저장하면 다시 git status 명령어를 실행했을 때, secret-animal은 없어진 것을 확인할 수 있다.

다시 add, commit 하여 push하자.

마찬가지로 secret-animal은 깃허브에서 보이지 않는다.

안드로이드나 스프링 등 처음부터 골격이 세팅된 프로그래밍 프로젝트들을 생성해보면 .gitignore 파일을 볼 수 있다.

 


 

⑤ Github의 소스 내려받기

Ⓐ CLI - VS Code로 하는 방법

레파지토리가 public이라면 누구나, private라면 나 혹은 이 레파지토리에 초대된 사람만 가능하다. 다른 사용자들을 초대하려면 레파지토리-Setting-Colloborators-유저 닉네임이나 이메일로 초대

연습에 앞서 '집에서 작업을 회사에서 이어서 작업한다'는 가정을 연습하기 위해 임의로 두 폴더를 만들어 연습하도록 하겠다.

프로젝트의 폴더가 들어갈 위치를 VS Code로 연 다음 터미널을 연다. 만든 두 폴더의 상위폴더로 연다.

레파지토리 페이지에서 Clone or download - 주소복사 - 터미널 git clone (복사한 주소)

지금 VS Code에서는 폴더 바깥에서 연것이기에 해당 폴더에서 작업을 하려면 cd .\폴더명\ 입력후 파일안으로 들어간다.

 

Ⓑ SourceTree로 하는 방법 (추천)

로컬 저장소 - Clone - 프로젝트 - 맨위 창에 복사한 URL 복사 - 탐색 - 프로젝트 폴더가 위치할 곳 지정

 


Github의 소스 내려받기

A 컴퓨터에서 작업해서 올리고 B 컴퓨터에서 내용을 받아보도록하자.

dog 파일을 수정한다. 그리고 add 후, commit을 한다.

이때, 팀이나 협업자와의 소통이 원할할 수 있도록 commit 메시지를 작성해주는 것을 잊지 않는다.

origin에 master에 push 후, 깃허브에 올라온 것을 확인한다.

그런데 저쪽에서 새로 올린 내용이 있는지 일일이 깃허브에 들어가서 확인하는 작업은 번거롭다. 반대쪽 컴퓨터의 CLI에서 get fetch를 입력한다.

그리고 git status를 입력하면, 이 브랜치가 원격 origin master에 비해 커밋 하나가 뒤쳐져 있음을 알 수 있다.

이 말은 즉슨 깃허브에서 다운받아야 할 사항이 있다는 얘기이다.

git pull (원격명) (브랜치명)을 입력한다. 여기서는 git pull origin master을 입력했다.
그러면 dog의 변경사항이 새로다운 받아졌고, SourceTree에서 볼 경우, 커밋 내역까지 동기화된 것을 알 수 있다.

이번엔 이쪽 컴퓨터에서 작업을 한 뒤, SourceTree로 주고 받아보자.

dog의 내용을 조금 수정한 뒤, SourceTree를 이용해 설명을 적어주도록 한다.

아래쪽 'origin/master(으)로 바뀐 내용 즉시 푸시'를 클릭한 뒤, 우측 하단에 커밋을 눌러준다. 그럴 경우, 바로 푸시가 진행된다.

새 작업내역이 깃허브에 추가된 것을 확인할 수 있다.

SourceTree - fetch - 모든 원격 저장소에서 가져오기 - 마스터 브랜치에 받아올 것이 있다는 알림 - Pull - 깃허브로부터 당겨오기  

역시 동기화된 것을 확인할 수 있다.

※ 저쪽에서 올린지 시간이 지나거나, 소스트리를 다시 열거나 했을 때도 이 표시가 나타나지만, 이렇게 Git을 사용해 원격으로 협업할 때는, 뭔가 작업하거나 푸시하기 전에 표시가 있든 없든 Pull을 먼저 눌러주는 게 좋다.

※ 팀원이 작업한 내역을 꾸준히 업데이트 받아야 괜한 작업을 하거나, Conflict를 방지할 수 있다.

※ 나아가 깃허브에 올라간 내역을 Pull로 다 업데이트 받기 전까지는 내쪽에서 Push를 할 수가 없다.

 


 

 브랜치도 원격으로 내려받기

Ⓐ CLI - VS Code로 하는 방법

이전 강좌에서 git branch (브랜치명) 으로 브랜치를 만들고, git checkout (브랜치명)으로 넘어가는 과정을 배웠다. 

이걸 한번에 하려면 git checkout -b (브랜치명)을 입력하면 된다.

이럴 경우, 바로 브랜치가 만들어지고 체크아웃까지 된 것을 확인할 수 있다.

이전 강의처럼 mouse는 없애고, dinosour을 추가해서 add, commit을 해준다. 

이제 로컬에서처럼 my idea란 브랜치를 깃허브에 만들어서 올려보도록 하자.

→ git push origin my-idea를 입력한다.

완료가 된 후, 깃허브 홈페이지를 새로고침한 뒤, 브랜치를 눌러보면 my-idea 브랜치가 새로 생겨났으며, 이를 선택해보면 local의 my-idea 상태가 그대로 반영된 것을 볼 수 있다.

이번엔 반대로 깃허브에 올라간 브랜치를 받아보도록 하자.

git branch는 로컬에서의 브랜치만 볼 수 있지만, git branch -a를 입력하면 로컬과 원격의 모든 브랜치를 전부 볼 수 있다.

입력해 볼 경우, 아직 원격에 master만 보이고 있다.

이는 아직 깃허브의 현상태를 파악하지 않았기 때문이다.

git fetch를 실행해서 깃허브의 소식을 알아보면 새 브랜치가 나왔다는 메시지가 뜨는 걸 볼 수 있다.

여기서 다시 git branch -a를 입력할 경우, remote에 my-idea 브랜치가 있는 걸 확인할 수 있다.

이걸 로컬로 가져와서, 그쪽으로 넘어가보도록 하자.

git checkout -b my-idea origin/my-idea를 입력한다.

로컬에 my-idea라는 이름의 브랜치를 만들어서, 원격의 my-idea라는 이름의 브랜치의 내용을 받아오고 그 평행우주로 건너간다는 뜻이다.

파일 상태가 로컬에도 반영되고, git branch 명령어를 통해 확인해보면 로컬에도 my-idea 브랜치가 생겨, 그곳으로 check out 된 걸 볼 수 있다.

 

Ⓑ SourceTree로 하는 방법 (추천)

my-another-idea 브랜치로 분기 후, cat 내용을 수정한다.

커밋 메시지를 작성하고 나면, 원격 origin에 my-another-idea를 만들어서 푸시까지 할지 물어본다.

체크하고 커밋을 누르면, 깃허브 홈페이지에 my-another-idea 브랜치가 생긴 걸 확인할 수 있다.

이번엔 반대로 SourceTree에서 깃허브의 브랜치를 다운받는 작업을 해보자.

SourceTree에서 Fetch 클릭 후 패치한 뒤, 원격 origin에 새로 my-another-idea가 나타난 걸 확인할 수 있다.

추가된 브랜치에 우클릭 후, 체크아웃을 선택한다.

로컬에 같은 이름으로 브랜치가 설정되고, 확인을 눌러주면 된다.

master로 이동해서 merge를 입력한다. my-idea에서 한 것, my-another idea에서 한 것. 그리고 그걸 master로 가져와 병합한 것. 이 세 커밋 내역이 숫자로 푸시버튼 옆에 나타난다.

Push를 눌러 마스터가 my-another-idea의 변경사항들까지 병합되었음을 깃허브에 올린다.

다른 컴퓨터로 이동할 경우, master에서 풀받을 커밋들이 있다고 나타난다. 

master로 이동해서 Pull을 받아주면 끝이다.

 


 

 Conflict 해결하기

Ⓐ CLI - VS Code로 하는 방법

Conflict는 브랜치 간에도 발생하지만, 같은 브랜치에서 같은 파일의 같은 부분을 원격의 두 컴퓨터가 같이 건드린 상황에서도 일어난다.

A에서 특정 파일을 수정해서 깃허브에 Push했는데, B에서 Pull받지 않은 상태에서 같은 파일을 수정해서 커밋한 상태. 

A가 새로 푸시를 했어서, 이걸 B에서 Pull받기 전까지 푸시가 안되는 상태이다.

이때, Pull을 하면 Conflict가 나는 것이다.

A라는 컴퓨터에서 dog 파일의 내용을 아래와 같이 수정하고 add, commit, push 했다고 가정하자.

그런데 마침 B에서도 dog 파일을 작업하는 중이었다.

커밋 후, 푸시를 하는데 B에서는 다음과 같은 에러가 발생한다.

Pull 할 것이 있기 때문에 Push가 안 되는 것이다.

원격에 누가 새 작업을 올렸나보다 싶어 Pull을 받는데, A에서도 dog 파일의 같은 부분을 수정했다는 것을 알게 된다.

git status를 입력하면 더 알기 쉽게 표시된다.

여기서 dog 파일의 내용을 보자. 

양쪽 작업이 겹치는 부분이 위 화면과 같이 처리가 되어 저장되어 있다. git에서 dog 파일을 수정한 것이다.

텍스트 내용자체는 위와 같이 바뀌었지만, VS Code에서 색으로 구분을 해주기에 분량이 많은 코드에서도 어디서 충돌이 일어났는지 일목요연하게 볼 수 있다.

Head 아쪽이 내가 작성한 부분, 그 아래 부분이 상대방이 작성한 부분이다.

둘 중 하나만 남기거나 합의를 봐서 적당히 파일을 수정하고, 저장하면 된다.

그리고 git addgit commit만 입력한다.

→ 이 메시지 그대로 저장하겠다는 의미의 :wq를 입력한다.

이걸로 상황이 정리가 되었고, push를 하면 마무리가 된다.

 

Ⓑ SourceTree로 하는 방법

위와 같이 고의로 문제를 발생시킨 뒤, 커밋 후 푸시를 하려하면 아래와 같은 에러가 발생한다.

Pull을 받아야겠구나 싶어 Pull을 누르니 Conflict가 났다는 메시지가 나타난다.

파일상태 창에서 확인해보면 경고 표시로 어떤 파일에 충돌이 났는지 표시가 나타난다. 

CLI에서 파일을 수정하고 저장한 뒤, SourceTree로 와서 커밋과 푸시를 눌러주면 상황이 종료된다.

 


 

⑨ 원격 브랜치 삭제

Ⓐ CLI - VS Code로 하는 방법

git branch -D (브랜치명)은 로컬 브랜치를 삭제하는 명령어이다.

git branch -D (원격명) (브랜치명)을 입력해주면 된다. 해당 예제에서는 git branch -D origin my-idea를 입력하였다.

 

Ⓑ SourceTree로 하는 방법 (추천)

SourceTree에서는 삭제하고 싶은 브랜치를 우클릭 후, 삭제해주면 된다.

댓글