GitHub Blog (한국어)

결국,어떤 흥미로운 소프트웨어 프로젝트는 올해에 따라 다른 프로젝트 라이브러리나 프레임 워크입니다. 힘내는이를 돕기 위해 하위 모듈을 제공합니다. 하위 모듈을 사용하면 하나 이상의 리포지토리를 다른 리포지토리 내부의 하위 폴더로 포함하거나 포함 할 수 있습니다.

을 위해 많은 프로젝트,하위 모듈지 않고 최고의 답변(아래),그리고 심지어 그들의 최고의 작업 하위 모듈은 까다로운 일이 될 수 있습니다,하지만 시작해 보고 바로 앞으로 예입니다.,

하위 모듈 추가

Slingshot 이라는 프로젝트에서 작업하고 있다고 가정 해 보겠습니다. 당신은 코드y-shaped stickrubber-band.


flickr 사진 Creative Commons(BY)라이센스하에 young@art 가 공유 한

동시에 다른 저장소에서는 Rock 이라는 다른 프로젝트가 있습니다.

rockslingshot의 하위 모듈로 추가 할 수 있습니다., slingshot저장소:

이 시점에서,당신은rock폴더 안에slingshot지만,당신이 채 안된 폴더에 따라,당신의 버전의 Git 표시될 수 있습니다.,

새로운 버전의 Git 이것을 할 것이 자동으로,그러나 오래된 버전이 필요 당신은 명시적으로 말 Git 다운로드 내용의rock

모든 것이 좋은 경우, 을 투입할 수 있는 이 변화와 당신은rockfolderslingshot저장소와 모든 컨텐츠에서rock장합니다.,

On GitHub,rock폴더 아이콘이 있을 것이 작은 지표를 보여주는 것 서브모듈:

클릭rock폴더에 당신을 데려 갈 것이 넘는rock장합니다.

그게 다야! rock저장소를slingshot저장소 안에 포함 시켰습니다. 상호 작용할 수 있는 모든 콘텐츠와 함께서rock그것이 있다면 폴더의 내부slingshot(기 때문에).,

에서 명령행 명령 명령어에서 발급한slingshot(또는 다른 폴더rubber-bandy-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-bandrepository,실행git filter-branch:

이 시점에서,당신은 폴더rubber-band는 저장하는 일종의 유사한 프로젝트는 새총지만,그것만 가지고 파일과 commit 역사에서rubber-band폴더에 있습니다.,

때문에 당신이 이것을 복사에서slingshot,새로운 저장소는 여전히 원격 추적 가지 당신이 설치되었을 때는slingshot. 당신은rubber-band를 다시slingshot로 푸시하고 싶지 않습니다. 이것을 새로운 저장소로 푸시하고 싶습니다.

새로운 저장소 만들기 위해rubber-bandGitHub,그 후 업데이트에 대한 원격rubber-band., 가정하면 당신은 전화 원격origin,당신은 다음을 수행할 수 있습니다.

다를 게시할 수 있습니다”새로운 일반적인 고무 밴드 모듈과 함께”git push.,

이제는 당신이 구분rubber-band로,자신의 저장소를 삭제해야 된rubber-band폴더에서slingshot저장소:

그 후 업데이트slingshot사용하는rubber-band으로 서브모듈:

좋아하는 우리가 보았기 전에 우리를 추가rock, 우리는 지금 저장소에 저장소., 세 저장소,사실로:”부모”저장소slingshot,플러스 두”하위”저장소rockrubber-band.

외에도,우리가 다이빙으로slingshot‘s history,우리가 볼 수 있습니다.우리는 원래로 만든rubber-band었을 때 폴더를 삭제하는 폴더를 삭제하지 않는 모든의 역사입니다., 이 때로는 조금 복잡하기 때문에—rubber-band“아이는”저는할 수정된 버전의 오래된slingshot커밋,그것은 때로는 같은 느낌이 있 déja vu.

불행히도,모든 협력자들을 끌어slingshot이 시점에서 있을 것이다 빈rubber-band폴더에 있습니다., 할 수 있게 당신의 공동 작업자가 이 명령을 실행하도록 모든 서브모듈의 콘텐츠:

당신은 또한 추가rubber-band서브모듈을magic roll-back can. 다행히도,당신이해야 할 모든 것을 따라 동일한 절차 이전에 사용한 경우 추가rockslingshot에서”추가 서브모듈.”

에 대한 조언을 사용하여 하위 모듈(또는)

  • 를 추가하기 전에 저장소로 서브모듈 먼저 확인하십시오 당신은 더 나은 대안이 유효합니다., Git 서브 모듈을 작동을 위해 충분히 잘 간단한 경우,그러나 이러한 일이 있다 종종 더 나은 사용할 수 있는 도구를 종속성 관리 것보다 Git 서브 모듈을 제공할 수 있습니다. Go 와 같은 현대 언어에는 처음부터 친숙한 Git 인식 종속성 관리 시스템이 내장되어 있습니다. 루비의 루비 겜,노드와 같은 다른 것들.js’npm 또는 Cocoa 의 CocoaPods 와 Carthage 는 프로그래밍 커뮤니티에 의해 추가되었습니다. 프론트 엔드 개발자조차도 클라이언트 측 JavaScript 및 CSS 용 라이브러리 및 프레임 워크를 관리 할 수있는 Bower 와 같은 도구를 가지고 있습니다.
  • Git 은 기본적으로 서브 모듈 내용을 다운로드하지 않는다는 것을 기억하십시오., 를 추가하는 경우 서브모듈 기존 프로젝트는지 확인 누군가에서 작동하는 프로젝트를 알고 있는 그들이 필요한 명령을 실행하기 위해 다음과 같git submodule updategit clone --recursive할 수 있도록 하는 것입니 모든 것—이 포함 자동화된 배포 또는 테스트를 서비스할 수 있는 프로젝트에 참여! 우리는 당신이 뭔가를 사용하여 우리의”스크립트 모두 규칙”모든 공동 작업자 및 서비스에 액세스할 수 있 같은 저장소의 콘텐츠다.
  • 하위 모듈을 사용하면 일관성과 편리함의 균형을 신중하게 유지해야합니다., 여기에 사용 된 설정은 약간의 편의 비용으로 일관성을 강하게 선호합니다. 그것은 일반적으로 최고의 프로젝트의 하위 모듈 고정 특정 SHA,그래서 모든 공동 작업자가 받은 동일한 콘텐츠입니다. 그러나 이 설정은 또한 그것이 어려운 개발자를 위해서는”부모”저장소에 기여 변경 다시 서브모듈장합니다.
  • 기억하는 공지 않을 것이 자동으로 업데이트를 참조하십시오를 하위 모듈—를 업데이트하는 경우 서브모듈이 필요할 수 있습을 생각 나게하는 당신의 동료가 실행하는git submodule update또는 그들이 이상한 행동입니다.,
  • 적 관리,빠르게 진화 또는 공동 의존하는 저장소와 서브 모듈을 수 있는 빠르게 실망입니다. 이 게시물은 단순하고 비교적 정적 인 부모-자식 저장소 관계에 중점을 두었습니다. 향후 후속 게시물에서는보다 복잡한 하위 모듈 워크 플로를 관리하는 데 도움이되는 몇 가지 전략을 자세히 설명합니다.

추가 읽기

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다