
코드공유 및 협업 서비스를 위한
git저장소 호스팅 서비스
GitHub는 분산 버전 관리 툴인 깃 저장소 호스팅을 지원하는 웹 서비스이다.
GitHub는 영리적인 서비스와 오픈소스를 위한 무상 서비스를 모두 제공하며 현재 가장 인기있는 git 저장소 호스팅 서비스이다.
즉 GitHub는 git으로 관리하는 모든 프로젝트들을 온라인 공간에 공유하여 프로젝트 구성원들이 함께 소프트웨어를 개발할 수 있게 도와주는 서비스이다.

GitHub계정을 만든 뒤사용하면 PUSH를 자주하게 될 텐데 2021년 8월 13일 이후 GitHub는 기존 ID/PW 인증을 금지했다.
이는 보안상의 문제로 변경됬으며 이후에는 Personal Access Token(이하 token) 방식의 인증을 사용하고 있다.
Personal access token을 만드는 방법은 다음과 같다.
- 우측 상단의 프로필 - Settings
- Developer Settings
- Personal access tokens - Generate new token
- repo 및 원하는 기능에 체크, 기간 설정 뒤 Generate token
- 토큰 안전한 곳에 보관
발급받은 토큰을 컴퓨터에 저장하는 방법은 다음과 같다.
- Windows 자격 증명 관리자
- Windows 자격 증명 선택
- git:https://github.com 자격 정보 생성
- 사용자명과 토큰 붙여넣기
git Repository는 git으로 관리하는 프로젝트 저장소이다.
Repository는 공개 범위에 따라 Public, Private로 구분할 수 있다.
Public : 모두에게 보일 수 있는 프로젝트
Private : 허용된 인원만 볼 수 있는 프로젝트

Repository를 생성한 뒤 다음과 같은 방법으로 협업할 팀원을 추가한다.
Repository의 Settings - Collaborators - Add peopleRepository를 생성한 뒤 다음과 같은 순서로 원격저장소를 추가한다.
git 저장소에 원격 저장소로의 연결 추가 (저장소 이름은 보통 origin을 사용하지만 다른 이름으로 수정 가능)git remote add origin (원격 저장소 주소)
main으로 변경 (필수작업은 아니지만 GitHub 권장작업)git branch -M main
git push -u origin main
git remote
GitHub의 Repository는 미해당)git remote remove (origin 등 원격 이름)
타인이 만든 원격 저장소의 프로젝트를 다운받는 방법은 크게 2가지가 있다.
Download ZIP : git 관리내역은 제외하고 파일만 다운
git clone : git 관리내역을 포함하여 다운git clone (원격 저장소 주소)
push,pull을 사용하여 로컬과 원격의 커밋을 연결
push는 로컬의 커밋을 원격으로 밀어올린다.
우선 Leopards.yaml파일에 Add Evie to Leopards라는 커밋을 추가해서 확인해보면 다음과 같다.

이후 로컬 저장소의 커밋을 원격 저장소의 커밋으로 push한다.
git push
이전에 git push -u origin main명령어로 대상 원격 브랜치가 지정되어 문제 없이 push가 가능하다.

pull는 원격의 커밋을 당겨온다.
우선 Leopards.yaml파일을 원격 저장소에서 Add Dongho to Leopards라는 커밋을 추가해서 확인해보면 다음과 같다.

이후 원격 저장소의 커밋을 로컬 저장소의 커밋으로 pull한다.
git pull

원격 저장소에서 가져올 pull, 원격 저장소에 전달할 push가 중첩되어 있다면 오류가 발생한다.
즉 push를 하기전 코드는 원격 저장소에 있는 코드와 동일해야 한다.
현재 원격 저장소에서 먼저 Edit Leopards coach커밋을 한 뒤 로컬 저장소에서 Edit Leopards manager커밋을 수행하려 한다.


하지만 로컬 저장소의 코드가 원격 저장소의 코드와 일치하지 않기 때문에 push를 하면 오류가 발생한다.

발생한 오류를 해결하는 방법은 2가지가 있다.
merge 방식 : 로컬, 원격 저장소의 어긋난 커밋을 한군데로 병합한뒤 pushgit pull --no-rebase

rebase 방식 : 로컬, 원격 저장소의 어긋난 커밋을 원격, 로컬의 우선순위로 병합한뒤 pushgit pull --rebase

from-local원격 브랜치 생성 후 명시 및 기본설정git push -u origin from-local
결과를 확인해보면 원격 저장소에 from-local브랜치가 생성된 것을 확인할 수 있다.

from-local브랜치의 커밋을 수행하면 는 기존의 main브랜치는 변화가 없다.
즉 from-local브랜치는 main브랜치와는 독립된 별도의 공간이다.


생성된 브랜치를 포함한 목록을 확인하는 방법은 다음과 같다.
git branch --all

원격에서 from-remote 브랜치를 생성한 뒤 로컬에서 확인해보면 생성된 브랜치는 보이지 않는다.


이 때 아래 명령어를 사용하면 원격의 변경사항을 확인할 수 있다.
git fetch

변경사항을 확인한 뒤 아래 명령어로 로컬에 같은 이름의 브랜치를 생성하여 연결한 뒤 switch한다.
git switch -t origin/from-remote

이후 사용하지 않는 원격의 브랜치는 다음 명령어로 삭제할 수 있다.
git push (원격 이름) --delete (원격의 브랜치명)


fetch : 원격 저장소의 최신 커밋을 로컬로 가져오기만 한다.
pull : 원격 저장소의 최신 커밋을 로컬로 가져온 뒤 merge 혹은 rebase한다.