본문 바로가기
Git & GitHub

[Git] GitHub / push & pull

by 사장님나빠여 2022. 4. 6.

#GitHub란?

-분산 버전 컨트롤 소프트웨어 깃을 기반으로 소스 코드를 호스팅하고, 협업 지원기능들을 지원하는 마이크로소프트의 웹서비스

-가장 널리 쓰이는 코드 공유 및 협업 서비스(GitHub외에도 GitLab, Bitbucket등의 서비스들이 있다)

-git으로 관리하는 모든 프로젝트들을 온라인 공간에 공유해서 프로젝트들을 온라인 공간에 공유해서 프로젝트 공유원들이 함께 소프트웨어를 만들 수 있도록 도와주는 소프트웨어 개발 플랫폼

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

-버전을 만들고 업로드를 하면 GitHub상의 프로젝트는 해당 버전으로 최신화가 되고 다음 사람이 완료한 작업을 커밋해서 올리기 위해서는 최신 커밋을 먼저 다운 받아서 자기 컴퓨터에 있는 프로젝트에 적용부터 하게 강제된다. 커밋상에 충돌사항이 있다면 그것도 자기 컴퓨터에서 해결해서 병합하든 하고 나서야 비로소 자기가 작업한 커밋을 공유 공간에 올릴 수 있다. 

-GitHub는 오픈소스의 성지이다

#GitHub 시작하기

-github.com 에서 Sign up 으로 가입 후 로그인

-Personal access token 만들기

1.우측상단 프로필 - Setting - Developer Settings - Personal access tokens - Generate new token

2. repo 및 원하는 기능에 체크, 기간 설정 뒤 Generate token

3. 토큰 안전한 곳에 보관해 둘 것

-토큰 컴퓨터에 저장하기

1. Windows(시작-검색) 자격증명 관리자 - Windows 자격 증명 선택

2. git:https://github.com 자격 정보 생성 후 사용자명과 토큰 붙여넣기

 

 

-repository(저장소) 만들기 - Repository name 입력 후 Public(공개)/Private(비공개)선택

-아래와 같은 창이 생성되면 Repository 생성완료

-협업할 팀원을 추가하고자 하면 탭 상단에 Settings 를 클릭 후 Manage access에서 팀원을 추가해주면 됨

프로젝트 연동 전

 

#원격 저장소 사용하기

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

로컬에 깃으로 관리하고 있는 프로젝트가 없는 경우는 …or create a new repository on the command line의 코드를 

로컬에 깃으로 관리하고 있는 프로젝트가 있는 경우는 or push an existing repository from the command line의 명령문을 복사해서 Git Bash에서 실행시키면 프로젝트의 파일들이 저장소에 나타나는 것을 확인할 수 있다.

(좌) 프로젝트 중인 파일들 / (우) 깃허브 repository에 올라온 파일들

-git remote add origin (원격 저장소 주소) : 로컬의 Git저장소에 원격 저장소로의 연결 추가(주소에 깃헙이 아닌 다른 저장소도 사용 가능), origin은 원격 저장소의 이름이다. origin 대신 원하는 다른 것으로 바꿀 수 있지만 원격저장소의 이름은 origin으로 많이 사용한다.  

-git branch -M main : GitHub권장 기본 브랜치명을 main으로 바꾸기

-git push -u origin main : 내 컴퓨터에 있는 커밋들 중 원격 공간에 없는 것들을 업로드 해준다는 의미, 해당 명령문을 해석하면 origin이라는 원격에 main브랜치에 푸시한다는것을 -u로 기본 세팅해주는 것

-위 명령문에서 -u 대신 --set-upstream 사용가능 : 현재 브랜치와 명시된 원격 브랜치 기본 연결

-git remote : 현재 프로젝트와 연결된 원격의 목록을 확인할 수 있다.

-git remote -v : 연결된 원격의 목록을 자세히(주소 등) 확인할 수 있다.

 

2.GitHub에서 프로젝트 다운받기

-저장소의 프로젝트와 깃에 관련된 내역까지 가져오는 방법

-다운받기 원하는 폴더에서 우클릭 후 Git Bash Here을 클릭

-저장소에 초록색버튼의 Code를 클릭 후 HTTPS의 주소를 복사해서 클론을 만들 때 원격 저장소 주소로 사용한다

-git clone (원격 저장소 주소) : 원하는 폴더에서 이 명령문을 입력시 원격 저장소 주소에 있는 프로젝트를  클론으로 생성한다

-클론을 생성한 폴더로 프로젝트를 실행하고 git log로 이제까지의 프로젝트의 커밋 내역들도 확인할 수 있다.

 

#push와 pull

1. 원격으로 커밋 밀어올리기(push)

-push : 로컬의 변화를 원격으로 보내서 업데이트한다

-leopards.yaml을 수정 후 commit한 다음 git push를 해주면 아래 사진처럼 수정한 시간이 변한 것을 확인할 수 있다.

-git push만으로 할 수 있던 이유는 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능(origin이라는 원격저장소의 main 브랜치로 디폴트 설정됨)

 

2. 원격의 커밋 당겨오기(pull)

-pull : 원격의 커밋 가져오기 / 동료가 push해서 올린 작업한 결과물을 내 컴퓨터의 프로젝트로 다운받는다는 의미

-GitHub에서 leopards.yaml의 내용을 추가한 후 커밋하고 작업하는 곳의 Git Bash에 git pull을 해주면 작업하는 곳에서도 동일하게 바뀐 것을 확인 할 수 있다.(원격에서 바꾸고 저장 후 git pull하면 로컬에서도 확인 가능하다)

 

3.pull 할 것이 있을 때 push를 하면?(원격에서 push된 것이 있어서 pull을 한다음 작업을 해야하는데 하지 않고 로컬의 것을 push하는 경우)

-위 사진처럼 에러사항이 뜬다. 로컬저장소는 원격저장소 보다 뒤쳐져 있기 때문. 원격저장소에 무언가를 push하려면 로컬의 내역이 원격저장소의 최신 내역대로 맞춰져 있어야 한다.

-해결방법

git pull --no-rebase : merge방식 로컬의 main브랜치와 원격의 main 브렌치가 갈라진 다음 merge된다.

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

② git pull --rebase : rebase방식

원격에 맞춰서 원격을 먼저 붙이고 로컬에서 한 커밋을 뒤에 붙여준다.

③ 위 둘중 하나의 작업이 끝나면 git push 해준다.

 

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

-로컬과 원격에서 같은 파일의 데이터를 수정하고 push 하려고 할 때 충돌이 일어날 경우

①git pull --no-rebase를 사용했을 때

-브랜치를 합칠 때 충돌하는 경우와 같은 창이 뜨는데 여기서 한가지를 골라도 되고 다른 내용으로 수정한 다음 git add . , git commit 후 자동으로 커밋메세지가 만들어져 있으면 :wq로 저장후 종료하면된다. (커밋메세지를 바꾸고 싶으면 해당 창에서 i를 누른 후 커밋메세지를 수정한다.)

②git pull --rebase를 사용했을 때

-rebase는 상대방(원격)의 것을 먼저 붙이고 로컬은 나중에 붙인다. 

-Accept Current Change로 이전의 것을 택하고 git rebase --continue 하면 로컬에서 작업한 내용은 커밋이 되지않지만

-Accept Incoming Change로 로컬의 변한 것을 택하고 git rebase --continue 하면 로컬의 작업까지 커밋이 된 것을 확인할 수 있다.

※협업상황에서 rebase를 쓰지말라는 말은?

로컬에서 무언가를 작업할 때 그 때 이미 공유된 것들을 rebase해서 올리지 말라는 것. pull 받는 상황에서 rebase하는 것은 사용해도 괜찮다.

 

5. 로컬의 내역 강제 push 해보기

-git push --force : 로컬의 내역들이 원격보다 뒤쳐져있을 때는 push할 수 있지만 원격의 내용이 잘못되서 로컬에 있는 것들로 강제로 맞춰야 할 때는

강제 push해야 한다.(합의가 된 상황에서만 사용할 것)

기존 커밋 내역
로컬의 내역으로 강제 push

-이후 원격에서 확인해보면 이전의 원격의 내용이 무시되고 강제 push된 것을 확인할 수 있다. 

 

#원격의 브랜치 다루기

-로컬에서 브랜치만들고 원격으로 보내기

-git branch from-local로 브랜치를 만든 후 switch를 해준 다음 git push를 하면 어디에 push해야하는지 모른다는 에러가 발생한다.

-origin이라는 원격의 from-local 브랜치를 만들어서 push하라는 말이기에 git push -u origin from-local 명령어를 입력하면 아래 사진처럼 원격 브랜치가 생긴것을 확인할 수 있다.

-git branch는 로컬의 브랜치만 확인 가능하지만 git branch --all은 로컬과 원격의 브랜치들까지 확인 가능하다.(git branch -a로도 사용가능) / remotes/~~는 원격의 브랜치들을 의미

 

-원격에서 브랜치 만들기

-GitHub의 브랜치모양의 main을 클릭 후 Find or create a branch...에 원격에서 만들 브랜치이름을 입력 후 Create branch:브랜치 이름 from 'main'을 클릭하면 브랜치를 생성할 수 있다.

-원격에서 브랜치 생성 후 로컬에서 git fetch 명령어를 입력해야만 로컬에서도 원격에서 생성한 브랜치의 확인이 가능하다.

-git branch -a 로 확인된 원격의 브랜치를 로컬 브랜치에서 생성하여 연결하려면 git switch -t origin/(원격에서 생성한 브랜치명) 명령어를 입력해주어야 한다.

- 로컬의 브랜치를 삭제하려면 git branch -d 브랜치명 을 사용하지만 원격의 브랜치를 삭제하려면 git push (원격이름) --delete (원격의 브랜치명) 명령어를 사용한다.

'Git & GitHub' 카테고리의 다른 글

[Git] Branch  (0) 2022.04.05
[Git] 시간 여행하기  (0) 2022.04.04
[Git] Git 시작하기  (0) 2022.04.03

댓글