슬기로운 개발생활

[Git] Git 버전관리 - 기본 (github, remote, clone, push, pull, fetch)

by coco3o
반응형

원격저장소(remote repository)와 이를 이용하는 명령어인 remote, clone, push, pull, fetch에 대해서 알아보자.

 

Git의 component 구조

원격저장소를 이용하면 공동으로 협업할 수 있는 시스템 아키텍처가 그려지게 된다.

원격 저장소를 포함하면 2가지의 관점에서 구조적인 이미지를 그려볼 수 있다.

첫번째는 개인 관점에서의 git 이용 flow, 두번째는 다른 사람과의 공동으로 원격저장소의 사용이다.

 

아래 이미지는 Git의 기본적인 3가지 컴포넌트이다. 

출처 : https://sabarada.tistory.com/75?category=792135

사실 이 이미지에서 저장소(repository)는 개인저장소(local repository)와 원격 저장소(remote repository)로 나눌 수 있다. 그렇게 나누어진 이미지는 아래와 같다. 

출처 : https://sabarada.tistory.com/75?category=792135

개인 저장소에 commit된 버전을 원격저장소로 push 명령어를 통해 넘길 수 있다. 그리고 fetch / clone / pull 명령어를 통하여 가져올 수도 있다.

 

원격 저장소는 개인이 사용하는 용도라기 보다는 많은 사람들이 공유하는 저장소로 사용되는 경우가 많다.

원격 저장소를 통해 협업하며 함께 개발해 나가는 것이다.

이러한 협업은 원격저장소를 통해 하게 되는데, 아래 그림과 같이 하게 된다.

출처 : https://sabarada.tistory.com/75?category=792135

이런식으로 원격 저장소에 있는 파일을 Local에 가져와서 수정이나 추가 후 다시 원격 저장소로 올려둔다.

동료 개발자도 동일한 작업을 진행한다. 이런식으로 협업하여 생산성을 높이는 것이다.

물론, 만약 같은 파일의 같은 내용을 수정하면 충돌(conflict)이 발생하기도 하니 조심해야 한다.


원격 저장소 생성(github)

github에 먼저 원격 저장소를 생성해보자. github 사이트 (https://github.com/)에 접속하여

회원가입을 진행하고 로그인 후 우측 상단에 + 버튼을 눌러 New repository를 클릭한다.

아래는 원격 저장소를 제작하기 위한 정보를 입력하는 페이지이다.

각각 내용은 아래와 같다.

  • Repository name : 원격 저장소 이름 ( 필수 )
  • Description : 원격 저장소 설명
  • public / private : 원격 저장소 공개여부 (Public : 공개저장소, Private : 개인저장소)
  • Initialize this repository with a README : README를 기본적으로 생성할것인지 여부
  • .gitignore : 원격 저장소에 올리지 않을 파일 설정 파일
  • license : 소스가 가지게되는 라이센스 정보

정보를 기입한 후 Create Repository 버튼을 누르면 원격 저장소가 생성된다.

이제 로컬 저장소와 원격 저장소를 연동해보도록 하자.

 

사용자 인증정보 설명

로컬 저장소에서 원격 저장소로 데이터를 넘길때 커밋한 사람이 누구며, 어떠한 사람인지 남길 필요가 있을 것이다.

이런 인증에 대한 부분을 git config 명령어로 설정할 수 있다. 아래의 명령어는 PC의 git 시스템 환경설정정보를 설정하는 명령어이다. user.name은 시스템의 이름을, user.email은 email을 나타낸다. 이 정보들은 commit 할 때마다 이 정보를 사용한다.


remote

remote 명령어는 현재 프로젝트에 등록된 원격 저장소와 관련된 명령어이다. 우리가 생성한 github와 연동하기 위해서는 

먼저 해당 원격 저장소를 프로젝트에 등록시켜야 한다. 연동시키는 명령어는  git remote add <등록 이름> <원격 저장소 주소>이다. 등록 이름은 등록하고자 하는 이름을 사용자가 지정할 수 있다. 그리고 원격 저장소 주소는 이전에 생성한 github의 주소를 말한다. 해당주소는 아래 처럼 나와있다.

실제 명령어를 사용하면 아래와 같다.

이렇게 명령어를 사용하면 내 PC의 로컬 git 프로젝트와 원격 저장소가 연동된다.

잘 연동되어 있는지는 git remote 명령어를 통해 알 수 있으며, 좀 더 자세한 정보를 원한다면 git remote -v 명령어를 통해 확인할 수 있다.


push

push 명령어는 현재 프로젝트의 커밋된(HEAD) 내용을 원격 저장소로 내보내는 명령어이다. push로 내보내게 되면 

원격 저장소에 저장되게 되며 이렇게 원격 저장소에 저장된 내용은 다른 사용자들도 이용할 수 있게 된다.

명령어는 git push <원격 저장소 명> <branch 이름> 이다.

 

push를 이용하기 위해서는 원격 저장소에 인증이 되어있어야 한다. 따라서 처음 push를 진행할때는 해당 원격 저장소에 인증하는 과정이 있을 수 있다. 아래 명령어로 push를 진행해보자.

위와 같이 error : src refspec master does not match any 라는 메시지와 함께 에러가 난다.

이 에러는 아직 로컬에 commit된 내용이 없을 때 출력되는 에러이다. 파일을 하나 생성 후 add, commit을 진행한 후 다시 push하면 아래와 같이 로그인을 하라고 출력될 것이며 정확한 인증정보(Username & Password)를 입력하면 push가 정상적으로 이루어진다.

정상적으로 push가 이루어졌다. 원격 저장소에 가서 정상적으로 들어갔는지 확인해보자.


clone

clone은 git clone <원격 저장소 주소>를 이용하여 사용할 수 있다.

이 명령어는 원격 저장소에 있는 프로젝트를 가져오는 역할을 한다. master 브랜치를 자동으로 가져오며 origin으로 remote도 add해준다. git init 명령어로 git 프로젝트가 아닌 곳에서도 사용할 수 있는 명령어이다.

위 명령어를 실행하면 원격 저장소를 가져온다. 해당 디렉토리에 들어가면 이미 git 프로젝트로 init이 되어있으며 remote 등록도 자동으로 되어있음을 알 수 있다.


pull & fetch

원격 저장소에서 로컬 저장소로 소스를 가져오는 명령어로는 pull과 fetch가 있다.

fetch와 pull의 차이는 가져온 소스를 merge 하느냐 안하느냐의 차이가 있다.

pull 명령어 원격 저장소의 소스를 가져오고 해당 소스가 현재 내 소스보다 최신 버전이라면 지금의 버전을 해당 소스에 맞춰 올린다. merge 명령어를 사용하는 것이다. 하지만 fetch의 경우 단지 소스를 가져올 뿐 merge 하지는 않는다.

 

clone 파트에서 만들었던 다른 디렉토리(second-repository)에서 해당 파일(first.txt)을 업데이트 후 git으로 push하였다.

이제 fetch 명령어를 통해 변경된 내용을 가져와 보도록 한다. 명령어는 git fetch <remote> 이다.

제대로 가져왔는지 확인을 위해 git log 명령어로 확인해보자.

HEAD와 origin/master가 가리키고 있는 위치가 다른 것을 확인 할 수 있다.

git diff 명령어를 통해 어디가 변경되었는지도 알 수 있다.

 

pull 명령어는 원격 저장소에서 fetch 명령어로 가져온 후 merge까지 한번에 해 실제 파일의 내용이 변경되는 명령어이다.

명령어는 git pull <원격 저장소 명> <branch 명> 이다.

fast-forward 업데이트를 진행한다고 로그에 출력되었다. 로그를 확인해보도록 하자.

HEAD와 origin/master가 동일한 위치를 가리키고 있는 것을 확인할 수 있다.

파일 역시 최신으로 업데이트되었다.

 

 

reference : https://sabarada.tistory.com/75?category=792135

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기