본문 바로가기

Project Management/Git & Github

[Chapter 1] github 처음 사용해보기(4) - repository clone과 pull

github logo image

 

 

 

앞선 과정을 통해 우리는 github에 repository를 생성하고, 여기에 로컬에서 생성된 파일과 커밋들을 연결한 다음 연동까지 진행하였습니다. 현재 우리는 우리가 지정한 로컬 저장소(폴더)에서 변경된 커밋의 정보를 github의 repository에 전송하여 자유롭게 관리할 수 있는 상태가 되었습니다. 이제, 다음 상황들을 실습해 보겠습니다.

 

일단, 우리는 한 대의 PC를 사용하고 있지만 새로운 협업 개발자 "John"이 참여했다고 가정하겠습니다. 새로운 협업 개발자 John은 우리가 작업한 리소스들을 일단 자신의 PC(여기서는 우리의 다른 폴더)로 다운로드하여야 합니다. 

 

그러고 나서, John이 개별적으로 작업을 한 다음 그 변경 사항을 커밋하고 - 그 변경사항을 우리가 업데이트하여 반영하는 것까지 진행해 보도록 하겠습니다. 한 대의 PC에서 우리가 진행하지만, 두 사람이 작업을 하는 상황을 시뮬레이션한다는 점을 잊지 마세요.

 

 


 

 

우선 새로운 폴더를 하나 생성해 보겠습니다. 저는 기존에 d:\temp\study_git이라는 폴더를 생성하고 여기서 작업을 진행했는데 d:\temp\study_git_john 이라는 별개의 빈 폴더를 또 하나 생성했습니다. 여러분은 편한 대로 새로운 빈 폴더를 생성해 주세요. 이제 이 새로 생성된 폴더는 새로운 개발자 John의 PC라고 생각하면 됩니다. 

 

이제, d:\temp\study_git_john 폴더에서 Git Bash Here를 실행해 줍니다. 그리고, github의 repository로 이동해 [CODE] 메뉴를 클릭합니다. 그럼 다음과 같은 화면을 볼 수 있습니다. 

 

Clone을 진행하기 위한 url 확인

 

 

이제 위 화면에서 해당 repository의 주소를 복사하고, John의 폴더에서 실행한 git 터미널 화면으로 돌아옵니다. 이제 여기서 Clone을 진행하기 위한 아래의 명령어를 입력합니다. 

 

$ git clone https://github.com/__________/gitstudy.git .
Cloning into '.'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.

 

단, 주의할 점은 아래 url 까지 입력한 다음, 한 칸 띄고 마침표를 입력한다는 점입니다. 이를 붙이는 이유는, 이렇게 하지 않을 경우 현재 폴더 하위에 새로운 gitstudy 폴더를 만들고 그 안에 리소스가 저장되기 때문입니다. 폴더 관리 방식이 복잡해질 수 있으니 잊지 말고 진행하시기 바랍니다(물론 이는 동작 자체에는 문제는 없으나, 나중에 바꾸기가 어렵습니다)

 

이제 Clone이 완료되었다면, John의 폴더로 돌아와 보겠습니다. John의 폴더에도 우리의 원래 폴더와 동일하게 해당 리소스를 다운로드 받았다는 것을 확인할 수 있습니다! 더불어 자동으로 git의 정보 값들도 함께 들어와 있는 상태가 되었습니다. 이제 John도 자신의 로컬 저장소에서 gitstudy repository에 커밋을 진행할 수 있게 되었습니다. 

 

 

 


 

 

이제 John이 readme.txt를 수정하고, 커밋을 만들어 업데이트를 진행해 보겠습니다. 우선 John의 입장이 되어, John의 폴더에서 readme.txt를 열고 간단하게 "John이 처음 업데이트 한 내용"이라는 텍스트를 추가해 보겠습니다. 

 

John의 폴더에서 내용을 수정한다

 

 

그러고 나서, John의 폴더에서 git bash를 통해 다음과 같이 커밋을 생성하고 repository로 push를 진행해 보겠습니다. 

 

$ git add readme.txt

$ git commit -m "John 내용 추가"
[master 9fd2a59] John 내용 추가
 1 file changed, 3 insertions(+), 1 deletion(-)

$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328 bytes | 328.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/______/gitstudy.git
   4f669fc..9fd2a59  master -> master

 

복잡해 보이지만, 일단 John의 폴더에서 readme.txt를 수정한 다음 해당 파일을 add 하고 commit을 생성했습니다. 그리고 이 변경 사항을 repository로 push 해 반영한 것입니다. 이제 github 페이지에서 commit 내용을 확인하면, 해당 내용이 반영되어 있음을 확인할 수 있습니다. 

 

방금 작업한 commit이 확인 가능합니다.

 

 

자, 이렇게 John의 작업이 반영되었습니다. 그런데 한 가지, 우리가 잊은게 있습니다. John의 PC(폴더)에는 파일이 변경되어 있는데 우리 자신의 폴더에는 이 내용이 반영되어 있지 않습니다. 이제 우리의 원래 작업 폴더(우리의 PC)로 John이 업데이트 한 내용을 내려받도록 하겠습니다. 

 

 


 

당연하게도 우리의 원래 폴더에는 readme.txt에 "John이 처음 업데이트 한 내용"이라는 텍스트는 없습니다. 이제 우리 폴더에서 다시 git bash here를 실행해 다음 명령어를 입력해 보겠습니다. 

 

$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 308 bytes | 9.00 KiB/s, done.
From https://github.com/_______/gitstudy
 * branch            master     -> FETCH_HEAD
   4f669fc..9fd2a59  master     -> origin/master
Updating 4f669fc..9fd2a59
Fast-forward
 readme.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

 

우리의 폴더에도 뭔가 변화가 생긴 것 같습니다. 우리 폴더에 있는 readme.txt를 다시 확인해 볼까요?

 

우리의 폴더에도 readme.txt가 업데이트 되었습니다

 

 

John이 작업한 파일이 성공적으로 업데이트 되었습니다. John이 우리에게 메시지를 보내서, "내가 작업한 내용 push 했으니, pull 해줘"라고 요청하는 모습이 상상되시나요? 

 

 

지금까지 두 개의 폴더를 이용해, 간단하게 두 사람이 협업을 하는 기본적인 원리를 살펴보았습니다. 아주 간단하지만, git과 github를 이용하는 중요한 기본 원리를 살펴본 것입니다. 이제 다음 아티클부터는 본격적으로 소스트리를 이용해 git과 github의 작동원리, 지금까지 설명하지 않은 명령어들의 개념과 브랜치 등의 개념을 상세하게 살펴보겠습니다.