-
[Github] Fork한 Repository 업데이트하기Git & Git hub 2021. 2. 11. 17:13728x90
Fork 란
fork는 다른 사람의 Github repository에서 내가 어떤 부분을 수정하거나 추가 기능을 넣고 싶을 때 해당 respository를 내 Github repository로 그대로 복제하는 기능이다.흔히 포크를 뜬다고 표현한다.
wecode-bootcamp-korea repo에서 내 개인 repo로 포크를 떠와 리팩토링과 기능을 추가하고자 하였다.
나는 당연히 포크로 떠온 개인 repo도 기존 repo의 변경사항이나 추가사항이 자동으로 업데이트되는줄 알고 있었는데
업데이트가 되어 있지 않았다.
포크를 뜰 당시의 상태에서 멈춰있는 문제를 발견하였다.
따라서 문제를 해결하기 위해 Fork한 Repository 동기화하는 방법을 찾아 해결 할 수 있었다.
1. 먼저 원본 Repo 를 remote Repo로 추가해야 한다.
Fork 해온 repository 에서 remote repository 를 확인하면 아래와 같이 나올 것이다.
git remote -v
아래의 Muntari29 이 현재 포크해온 Repo이다.
동기화해오고 싶은 원본 Repo를 upstearm 이라는 이름으로 추가해준다.
여기에 동기화해오고 싶은 원본 repository 를 upstream 이라는 이름으로 추가한다.
upstearm이 추가된게 보인다. 여기서 https 주소는 동기화하고자 하는 원본 Repo 주소이다.
git remote add upstearm https...
2. upstream repo 로부터 최신 업데이트를 가져올 차례이다.
Git 의 fetch 명령어를 통해 upstream repo의 내용을 불러오자.
Why? => fetch
backlog.com/git-tutorial/kr/stepup/stepup3_2.html
더보기여기서 fetch 명령어는
원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않은 경우에는 사용하는 명령어라고 한다.
git fetch명령은 원격 저장소에서 로컬 저장소로 커밋, 파일 및 참조를 업데이트한다.
병합하고자 할 경우 아래와 같이(3번) merge 과정을 해주면 된다.
사실 pull = fetch + merge 이다!
그럼 왜 pull을 바로 쓰지않고 fetch + merge를 쓰는걸까
fetch 명령어를 사용할 경우 FETCH_HEAD 라는 이름 없는 브랜치가 생긴다.
이 브랜치에 Repo의 최신 이력들이 저장되는데
여기서 핵심은 fetch 명령어를 사용하면 병합을 강요받지 않는다는 것이다.
원본 Repo와 개인 Repo 를 분리해주는 용도로 사용하며 개인 Repo 개발 작업에는 전혀 영향을 미치지 않는다고 한다.
그렇기에 fetch는 개인 Repo 를 원본 Repo와 통합하기 전에 안전하게 파일을 검토하는 용도로 사용하기 때문이다.
병합을 하고 싶지 않으면 않하면 되고
병합을 하고 싶다면 그냥 하면 된다.
Pull은 공격적인 merge라면 fetch는 비교적 안전한 merge 절차라고 할 수 있겠다!
그렇기에 Repo 동기화는 기본적으로 fetch 를 사용한다
git fetch upstearm
3. upstream repo의 main branch (혹은 원하는 branch도 가능하다고 한다)로부터 local main branch 로 merge 한다.
git merge upstearm/main
4. Push
이 과정까지는 local 환경이므로 push 를 통해 remote repo에 적용해주면 된다.
나의 개인 Repo 동기화 완료!
출처 : json.postype.com/post/210431
728x90'Git & Git hub' 카테고리의 다른 글
[Git] Rebase (0) 2021.02.18 [Git] 브랜칭 전략 (0) 2021.02.16