결국,어떤 흥미로운 소프트웨어 프로젝트는 올해에 따라 다른 프로젝트 라이브러리나 프레임 워크입니다. 힘내는이를 돕기 위해 하위 모듈을 제공합니다. 하위 모듈을 사용하면 하나 이상의 리포지토리를 다른 리포지토리 내부의 하위 폴더로 포함하거나 포함 할 수 있습니다.
을 위해 많은 프로젝트,하위 모듈지 않고 최고의 답변(아래),그리고 심지어 그들의 최고의 작업 하위 모듈은 까다로운 일이 될 수 있습니다,하지만 시작해 보고 바로 앞으로 예입니다.,
하위 모듈 추가
Slingshot 이라는 프로젝트에서 작업하고 있다고 가정 해 보겠습니다. 당신은 코드y-shaped stick
및rubber-band
.
flickr 사진 Creative Commons(BY)라이센스하에 young@art 가 공유 한
동시에 다른 저장소에서는 Rock 이라는 다른 프로젝트가 있습니다.
rock
를slingshot
의 하위 모듈로 추가 할 수 있습니다., slingshot
저장소:
이 시점에서,당신은rock
폴더 안에slingshot
지만,당신이 채 안된 폴더에 따라,당신의 버전의 Git 표시될 수 있습니다.,
새로운 버전의 Git 이것을 할 것이 자동으로,그러나 오래된 버전이 필요 당신은 명시적으로 말 Git 다운로드 내용의rock
모든 것이 좋은 경우, 을 투입할 수 있는 이 변화와 당신은rock
folderslingshot
저장소와 모든 컨텐츠에서rock
장합니다.,
On GitHub,rock
폴더 아이콘이 있을 것이 작은 지표를 보여주는 것 서브모듈:
클릭rock
폴더에 당신을 데려 갈 것이 넘는rock
장합니다.
그게 다야! rock
저장소를slingshot
저장소 안에 포함 시켰습니다. 상호 작용할 수 있는 모든 콘텐츠와 함께서rock
그것이 있다면 폴더의 내부slingshot
(기 때문에).,
에서 명령행 명령 명령어에서 발급한slingshot
(또는 다른 폴더rubber-band
및y-shaped-stick
)는 운영에서의”부모 저장소”,slingshot
, 하지만 당신을 명령한 문제에서rock
폴더에서 작동 단지rock
저장소:
가입를 사용하여 프로젝트 서브 모듈
이제 당신이 새로운 공동 작업자에 합류하는 프로젝트 슬링샷도 있습니다., git clone
를 실행하여slingshot
저장소의 내용을 다운로드하기 시작합니다. 이 시점에서rock
폴더 내부를 들여다 보면…
다시 말하지만,Git 은 서브 모듈의 콘텐츠를 다운로드하도록 명시 적으로 요청할 것으로 기대합니다., 당신이 사용할 수 있는git submodule update --init --recursive
여기에뿐만 아니라,하지만 경우에 당신은 복제slingshot
을 위한 첫 번째 시간에 사용할 수 있습니다 modifiedclone
명령을 지키 다운로드한 모든 것을 포함하여 모든 하위 모듈:
전환하면 하위 모듈
그것은 조금 어려울 수 있을 기존의 하위 폴더로 외부을 의미할 수 있습니다. 예를 살펴 보겠습니다.
새 프로젝트를 시작하려고합니다—매직 롤백은rubber-band
도 필요합니다., 자rubber-band
을 구축을 위한slingshot
,분할로 그것을 밖으로 독립 저장소한 다음을 포함 그것은 모두 프로젝트를 통해 서브 모듈.
Project Slingshot 의rubber-band
폴더에서 모든 것을 가져 와서 새 저장소로 추출하고 커밋 기록을 유지할 수도 있습니다.
rubber-band
폴더 중slingshot
의 내용을 추출하여 시작하겠습니다., 당신이 사용할 수 있는git filter-branch
이를 떠나 당신은 단지사 관련하여rubber-band
. git filter-branch
명령을 다시 작성합니다 우리의 저장소의 역사는,그것을 보면rubber-band
폴더에 있었다 자신의 모든 저장소와 함께. git filter-branch
에 대한 자세한 내용은이 기사를 참조하십시오.
첫 번째 단계는 복사본을 만들의slingshot
하는 작업에 최종 목표는rubber-band
를 자신의 저장소,그래서 떠나slingshot
것입니다., 당신이 사용할 수 있는cp
-r
을 재귀적으로 전체를 복사하는slingshot
폴더에 새로운 폴더rubber-band
.,
그것은 다음과 같rubber-band
또는slingshot
지만,에서,지금rubber-band
repository,실행git filter-branch
:
이 시점에서,당신은 폴더rubber-band
는 저장하는 일종의 유사한 프로젝트는 새총지만,그것만 가지고 파일과 commit 역사에서rubber-band
폴더에 있습니다.,
때문에 당신이 이것을 복사에서slingshot
,새로운 저장소는 여전히 원격 추적 가지 당신이 설치되었을 때는slingshot
. 당신은rubber-band
를 다시slingshot
로 푸시하고 싶지 않습니다. 이것을 새로운 저장소로 푸시하고 싶습니다.
새로운 저장소 만들기 위해rubber-band
GitHub,그 후 업데이트에 대한 원격rubber-band
., 가정하면 당신은 전화 원격origin
,당신은 다음을 수행할 수 있습니다.
다를 게시할 수 있습니다”새로운 일반적인 고무 밴드 모듈과 함께”git push
.,
이제는 당신이 구분rubber-band
로,자신의 저장소를 삭제해야 된rubber-band
폴더에서slingshot
저장소:
그 후 업데이트slingshot
사용하는rubber-band
으로 서브모듈:
좋아하는 우리가 보았기 전에 우리를 추가rock
, 우리는 지금 저장소에 저장소., 세 저장소,사실로:”부모”저장소slingshot
,플러스 두”하위”저장소rock
및rubber-band
.
외에도,우리가 다이빙으로slingshot
‘s history,우리가 볼 수 있습니다.우리는 원래로 만든rubber-band
었을 때 폴더를 삭제하는 폴더를 삭제하지 않는 모든의 역사입니다., 이 때로는 조금 복잡하기 때문에—rubber-band
“아이는”저는할 수정된 버전의 오래된slingshot
커밋,그것은 때로는 같은 느낌이 있 déja vu.
불행히도,모든 협력자들을 끌어slingshot
이 시점에서 있을 것이다 빈rubber-band
폴더에 있습니다., 할 수 있게 당신의 공동 작업자가 이 명령을 실행하도록 모든 서브모듈의 콘텐츠:
당신은 또한 추가rubber-band
서브모듈을magic roll-back can
. 다행히도,당신이해야 할 모든 것을 따라 동일한 절차 이전에 사용한 경우 추가rock
을slingshot
에서”추가 서브모듈.”
에 대한 조언을 사용하여 하위 모듈(또는)
- 를 추가하기 전에 저장소로 서브모듈 먼저 확인하십시오 당신은 더 나은 대안이 유효합니다., Git 서브 모듈을 작동을 위해 충분히 잘 간단한 경우,그러나 이러한 일이 있다 종종 더 나은 사용할 수 있는 도구를 종속성 관리 것보다 Git 서브 모듈을 제공할 수 있습니다. Go 와 같은 현대 언어에는 처음부터 친숙한 Git 인식 종속성 관리 시스템이 내장되어 있습니다. 루비의 루비 겜,노드와 같은 다른 것들.js’npm 또는 Cocoa 의 CocoaPods 와 Carthage 는 프로그래밍 커뮤니티에 의해 추가되었습니다. 프론트 엔드 개발자조차도 클라이언트 측 JavaScript 및 CSS 용 라이브러리 및 프레임 워크를 관리 할 수있는 Bower 와 같은 도구를 가지고 있습니다.
- Git 은 기본적으로 서브 모듈 내용을 다운로드하지 않는다는 것을 기억하십시오., 를 추가하는 경우 서브모듈 기존 프로젝트는지 확인 누군가에서 작동하는 프로젝트를 알고 있는 그들이 필요한 명령을 실행하기 위해 다음과 같
git submodule update
및git clone --recursive
할 수 있도록 하는 것입니 모든 것—이 포함 자동화된 배포 또는 테스트를 서비스할 수 있는 프로젝트에 참여! 우리는 당신이 뭔가를 사용하여 우리의”스크립트 모두 규칙”모든 공동 작업자 및 서비스에 액세스할 수 있 같은 저장소의 콘텐츠다. - 하위 모듈을 사용하면 일관성과 편리함의 균형을 신중하게 유지해야합니다., 여기에 사용 된 설정은 약간의 편의 비용으로 일관성을 강하게 선호합니다. 그것은 일반적으로 최고의 프로젝트의 하위 모듈 고정 특정 SHA,그래서 모든 공동 작업자가 받은 동일한 콘텐츠입니다. 그러나 이 설정은 또한 그것이 어려운 개발자를 위해서는”부모”저장소에 기여 변경 다시 서브모듈장합니다.
- 기억하는 공지 않을 것이 자동으로 업데이트를 참조하십시오를 하위 모듈—를 업데이트하는 경우 서브모듈이 필요할 수 있습을 생각 나게하는 당신의 동료가 실행하는
git submodule update
또는 그들이 이상한 행동입니다., - 적 관리,빠르게 진화 또는 공동 의존하는 저장소와 서브 모듈을 수 있는 빠르게 실망입니다. 이 게시물은 단순하고 비교적 정적 인 부모-자식 저장소 관계에 중점을 두었습니다. 향후 후속 게시물에서는보다 복잡한 하위 모듈 워크 플로를 관리하는 데 도움이되는 몇 가지 전략을 자세히 설명합니다.