자식 리포지토리에서 종속성을 어떻게 연결할 수 있습니까?


149

내 스크립트에서 나는 종종 자신의 저장소가있는 라이브러리 (광산 또는 다른 사람)를 사용합니다. 내 리포지토리에서 복제하고 새 버전이 나올 때마다 업데이트하지 않으려 고합니다. 그러나 누군가가 저장소를 복제 할 때 여전히 로컬에서 작동하며 끊어진 링크가 없어야합니다.

내가 할 수있는 일에 대한 아이디어가 있습니까?

답변:


212

git의 하위 모듈 로이 작업을 수행 할 수 있습니다. 저장소에서 다음을 수행하십시오.

git submodule add path_to_repo path_where_you_want_it

따라서 라이브러리의 저장소에 URL이 git://github.com/example/some_lib.git있고 lib/some_lib프로젝트 에서 URL 을 원하면 다음을 입력하십시오.

git submodule add git://github.com/example/some_lib.git lib/some_lib

이 작업은 리포지토리의 최상위 디렉터리에서 수행해야합니다. 따라서 cd먼저 디렉토리에 넣지 마십시오 .

하위 모듈을 추가 한 후 또는 누군가 저장소를 새로 체크 아웃 할 때마다 다음을 수행해야합니다.

git submodule init
git submodule update

그런 다음 추가 한 모든 하위 모듈이 동일한 버전으로 체크 아웃됩니다.

라이브러리 중 하나의 최신 버전으로 업데이트 cd하려면 하위 모듈로 이동하여 다음을 수행하십시오.

cd lib/some_lib
git pull

그런 다음, 당신이 할 때 git status당신은 참조해야 lib/somelib수정 된 섹션에 나열된. 해당 파일을 추가하고 커밋하면 최신 상태입니다. 공동 작업자가 해당 커밋을 저장소로 가져 오면 다시 lib/somelib실행될 때까지 수정 된 것으로 표시 됩니다 git submodule update.


2
답장 해 주셔서 감사합니다. (그리고 아마도 내일 받아 들일 것입니다) 다른 저장소에서 하나의 파일 만 종속성으로 추가하는 방법이 있습니까? 아니면 전체 폴더 여야합니까?
Lea Verou

2
하위 모듈로 추적하려면 (따라서 쉽게 업데이트를 가져 오려면) 전체 저장소를 가져와야합니다. 다른 많은 VCS와 달리 git은 실제로 최상위 리포지토리 만 처리하려고합니다.
Emily

7
서브 모듈의 장점과 잠재적 인 문제를 해결하는 방법을 알아 보려면 이 내용읽으십시오 . 그리고 그것에 대한 토론 .
minghua

1
소유하고있는 다른 리포지토리를 하위 모듈로 가져올 수 있습니다. 서브 모듈의 로컬 변경을 통해 원래 리포지토리를 변경할 수 있습니까? 버그를 발견하고 원본을 업데이트해야한다고 말할 수 있습니까?
andrevenancio

3
나는 이것이 오래된 대답이라는 것을 알고 있지만 git 서브 모듈은 git submodule update --remote더 복잡한 프로젝트를 위해 더 많은 플래그를 사용하는 것이 좋습니다. 사용git submodule update --remote --recursive --init
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.