흔한 개발자의 일상
Git으로 외부 프로젝트 복사해서 사용하기(subtree) 본문
좋은 라이브러리를 깃헙에서 가져왔는데 뭔가 오류가 있어서 수정도 하고 싶고
수정된 소스를 다른 프로젝트에 쓰고 싶다면 어떻게 해야 할까?
프로젝트를 진행하다 보면 외부 프로젝트를 내 프로젝트에 조합해(incorporating) 사용할 때가 많다.
기본적으로 내 프로젝트에 외부 깃 프로젝트를 복사해서 내 로컬 저장소에 커밋하지 못한다. 어떻게 해야 할까?
대안은 있다. submodule 과 subtree 방식 두가지 중 자신에게 맞는 것을 사용하면 된다.
하지만 이것으로 만족하지 못했는지 통째로 가져와 수정하고 싶다면 subtree 방식을 사용해야 한다.
서브 모듈과 서브 트리의 차이
1. 서브 모듈
- 서브 모듈은 외부 프로젝트를 자신의 리모트 저장소에서 포인트를 해 매번 클론을 할때 마다 링크된 모듈들도 같이 받아오는 방식이다.
- 즉, 서브모듈 컴포넌트 기반 개발이며 각각의 모듈들에 의존한다.
아래 같이.gitmodule 이란 파일에 모듈들을 다운받을 링크들이 담겨있는 것을 확인 할 수 있다.
2. 서브 트리
- 서브 트리 한번에 외부 프로젝트 전체를 저장해 자신의 로컬 저장소에 커밋한다.
- 즉, 서브트리는 시스템 기반 개발이며 모든 정보를 갖고 있으며 언제든지 어느부분이든 수정할 수 있다.
서브트리 사용 방법
이 사이트를 참고하였으니 좀더 디테일하게 참고하고자 하는 분들은 여기서 보시면 된다.
1. 내 리모트 저장소에 해당 외부 저장소를 가리키기(Point)
$ git add <내 리모트 저장소 이름> <외부 저장소 이름>
e.g:
$ git remote add itext_remote https://github.com/xivSolutions/iTextToolsExample.git
2. 포인트한 외부 저장소 데이터를 내 리모트 저장소로 가져오기
$ git fetch <remote_name>
e.g:
$ git fetch itext_remote
내 로컬 리모트 저장소가 외부 저장소를 가리키기 때문에 fetch를 하면 가리키고 있는 저장소의 파일을 가져옵니다.
3. 받아온 외부 저장소 데이터의 브랜치와 동시에 내 로컬 저장소 브랜치 생성하기
$ git checkout -b <new_branch_name> remote_name/branch_name
e.g:
$ git checkout –b itext_branch itext_remote/master
내 로컬 리모트 저장소에 새 브런치를 생성하면서 외부 프로젝트 브런치를 복사해 가져옵니다.