[Git] 4.1. 원본저장소를 복사하다 : Fork

업데이트:

카테고리:

태그: , , , ,

Fork

남의 원본저장소를 내 계정의 원격저장소로 복사해오는 명령어


원본저장소에서 협력자 등록

image

위의 사진처럼 원본저장소의 메뉴에서 [Setting - Manage access] 페이지에 들어가서 [Invite a collaborator] 버튼을 누르고 등록하려는 유저를 찾아 등록한다. 유저를 찾아 등록 신청을 하면, 해당하는 유저의 계정으로 초대 이메일이 가며, 유저가 수락 버튼을 눌러야 권한이 완전히 부여된다.

한계

원본저장소의 소유자 입장에서는 협력자가 많아질수록 관리가 어려워진다. 협력자는 원본저장소에 직접 push할 권한이 있기 때문이다. 하지만 원본 개발자는 많은 개발자의 의견을 받고 오픈소스를 개선하고 싶은 니즈가 있고, 개발자는 오픈소스에 참여하고 기여하고 싶어한다.

대안

이때 이런 문제의 해결책이 될 수 있는 것이 Pull Request이다. 개발자는 원본저장소를 자신의 계정에 복사(fork)해서 원격저장소를 생성하고, 이곳에 커밋을 올린 후 원본저장소의 소유자에게 병합 요청을 하면 원본저장소의 소유자는 개발자의 병합 요청을 검토해서 원본저장소에 반영하는 것.

branch vs fork

이렇게 보면 branch와 fork는 비슷한 개념인 것 같다. 하지만 약간의 차이가 있다. branch는 하나의 원본저장소에서 분기를 나누기 때문에 코드 커밋 이력을 보기 유리하지만, 다수의 사용자가 다수의 브랜치를 만들면 관리가 어렵다는 단점을 가진다.

반면 fork는 여러 원격저장소를 만들어 분기를 나누기 때문에 원본 저장소에 영향을 미치지 않으므로 원격저장소에서 마음껏 코드를 수정할 수 있지만, 원본저장소의 이력을 보려면 따로 주소를 추가해야 한다는 단점을 가진다.


Fork 실습

1. 새로운 이메일 만들기

원본 저장소 개발자가 아닌 fork를 시도하는 개발자의 계정을 만들어야 한다. 그래서 기존의 Primary email로 사용중인 naver메일 계정은 남겨두고, gmail 계정을 이메일 등록에서 제거하였다.

image

그리고 gmail 계정을 이용해 새롭게 sign up을 시도하였다. (gmail 계정은 +를 이용하여 하나의 메일 계정으로 여러 메일 계정처럼 사용할 수 있는 기능을 가진다. 이를 이용해보았다.)

img_1

도서관에 있는 지금 정면 창문 앞으로 까치가 보여서 닉네임은 KKKachi로 지었다.

img_2

계정 생성이 성공적으로 마무리 되었다.

img_3

Github으로 처음 진입하는 광경이 이렇게 황홀했나 싶다.

img_4

계정이 시작한 첫 화면이다. 2개월 전에 GitHub을 처음 마주했을 때에는 아무 것도 몰랐는데 다시 보니 흥미롭다.


2. Fork 시도하기

img_5

img_6

고양이와 문어의 [iTshirt] 원본저장소를 검색하여 들어가보자.

img_7

원본저장소가 잘 있는 것을 확인할 수 있다. 우측 상단에 [Fork] 버튼을 누르면

img_8

Forking되고 있다는 메세지 이후

img_9

정상적으로 Fork가 되었다. 저장소의 주소를 의미하는 [KKKachi/iTshirt] 아래에 ‘forked form Orchemi/iTshirt’ 라는 문구가 있음을 알 수 있다.


3. Sourcetree에서 Clone

img_10

원격저장소의 [Code] 버튼을 누른 뒤, 원격저장소 주소를 복사한다.

img_11

새로운 탭을 열고 Clone을 누른 뒤, 원격저장소의 주소를 입력하면 [클론] 버튼이 활성화된다.

img_12

두 번째 입력란에는 KKKachi의 원격저장소와 연결할 내 컴퓨터의 로컬저장소 폴더를 만들어서 선택한다. [IntelliJ] 폴더에 [iTshirt-KKKachi] 폴더를 임의로 만들고 로컬저장소로 선택했다.

img_13

세 번째 입력란에는 iTshirt-KKKachi’ 가 자동으로 입력되었다. 이제 [클론] 버튼을 클릭하면

img_14

새로 만든 [New tab]의 이름이 [iTshirt-KKKachi]로 변경되었음을 확인할 수 있다. 그리고 Sourcetree에는 Chapter 3에서 만들었던 커밋 히스토리까지 모두 볼 수 있다.


4. Sourcetree에 KKKachi 계정 추가

현재 고양이의 계정(Orchemi)으로 Sourcetree에 로그인이 되어있으므로 이 소스트리 계정으로 KKKachi의 원격저장소에 commit & push 를 하는 경우, 에러가 발생한다. KKKachi 계정을 추가하고 해당 계정으로 fork해온 repo를 수정해보자.

img_15

먼저 [도구-옵션]을 누른 뒤, 인증 탭에 들어가면

img_16

위처럼 현재 Sourcetree에 로그인된 계정을 확인할 수 있다. 새로운 계정을 추가해야하니 파란색 [추가] 텍스트를 클릭한다.

img_17

호스팅서비스는 ‘GitHub’으로, 선호 프로토콜은 ‘HTTPS’, 인증은 ‘OAuth’ 또는 ‘Basic’ 둘 중 하나로 한다. (Basic은 GitHub 닉네임과 암호를 입력해서 로그인하는 방식이고, OAuth는 웹 브라우저를 띄워서 로그인하는 방식이다.) [OAuth 토큰 새로고침] 혹은 [비밀번호 새로고침]을 누르면 위처럼 비밀번호를 입력하라는 팝업창이 나오고, GitHub 계정의 비밀번호를 입력한다.

img_19

등록된 KKKachi의 GitHub 계정을 Sourcetree 기본 계정으로 설정하기 위해 접혀있는 KKKachi 계정을 클릭하면 상세 정보가 나오고, 파란색 [설정 초기화] 텍스트를 클릭하고 대화상자에 [예]를 눌러 기본 계정으로 설정한다.


5. KKKachi 원격저장소에서 커밋

img_20

소스코드 수정을 위해 InelliJ에서 [iTshirt-KKKachi] 디렉토리를 모듈로 열어 목록에 반영하였다.

img_21

[iTshirt-KKKachi] 디렉토리에 like.md 파일을 추가하고 ‘좋아요 기능’이라는 텍스트를 입력하였다.

img_22

sourcetree로 돌아와서 커밋창으로 이동한다. 하단에 계정이 아직 Orchemi 계정이므로 사람 아이콘을 클릭하고 계정 정보를 변경한다.

img_23

img_24

정상적으로 반영이 되었음을 알 수 있다. 하단에 commit message는 ‘좋아요 기능 추가’ 텍스트를 입력하고 commit을 실시하였다. 이후 push를 실시했고,

img_25

정상적으로 History에 반영되었음을 알 수 있다.


Reference

  • 팀 개발을 위한 Git GitHub 시작하기, 한빛미디어, 정호영,진유림

댓글남기기