티스토리 뷰

반응형

Git: 원본 저장소 fork 및 동기화

프로젝트를 수행하다보면 Github에 공개된 오픈 소스 프로젝트들을 기반으로 코드를 수정해 사용하는 경우가 많습니다.

보통 git clone을 이용해 원본 저장소의 소스 코드를 복제하고 해당 소스를 기반으로 수정해 자신의 저장소에 push해 사용합니다.

그러다가 원본 저장소의 소스 코드가 업데이트될 경우, 해당 업데이트 내용을 내가 수정한 소스 코드에도 반영하고 싶은 순간들이 오게 됩니다.

이럴 때 필요한 것이 fork 및 동기화입니다.


Git 저장소 fork

# 프로젝트 복제
git clone <원본 저장소>

우선 자신이 사용할 프로젝트를 clone해 로컬에 저장합니다.

# 현재 Git 저장소의 리모트 확인
git remote -v

git clone으로 복제한 프로젝트 내에서 git 저장소의 리모트 저장소를 확인합니다.

원본 저장소가 origin으로 설정되어 있는 것을 확인할 수 있습니다.

# 기존의 origin 리모트를 upstream으로 변경(원본 Git 저장소)
git remote rename origin upstream

이제 fork를 위해 기존의 origin 리모트를로 변경합니다.

변경할 리모트의 이름은 어떤 것으로 해도 상관이 없습니다. 여기에서는 upstream으로 설정합니다.

# 새로운 origin 리모트 추가(자신의 Git 저장소)
git remote add origin <자신의 Git 저장소>

마지막으로 이제 새로운 origin 리모트를 추가합니다.

origin 리모트에는 자신의 Git 저장소를 설정합니다.

# 현재 Git 저장소의 리모트 확인
git remote -v

이제 다시 remote를 확인해 원본 저장소가 upstream, 자신의 Git 저장소가 origin으로 설정되었는지 확인합니다.


Git 저장소 동기화

# 원본 저장소 동기화
git fetch upstream

원본 저장소에 새로운 업데이트 사항이 있을 경우, fetch 명령을 수행해 해당 업데이트 내용을 가져옵니다.

fetch는 pull과 다르게 merge를 수행하지 않기 때문에 내가 수정한 코드가 변경되지 않습니다.

위에서 원본 저장소의 리모트를 upstream으로 설정했기 때문에 upstream으로 fetch해야 합니다.

git checkout -b master --track origin/master

checkout 명령 수행 시, 같은 이름을 가진 branch가 서로 다른 리모트에 존재하는 경우 오류가 발생하기 때문에 명시적으로 master branch를 설정해줍니다.

master branch를 한 번도 checkout하지 않은 상태에서, 리모트가 추가되고 데이터가 fetch 되면서 master branch가 두 개(origin/masterupstream/master)가 생겼기 때문에 발생합니다.

git merge upstream/master

이제 자신이 수정한 코드(origin/master)와 원본 저장소의 업데이트 코드(upstream/master)를 merge 합니다.

git push -u origin master

마지막으로 자신의 리모트 저장소(origin)에 모든 소스 코드를 push하면 원본 저장소와의 동기화가 완료됩니다.


참고 사이트

  • http://lifove.tistory.com/54


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함