● 본 공부와 기록은 유튜버 '얄팍한 코딩사전' 님의 "가장 쉬운 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 저장소 만들기
→ 깃허브 로그인 - 왼쪽 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
→ 해당 에러는 깃허브에서 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 add 와 git 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에서는 삭제하고 싶은 브랜치를 우클릭 후, 삭제해주면 된다.
'프로그래밍 > Git & Github' 카테고리의 다른 글
2021년 8월 6일자 - Github Contribution 문제 (0) | 2021.08.06 |
---|---|
2021년 8월 4일 - Github push할 경우, "github remote rejected" 오류 대처 (0) | 2021.08.04 |
2021년 8월 1일 - Github 업로드 이후 "Editor does not contain a main type" 발생 원인과 대처방안 & 여전히 남은 궁금증 (0) | 2021.08.01 |
2021년 7월 24일 - Git 사용법 (2) (0) | 2021.07.25 |
2021년 7월 24일 - Git 사용법 (1) (0) | 2021.07.24 |
댓글