하위 모듈: git repo 내부의 git repo.

내 시스템에서 saleor-platform을 설정하기 위해 설치 가이드를 따랐을 때, 필요한 모든 명령을 복사하여 대부분의 의미를 이해하지 못한 채 내 터미널에 붙여넣었습니다.

첫 번째 명령은

git clone https://github.com/mirumee/saleor-platform.git --recursive --jobs 3


나는 git clone <repo-url>를 잘 이해했지만 recursive --jobs 3가 그곳에서 무엇을 하고 있는지 전혀 몰랐습니다.
그래도 오류가 발생하지 않는 한 실제로 귀찮게하지 않았습니다.

하지만 나중에 github에서 저장소를 탐색하고 폴더를 클릭하면 마치 다른 저장소로 리디렉션되는 것 같았습니다. 😲
즉시 Google에 문의하여 "git 저장소에 git 저장소를 가질 수 있습니까?"라고 물었습니다.
그리고 짜잔! 하위 모듈을 찾았습니다.

다음은 하위 모듈이 무엇인지 요약한 것입니다.
(this blog에서 )

하위 모듈
한 프로젝트에서 작업하는 동안 그 안에 있는 다른 프로젝트를 사용해야 하는 경우가 종종 있습니다. 타사에서 개발했거나 별도로 개발하고 여러 상위 프로젝트에서 사용 중인 라이브러리일 수 있습니다. 이러한 시나리오에서 공통적인 문제가 발생합니다. 두 프로젝트를 별개로 취급하면서도 다른 프로젝트 내에서 하나를 계속 사용할 수 있기를 원합니다.

Git은 하위 모듈을 사용하여 이 문제를 해결합니다. 하위 모듈을 사용하면 Git 리포지토리를 다른 Git 리포지토리의 하위 디렉터리로 유지할 수 있습니다. 이렇게 하면 다른 리포지토리를 프로젝트에 복제하고 커밋을 별도로 유지할 수 있습니다.

예시:
Slingshot이라는 프로젝트를 진행 중이라고 가정해 보겠습니다. y-shaped stickrubber-band에 대한 코드가 있습니다.



동시에 다른 리포지토리에는 Rock이라는 또 다른 프로젝트가 있습니다. 일반rock 라이브러리이지만 Slingshot에 적합하다고 생각합니다.
rockslingshot의 하위 모듈로 추가할 수 있습니다. slingshot 저장소에서:

git submodule add https://github.com/<user>/rock rock


이 시점에서 slingshot 안에 rock 폴더가 있지만 Git 버전에 따라 해당 폴더 내부를 들여다보면 아무것도 보이지 않을 수 있습니다.

최신 버전의 Git은 이 작업을 자동으로 수행하지만 이전 버전에서는 Rock의 콘텐츠를 다운로드하도록 Git에 명시적으로 지시해야 합니다.

git submodule update --init --recursive


모든 것이 좋아 보인다면 이 변경 사항을 커밋할 수 있으며 rock 저장소의 모든 콘텐츠와 함께 slingshot 저장소에 rock 폴더가 생깁니다.

GitHub에서 바위 폴더 아이콘에는 하위 모듈임을 나타내는 작은 표시기가 있습니다.



그리고 rock 폴더를 클릭하면 rock 저장소로 이동합니다.

그게 다야! slingshot 저장소 안에 rock 저장소를 내장했습니다. 마치 slingshot 내부의 폴더인 것처럼 (그렇기 때문에) rock의 모든 콘텐츠와 상호 작용할 수 있습니다.

명령줄에서 slingshot(또는 다른 폴더, rubber-band 및 y-shaped-stick)에서 실행된 Git 명령은 "부모 리포지토리"인 slingshot에서 작동하지만 rock 폴더에서 실행한 명령은 작동합니다. 락 저장소에서만:

cd ~/projects/slingshot
git log # log shows commits from Project Slingshot
cd ~/projects/slingshot/rubber-band
git log # still commits from Project Slingshot
cd ~/projects/slingshot/rock
git log # commits from Rock


하위 모듈을 사용하여 프로젝트 참여:
이제 Project Slingshot에 합류하는 새로운 공동 작업자라고 가정해 보겠습니다. git clone을 실행하여 새총 저장소의 콘텐츠를 다운로드하는 것으로 시작합니다. 이 시점에서 rock 폴더 내부를 들여다보면 아무것도 보이지 않습니다.

다시 말하지만 Git은 우리가 하위 모듈의 콘텐츠를 다운로드하도록 명시적으로 요청하기를 기대합니다. 여기에서도 git submodule update --init --recursive를 사용할 수 있지만 처음으로 새총을 복제하는 경우 수정된 복제 명령을 사용하여 하위 모듈을 포함한 모든 것을 다운로드할 수 있습니다.

git clone --recursive <project url>


하위 모듈을 사용하면 하나 이상의 저장소를 다른 저장소 내의 하위 폴더로 포함하거나 내장할 수 있습니다.

결국 나는 아무도 나에게 이것에 대해 말하지 않은 것과 같았습니다.

좋은 웹페이지 즐겨찾기