외부 저장소 하위 모듈을 사용하도록 git 프로젝트를 설정하는 방법은 무엇입니까?


213

원격 저장소를 가져 오는 저장소를 만들고 싶습니다.

예를 들어, jQuery를 하위 모듈로 가정 해 보겠습니다.

git://github.com/jquery/jquery.git

jQuery를 하위 모듈로 사용하여 저장소를 작성하고 외부 저장소를 원격 저장소로 추가하는 프로세스는 무엇입니까?

또한 이것이 설정되면, 내 리모컨으로 밀거나 당기면 외부가 그대로 유지됩니까?


1
"풀인 (pull in)"이라고 말하면 jQuery 리포지토리가 자신의 리포지토리의 하위 모듈이되고 싶다는 말입니까?
ezod

네, 정확하지 않으면 죄송합니다. 내 리모컨으로 변경 사항을 밀고 당기면서 외부로 설정하는 방법을 알고 싶습니다
Tom

git wiki 에서 Git Submodule Tutorial 을 보라 .
Greg Bacon

답변:


343
  1. 프로젝트가 있습니다- 이미 github 저장소가있는 MyWebApp 이라고하십시오.
  2. 프로젝트에서 jquery 저장소 를 사용하려고합니다
  3. jquery repo를 하위 모듈 로 프로젝트에 가져오고 싶습니다 .

서브 모듈은 실제로 참조하고 사용하기 쉽습니다. 이미 MyWebApp을 저장소로 설정했다고 가정하면 터미널에서 다음 명령을 실행하십시오.

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

externals/jquery* 라는 디렉토리가 생성 되어 github jquery 저장소에 연결됩니다. 이제 하위 모듈을 초기화하고 코드를 복제하면됩니다.

git submodule update --init --recursive

이제 모든 최신 코드를 서브 모듈에 복제해야합니다. jquery repo가 ​​변경되고 최신 코드를 풀다운하려면 submodule update명령을 다시 발행 하십시오. 참고 : 일반적으로 프로젝트에 여러 외부 저장소가 있으므로 항상 "외부"디렉토리 아래에 저장소를 그룹화합니다.

온라인 Pro Git Book 에는 읽기 쉬운 방식으로 제공되는 하위 모듈 (및 일반적으로 git)에 대한 유용한 정보가 있습니다. 또는 git help submodule좋은 정보도 제공 할 것입니다. 또는 git wiki 에서 Git Submodule Tutorial보자 .

하위 블로그에 대해 이야기하고 Subversion의 svn : externals 메커니즘과 비교하는이 블로그 항목을 발견했습니다. http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* 모범 사례로서 항상 서브 모듈을 외부와 같은 자체 디렉토리에 배치해야합니다. 그렇지 않으면 루트 프로젝트 디렉토리가 매우 어수선해질 수 있습니다.


4
좋은 설명! :) 또한 "git help submodules"는 좀 더 자세한 내용, 내부 등을 원할 경우 도움이됩니다.
WhyNotHugo

2
고마워, 내가 정확히 필요한 것.
MikeSchinkel

1
@Chevi 요구 사항에 따라 다릅니다. 일반적으로 git 프로젝트를 하위 모듈로 프로젝트에 추가하는 것은 자주 변경되거나 개발중인 프로젝트에 적합한 솔루션입니다. 이를 통해 프로젝트의 모든 타사 코드가 최신 상태인지 쉽게 확인할 수 있습니다. 기본적으로 정적 인 정적 코드 인 버전마다 버전이 많이 변하지 않는 안정적이고 성숙한 코드 인 하위 코드의 경우 하위 모듈을 사용하면 큰 가치가 없습니다.
memmons

2
죄송하지만 svn externals와 비교하면 쉽지 않습니다
Keil

2
@Keil 그것은 두 가지 명령이며 git submodule add, git submodule update... 어떻게 얻을 수 있는지 쉽게 모르겠습니다.
memmons

24

당신이 알아야 할 대부분의 답변은 이미 답변되었으므로 다루지 않겠지 만 일반적으로 누락되는 작은 정보를 발견했습니다.

아시다시피 "git pull"은 하위 모듈을 업데이트하지 않으며 "git submodules update"는 해당 하위 모듈의 최신 HEAD도 다운로드하지 않습니다.

모든 하위 모듈을 최신 업스트림 개정으로 업데이트하려면

git submodule foreach git pull

하위 모듈을 자주 변경하고 많은 모듈을 가지고 있다면 "git foreach"가 매우 중요해집니다.



0

@ Hugo의 대답은 당신이 필요로하고 잘 작동 할 수 있다고 생각합니다. 그래서 더 쉬운 방법을 찾았습니다.

git submodule update --remote

그게 다야.

따라서 완전한 워크 플로는 다음과 같습니다.

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.