Github을 사용할 때 fork 레파지토리를 만들어 코드 변경 작업을 수행하는 것이 일반적입니다.
Fork 된 레파지토리가 너무 오래되거나, 원본 레파지토리 병합 요청(”pull request”)이 반려되는 경우,
Fork 된 레파지토리에 원본 레파지토리 변경 사항을 적용해야 하는 경우가 있습니다.
Fork 된 레파지토리에 원본 레파지토리 변경 사항을 반영하는 방법을 정리합니다.
github에서 Fork를 왜하는가?
github 등 git 서비스에서 commit 권한이 없는 레파지토리를 테스트하거나 대상 레파지토리을 변경하는 목적으로 fork 기능을 사용합니다.
다른 계정(Account) 혹은 조직(Organization)의 레파지토리를 fork 하면 해당 레파지토리는 사용자의 계정으로 복제됩니다. <그림 1참조>
그림 1:
github 레파지토리를 Fork(분기)
Fork 레파지토리에 원본 레파지토리 변경 반영
Fork 된 레파지토리는 PC 혹은 노트북에 복제하고, 코드 변경의 버전을 관리합니다.
그림 2:
git 로컬 레파지토리 복제(clone)
Fork 시점이후 fork 된 레파지토리에는 원본 레파지토리 변경이 반영되지 않습니다.
Fork 된 레파지토리에 원본 레파지토리의 변경 사항을 반영하는 절차는 다음과 같습니다.
사용자 계정에 fork 되고 로컬 컴퓨터에 복제된 git 레파지토리에 원본 레파지토리의 remote repository 등록
<그림 3 참조>
원격 원본 레파지토리 명: upstream (신규 추가)
fork 된 원격 레파지토리명: origin (git clone시 자동 생성됨)
로컬 git 레파지토리에 원본 레파지토리의 변경 사항 반영(git pull)
로컬 git 레파지토리의 변경 사항을 fork된 repository에 반영 (git pull): <그림 4 참조>
그림 3:
원본 github 레파지토리 등록: upstream
<그림 3>과 같이 로컬 git 레파지토리에 원본 레파지토리를 remote repository로 등록합니다.
원본 레파지토리 명으로 “upstream“을 사용하는 것이 관례입니다.
<그림 4>와 로컬 git 레파지토리에 원본 레파지토리의 변경 사항을 반영하는 데모는 다음과 같습니다.
~/oracloud_repo > git push origin master
Counting objects: 806, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (245/245), done.
Writing objects: 100% (806/806), 252.73 KiB | 0 bytes/s, done.
Total 806 (delta 568), reused 774 (delta 544)
remote: Resolving deltas: 100% (568/568), completed with 39 local objects.
To github.com:taewanme/oracloud_repo.git
23da8f3..5b810be master -> master
~/oracloud_repo >
요약
Fork 된 레타지토리는 생성 지점을 기준으로 이후에 발생한 원본 레파지토리의 변경이 반영되지는 않습니다.
PC 혹은 노트북의 로컬 git 레파지토리를 경유하여 Fork된 레파지토리에 원본의 변경 사항을 반영할 수 있습니다.
PC 혹은 노트북의 로컬 git 레파지토리에 “upstream”이라는 이름으로 원본 레파지토리를 등록하고 git pull과 git push 명령으로
<그림 4>와 같은 절차로 원본의 변경 사항을 fork 레파지토리에 반영할 수 있습니다.