본문 바로가기
Github

4. GitHub 사용하기: push와 pull / 원격저장소와 로컬저장소

by 이쟝 2022. 3. 30.
본 포스팅은 얄팍한 코딩사전님의 제대로 파는 Git&GitHub의 유튜브영상을 학습하고 정리한 내용입니다.

 

1. GitHub의 중요성 

https://github.com/

Git으로 관리하는 프로젝트들을 온라인 공간에 공유해서 프로젝트 구성원들이 함께 소프트웨어를 만들어갈 수 있도록 도와주는 서비스(Git으로 관리되는 프로젝트의 원격 저장소)

GitHub 등의 온라인 Git 저장소는 모든 업로드와 다운로드를 커밋 단위로 주고받는다.

한 사용자가 작업을 마치고 커밋을 해서 버전을 만들고 업로드를 하면 GitHub 상의 프로젝트는 해당 버전으로 최신화가 된다.

다음 사용자가 완료한 작업을 커밋해서 올리기 위해서는 반드시 GitHub상의 최신 커밋을 먼저 다운로드하여 컴퓨터에 있는 프로젝트에 적용부터 하도록 강제가 된다.

커밋 상에 충돌사항이 있다면 컴퓨터에서 해결하고 나서야 작업한 커밋을 공유공간에 올릴 수 있다.

즉 모든 사용자가 먼저 공유된 최신 버전으로 프로젝트를 업데이트하고 나서야 GitHub에다 작업물을 업로드할 수 있다.

1. 가입하고 토큰 만들기

1. Sign Up으로 가입 후 로그인

2. Personal access token 만들기

우측 상단의 프로필 - Settings
왼쪽 메뉴 Developer Settings
Personal access tokens - Generate new token
New personal access token Note에 원하는 이름 생성, Expiration로 기한 설정
repo 및 원하는 기능에 체크 후
Generate token 토큰을 미리 복사해두고 안전한 곳에 보관해 둘 것

3. 토큰 컴퓨터에 저장하기

윈도우 가이드
Windows 자격 증명 관리자
Windows 자격 증명 선택
git:https://github.com 자격 정보 생성
사용자명과 토큰 붙여 넣기

 

4. 소스트리에도 계정 추가하기

상단 탭의 도구 > 인증 > Git 저장된 비밀번호
인증방식은 베이직, 프로토콜은 HTTPS로 설정
사용자명(GitHub 아이디)과 암호(토큰) 설정

5. GitHub에 새 Repository 생성

  • Public: 모두에게 보일 수 있는 프로젝트(오픈 소스 프로젝트)
  • Private: 허용된 인원만 볼 수 있는 프로젝트

6. 협업할 팀원 추가

레포지토리의 Settings - Access- Collaborators
Add people

 


2. 원격 저장소 사용하기

1. 로컬에 원격 저장소 추가 후 푸시

HTTPS 주소 복사!
로컬에 이미 git으로 관리되고 있는 프로젝트가 있기 때문에 두 번째 것을 복사해준다.

복사해서 프로젝트 bash에 붙여 넣어준다.

토큰을 성공적으로 입력했다면 밑에 명령어들이 표시되고, 깃허브를 새로고침 하면 레포지토리에 파일들이 등록된 것을 확인할 수 있다.

*GitHub 레포지토리 생성 후 복붙 명령어 설명*

git remote add origin (원격 저장소 주소)

 

로컬의 Git 저장소에 원격 저장소로의 연결 추가

원격 저장소 이름에 흔히 origin 사용. 다른 것으로 수정 가능
git branch -M main
GitHub 권장 - 기본 브랜치명을 main으로
git push -u origin main
로컬 저장소(로컬의 Git 저장소)의 커밋 내역들을 원격(Git Hub)으로 push(업로드)

u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결
이 명령어 후로 git push만 입력하면 main에서의 push는 자동으로 origin의 main브랜치로 가게 된다.

 

원격 목록 보기

git remote
현재 이 프로젝트와 연결된 원격의 목록을 볼 수 있다. 

 

원격 목록 보기(자세히 보기)

git remote -v

원격 지우기(로컬 프로젝트와의 연결만 없애는 것. GitHub의 레포지토리는 지워지지 않음)

git remote remove (origin 등 원격 이름)

2. GitHub(원격)에서 프로젝트 다운로드하기

  • Download ZIP: 파일들만 다운받음, Git 관리내역 제외 (협업할 때 xx)

*협업할 때 다운로드하는 방법*

1) 프로젝트를 다운로드하기 원하는 폴더를 생성하고 이동하고 오른쪽 마우스 클릭 > Git Bash Here 

 

폴더와 연결된 Git Bash가 열린다.

2) 원격 저장소 레포지토리에서 HTTPS 프로토콜 사용한 것을 복사

3) 1번에서 열었던 Git Bash 안에 git clone + 주소 복사한 것을 입력

git clone (원격 저장소 주소)

깃헙 레포지토리에 있는 모든 것들(깃의 관리 내역까지)이 나의 컴퓨터로 복사된다.


3. push와 pull 

1. 로컬에서 한 작업(커밋)을 원격에 push 하기 (업로드)

Leopards의 members에 Evie 추가
커밋 메시지: Add Evie to Leopards

 

현재 원격(깃 헙)의 origin/main 브랜치는 뒤쳐져 있다. 로컬의 변화(Add Evie to Leopards)를 원격으로 보내서 업데이트해줘야 한다.

git push  // 이미 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능

GitHub에서 새로 고침 하면 leopards에 적용된 커밋이 push로 인해 업데이트된 것을  볼 수 있다.


2. 원격에서 한 작업(커밋)을 로컬에 pull 하기 (다운로드)

동료가 한 작업(동료가 push 한 작업)을 깃허브로부터 내 컴퓨터에 있는 프로젝트 폴더로 다운로드한다.

1. 로컬에서 한 작업(커밋)을 원격에 push 하기 (업로드)

GitHub(원격)에서 Leopards의 members에 Dongho 추가
커밋 메시지: Add Dongho to Leopards

leopards.yaml 파일 클릭 > 오른쪽에 연필 버튼 클릭(Edit this File)

 

내용 변경뒤 커밋 메시지 적고 commit

현재 원격에는 저장되어있고, 로컬에는 저장되어 있지 않다.

git pull


3. pull 할 것이 있을 때 push를 하면?(다운로드할( 것이 있을 때 업로드를 하게 되면?)

로컬에서 Leopards의 manager를 Dooli로 수정
커밋 메시지: Edit Leopards manager

GitHub에서 Leopards의 coach를 Lupi로 수정
커밋 메시지: Edit Leopards coach

push 해보기
pull 해서 원격의 버전을 받아온 다음 push 가능

 

커밋은 로컬에서 내가 먼저 했지만 다른 사용자가 먼저 업로드를 했다.

원격에 먼저 적용된 새 버전이 있기 때문에 현재 나의 깃 저장소는 원격 저장소보다 뒤처져 있다. 즉 push 하려면 나의 깃 저장소 내역이 원격 저장소의 최신 내역과 맞아야 한다.

로컬 저장소  원격 저장소(GitHub)

현재 소스트리에는 원격에서 한 커밋이 밑에 원격저장소에서는 원격에서 한 커밋이 위에

1. git pull --no -rebase [merge 방식]

로컬과 원격의 어긋난 시간선을 한 군데로 모아준다.

 

로컬의 main 브랜치와(Edit Leopards manager)와 원격의  main 브랜치(Edit Leopards coach)가 갈라진 다음  Merge branch ‘main’ 지점에서 합쳐진다 .

다른 방법을 쓰기 위해서 reset (Edit Leopards시점으로 초기화)

2. git pull -rebase [rebase 방식]

원격에 맞춰서 원격에서 한 작업을 먼저 붙인 다음에 내가 한 작업을 붙인다.

 

(보통 협업 상황에서는 rebase 사용하지 않는 게 좋음: 로컬에서 작업을 할 때 이미 공유된 것들을 rebase 해서 올리지 않는다) 하지만 pull로 받을 때는 협업 시 사용 O

 

깃헙에서 작업한 Edit Leopards coach 다음에 서버에서 작업한 Edit Leopards manage를 붙여주었다.

git push

로컬 원격(GitHub)

원격에서 커밋한 것이 먼저 들어가지고, 그 다음에 로컬에서 커밋한 것이 들어가진다.

4. 협업상 충돌 발생 해결하기 

로컬에서 Panthers의 member Maruchi를 추가
커밋 메시지: Add Maruchi to Panthers

원격에서 Panthers에 Arachi 추가
커밋 메시지: Add Arachi to Panthers

pull 하여 충돌 상황 마주하기
--no-rebase와 --rebase 모두 해 볼 것

1. git pull --no -rebase

새로운 이름인 Marachi로 저장
git add .
git commit

로컬에서 합쳐진 것을 볼 수 있다. (모르고 Arachi를 두 번 커밋했다… 결과는 똑같아서 상관..x 무시하기..)

--rebase방법을 쓰기 위해서 reset , ( Add Marauchi to Panthers 시점으로 초기화)


2. git pull --rebase

만약 원격에서 적용했던 Arachi로 저장한다면?

커밋이 한 개만 추가가 된다.(이미 원격에서 저장되어있기 때문에 두 번 할필요 xx)

(Add Araruchi to Panthers 시점으로 초기화)

이름을 Maruchi로 바꾸고 git commit -am "Add Maruchi to Panthers"

 이름을 Marauchi로 변경하고 git add . .git rebase –continue :wq로 저장


3. 로컬의 내역 강제 push 하기

 협업할 때 미리 합의한 상황이 아니라면 사용하면 안 됨, 동료와 협업하는 도중에 동료가 한 것이 없어질 수 있기 때문(혼자서 프로젝트하는 도중이나 협업한 게 원격 위에 있는 게 뭔가 잘못되어서 서로 합의가 된 상태에서 어떤 로컬에 있는 것으로 원격을 다시 맞출 때 사용)
  • 로컬의 내역 충돌 전으로 reset (Edit Leopards manager로 초기화 reset)

 

아래 명령어로 원격에 강제 적용

git push –force

깃헙 저장소 새로고침 뒤 확인

Arachi를 저장하기 전으로 돌아갔다.(아예 원격에서 저장했던 것이 삭제됨)


5. 원격의 브랜치 다루기 

1. 로컬에서 브랜치를 만들어 원격에 push 하기(업로드)

  1. from-local 브랜치 만들고 from-local 브랜치로 이동
git switch -c from-local

아래 명령어로 원격의 브랜치 명시 및 기본 설정

git push -u origin from-local
from-local 브랜치를 origin의 대상 브랜치로 정한 다음에 push 한다..!

 

깃헙(원격)에서 from-local 브랜치가 생성된 것을 알 수 있다.

깃헙(원격)에서 from-local브랜치로 변경
jaguars.yaml에서 manager이름을 변경
commit(원격에서만 일어난 변화)

 

main 브랜치에서는 변화가 일어나지 않았다.

브랜치 목록 살펴보기(git branch는 로컬만)

git branch –all / git branch -a

소스트리


2. 원격에서 브랜치를 만들어 로컬에 pull 하기(다운로드)

  1. GitHub에서 from-remote 브랜치 만들기

git branch -a를 해도 from-remote는 나타나지 않음(로컬의 깃이 원격의 변화들을 업데이트하지 않았기 때문)

git fetch  // git branch -a로 확인

원격의 브랜치를 로컬로 받아와야 한다!!

로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch(생성과 연결 한 번에)

git switch -t origin/from-remote

앞에서 깃헙(원격, from-local)에서  Edit Jaguars manager를 commit한 것이 pull로 하면서 로컬(from-local)로 들어오게 된다.


3. 원격의 브랜치 삭제

git push (원격 이름) --delete (원격의 브랜치명)

main 브랜치에서 로컬의 from-localfrom-remote도 삭제한다. (git branch -d 브랜치명)

로컬의 main과 원격의 main만 남은 것을 확인할 수 있다.


6. SourceTree로 진행하기

1. 원격 추가하기 

  • GitHub에 새 레포지토리 만들고 origin2로 추가

소스트리 상단 탭 > 저장소 > 원격 저장소 추가 > 추가

현재 프로젝트를 origin2에도 push 하기

이렇게 원격을 여러 군데 만들 수 있다.


2. push와 pull

 로컬의 Pumas의 members에 Pororo 추가
커밋 메시지: Add Pororo to Pumas
소스트리로 커밋과 동시에 푸시

 

원격에 커밋과 동시에 push 됨!

 

원격에서 Jaguars의 members에 Pinkfong 추가
커밋 메시지: Add Pinkfong to Jaguars
소스트리로 페치(fetch) 및 풀(pull)

패치를 누르면 원격에서 한 commit이 로컬에서 한 commit보다 앞서 들어왔다는 것을 알 수 있다.

그냥 Pull을 누르면 패치와 동시에 Pull이 된다. (fetch 쓸 필요 xx)

로컬의 Jaguars에도 Pinkfong이 추가됐다.


3. 브랜치 다루기

로컬에서 from-local 브랜치를 만들어 원격에 푸시

from-local 브랜치 만들고 더블 클릭 한 뒤 push

원격에 from-remote 만들고 로컬로 가져와 이동

소스트리에서 원격저장소 패치

원격저장소에서 로컬저장소에 가져올 브랜치(from-remote) 체크아웃