scr55

github fork 에서 pull request 까지 그리고 merge

요즘 gitHub에 가면 어마어마한 소스코드들이 널려있습니다. 개발자로서 자신의 한계를 충분히 느끼게 해줍니다. ㅜ.ㅜ (충분해도 너무 충분해)

저 역시 용감(사실은 무모)하게 gitHub에 소스코드를 공개하고 프로젝트를 운영중인데요. 정말 많은 분들이 관심 가져 주시고 도와주셔서 여러가지로 아쉽지만 재미있게 개발하고 있습니다.

하지만 아쉽게도 git사용법이 어려워서 더욱 더 많은 분들이 오픈소스 프로젝트에 참여하지 못한다는 생각을 하면 가끔 밤에 잠이 안 옵니다.(사실은 좀 덕질을 하느라 잠을 일찍 못자고 있습니다.) 그래서 어떻게 하면 잘 된 남의 프로젝트를 ‘포크(Fork)’떠서 pull Request하고 나 말고 다른 사람이 commit한 소스코드를 잘 merge할 수 있을까 고민을 했습니다. (저도 잘 모르다 보니 .. )

그러던 차에 가능한 방법을 찾게 되어 이렇게 정리하여 글을 남깁니다. 이미 아시는 분들은 괘념치 마시고 하던일을 계속 하십시오.

1. git

제가 전문적인 지식없이 git이 이런거다 떠드는건 사실 좀 부끄럽습니다. 예전엔 몰라도 아는척 해야 한다고 생각했는데 요즘은 안그렇습니다. 잘 모르는건 저 말고 잘 아시는 분들이 채워주시겠지요. 그냥 ‘git 이란’ 구글에 검색하면 어마어마하게 자료가 나옵니다. 제가 확실하게 말씀 드릴 수 있는건 SVN보다 좋다입니다.

git을 제대로 알기위해선 https://git-scm.com/ 사이트에 가서 “Try Git” 링크를 찾아보세요. 웹에서 git 커멘드를 입력할 수 있고 튜토리얼 방식이어서 금방 배울 수 있다고 합니다. (저도 타이핑이 느려서 잘은 못합니다. 쿨럭 ㅡ.ㅡ)scr11

웹사이트에서 git 명령어들을 학습할 수 있습니다. 아래에 폴더가 생기는 모습도 나오니 더욱 이해하기 쉽습니다. 하지만 말이 쉽지 해보면 머리속에 잘 안들어 옵니다. 한달정도 계속 쓰다보면 좋아지더라구요. 내 컴퓨터에서 커멘드로 똑같이 하고 싶다면

https://git-scm.com/downloads

scr22

에서 자신의 OS에 맞는 git를 다운로드하여 설치 하면 됩니다. 아래쪽에 GUI Clients라고 있는데 이건 권장 드리진 않습니다. (지극히 개인적인 견해로)

다음과 같이 커멘드 하면 됩니다.

git clone https://github.com/axisj/ax5.git

보다 자세한 사항은 위에 있는  튜토리얼 링크에 가서 좀 더 공부해 보시구용 ~~

2. sourcetree

위에서 언급한 커맨드들을 매번 타이핑 하기 어렵기 때문에 다양한 GUI툴들이 있습니다. 그 중에 하나인 sourcetree 입니다. 저는 이놈으로 repository를 fork하여 관리 해보겠습니다.

2.1 fork 할 프로젝트 선정

gitHub에서 맘에 드는 프로젝트를 선장하세요. 저는 당연히 제 프로젝트로 시작을 해보겠습니다. https://github.com/axisj/ax5 에서 우측 상단에 “Fork”버튼을 클릭합니다.

scr21

 

그런 다음 포크를 어디에 할지 결정 할 수있는 모달창이 열리게 됩니다.

scr23

저는 제 개인계정으로 선택했습니다. 포크가 금방 될 수도 있고 시간이 오래 걸릴 수도 있습니다. 파일이 많으면 복사하는데 좀 더 걸리겠지요 ^^

scr24

포크가 완료되면 개인 계정에 Repository가 만들어집니다. 이렇게 만들어지는 건 좋은데 이 상태론 안되겠지요 웹에서 소스를 고칠 수도 없는 일이니까요. (전 처음에 웹에서 다 되는 건지 알았습니다. ;;)

2.2 sourcetree 에 프로젝트 추가하기

소스트리 설치에 대해서는 구글에 “소스트리 설치”라고 검색하면 또 방대한 자료가 나오게 됩니다. 소스트리 설치는 되었다고 생각하고 설명을 마저 하겠습니다.

scr25소스트리 설치가 완료되고 프로그램을 실행하면 이런 빈 화면이 열리게 됩니다. 여기에 조금 전에 포크(Fork)한 git을 추가해야 합니다.

제가 프로젝트라고 할때도 있고 git이라고 표현할때도 있고 Repository라고 할때도 있습니다. 사실 다 같은 의미 인데 그때 그때 느낌에 따라 표현이 달라지는 것 같습니다. 감안해서 이해해 주십시요

scr26

gitHub에서 “HTTPS clone URL” 란을 클릭하고 주소를 복사해줍니다. 이 주소를 소스트리에 추가해야 하거든요. 소스트리 툴바 제일 왼쪽에 “Clone/New” 버튼을 클릭해주면 클론정보 입력창이 열리게 됩니다.

scr30

복사했던 URL, 내 컴퓨터의 위치 를 넣어주세요. 옵션으로 “Advanced Options”를 확장하면 브랜치를 입력할 수 있습니다. 브랜치를 다르게 입력하는 경우는 예를 들어 “AXISJ” 프로젝트의 경우엔 master, dev브랜치를 운영중입니다. master를 월 1회 dev에서 개발되는 소스를 merge 하고 있습니다.

dev브랜치는 실시간으로 개발되는 내용을 반영하기 때문에 “AXISJ”의 경우엔 외부인이 pull request하려고 해도 dev 브랜치에 해야 합니다.

그런 경우엔 클론해야 할 브랜치가 dev가 되어야 겠지요

 

클론이 완료되면 다음과 같은 화면을 보실 수 있습니다.

scr31scr32

실제 소스도 잘 받아 졌는지 확인 해야 겠지요

 

 

2.3 소스 고치고 commit

적당하고 만만한 파일인 README.md 파일을 메모장으로 열어 원하는 내용을 변경합니다. (그냥 되는대로 해주세요 테스트니까)

scr33파일 수정후에 소스트리에 가보면 Working Copy > “Unstaged files”항목이 생기게 됩니다. 체크박스가 있지요. 체크하면 Staged 됩니다. 당황하진 마세요 다시 아래로 내릴수 있습니다.

scr34그런다음 툴바에 “Commit”버튼을 클릭해주면 바로 커밋되지 않고 메세지를 넣으라고 합니다. git은 무조건 메세지를 넣어야 합니다. (얼굴 모르는 사람과 커뮤니케이션 해야하니까요) 커밋 메세지 작성하고 메세지 창 아래에 “Push….” 를 체크 하면 커밋과 동시에 push 됩니다.

commit 과 push라는 용어가 갑자기 나왔는데요. 당황하지 않고 역시나 구글에서 “commit 과 push” 라고 검색해봅니다.

“Commit”버튼을 누르고 나면 잘 되었는지 되게 궁금합니다. 믿음이 안가니까요.

그래서 gitHub가서 다시 확인해봅니다.

scr35잘 되었습니다. 목록이 나오네용 ~~ 이렇게 커밋을 하고 나면 내가 수정한 코드를 하루빨리 원본소스에 적용해주고 싶습니다. 그래야 내가 받은 기쁨을 남들에게도 전할 수 있으니까요 아오 신나~ >.<

 

 

2.4 Pull request

이렇게 포크된 프로젝트에 커밋을 하는 것은 큰 문제가 없습니다. 혼자 사용하는 Repository이니까요. 간섭받을 일이 없지요. 문제는 이렇게 커밋한 내용을 원본 git에 Pull request하는 것입니다.

원본에 Pull 하는 방법은 커멘드 고수분들은 커멘드로 하시겠지만 우린 좀 어려우니까 웹에서 하도록 하겠습니다.

scr36

브랜치 왼쪽에 “Compare” 버튼을 클릭해주면 Pull request전에 원본 소스와 포크된 소스를 비교해주는 “Comparing changes” 화면이 나오게 됩니다. 처음 화면을 보면 겁이 덜컥 납니다. (소스가 꼬여 다 날아가버리는 건 아닌가… )scr37

gitHub도 저랑 같은 생각이었나봅니다. 걱정말라고 메세지가 나오네요. “걱정마세요 그냥 pull request 만들어져요” 그럼 용감하게 “Create pull request”버튼을 클릭합니다. 잘 되어야 할텐데요.

scr38

그냥 될 줄 알았는데.. 또 글을 쓰라고 합니다. 아~ 영어 약한데 말이죠.. 외국사람한테 머라고 써야 하려나요.. 하지만 우린 개발자니까요 당당히 코드로 이야기 합니다. 그리고 구글 번역기에 도움을 받아봅시다. 한국어 > 일어 > 영어로 번역하면 무섭지 않습니다. 액시스제이 프로젝트들은 영어를 안써도 되니 한국인이 운영하는 프로젝트는 더 격하게 사랑해주면 됩니다.

이렇게 Pull request하고나면 이제 풀(Pull) 받은 권한자가 merge 여부를 결정해줍니다. 너무 많은 코드를 손대거나 원제작자의 스타일과 다르게 코딩하면 잘 안받아 줍니다. 입장바꿔놓고 생각하면 이해되지요. 본인도 힘들게 만들고 있는데 이상한거 받아달라하면 난감하거든요. 혹시 안 받아주더라도 쿨하게 이해하고 넘어갑니다.

2.5 sourcetree에 remotes 추가하기

이렇게 하면 내가 작업한 코드를 포크된 git에 커밋하고 또 원본 git에 Pull request까지 했습니다. 하지만 이렇게 하고나면 다음의 문제는 원본 제작자가 나 보다 몇 백배 작업을 많이 한다는 점입니다.

나는 그냥 몇줄만 추가했는데.. 소스를 다시 내려 받아야 하나.. 고민이 됩니다.

이럴 때 remote를 추가하는 방법이 있습니다.

scr39

sourcetree > remotes 위에서 마우스 오른쪽 클릭해서 “New remote”합니다.

scr40 scr41

그리고 “Add” 다음으로 remote name을 정하고 원본 git주소를 입력합니다. 그런다음 추가된 remotes upstream을 마우스 오른쪽 클릭

scr42

pull from … 을 선택합니다.

scr43선택하고나면 pull 모달이 열리는데요. 처음엔 remote branch를 선택할 수 없습니다. 우측 “Refresh”를 클릭하면 로딩 후에 브랜치가 선택가능해집니다. 그리고 pull 해주면 끝.

드디어 포크된 로컬 프로젝트의 소스가 원본소스와 머지 되었습니다. 물론 이러고 나면 원본과 충돌이 나서 문제가 되는 파일이 생기기도 합니다. 그런 경우엔 원본을 사용하겠다고 선택해주면 큰 문제가 없겠습니다. (당연히 중요한 작업이 충돌이 났다면 따로 옮겨 두어야 겠죠)

긴 글 읽어주셔서 감사합니다.


Site Footer

Sliding Sidebar